lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [day] [month] [year] [list]
Message-ID: <2025040349-CVE-2025-22003-ea29@gregkh>
Date: Thu,  3 Apr 2025 08:17:55 +0100
From: Greg Kroah-Hartman <gregkh@...uxfoundation.org>
To: linux-cve-announce@...r.kernel.org
Cc: Greg Kroah-Hartman <gregkh@...uxfoundation.org>
Subject: CVE-2025-22003: can: ucan: fix out of bound read in strscpy() source

Description
===========

In the Linux kernel, the following vulnerability has been resolved:

can: ucan: fix out of bound read in strscpy() source

Commit 7fdaf8966aae ("can: ucan: use strscpy() to instead of strncpy()")
unintentionally introduced a one byte out of bound read on strscpy()'s
source argument (which is kind of ironic knowing that strscpy() is meant
to be a more secure alternative :)).

Let's consider below buffers:

  dest[len + 1]; /* will be NUL terminated */
  src[len]; /* may not be NUL terminated */

When doing:

  strncpy(dest, src, len);
  dest[len] = '\0';

strncpy() will read up to len bytes from src.

On the other hand:

  strscpy(dest, src, len + 1);

will read up to len + 1 bytes from src, that is to say, an out of bound
read of one byte will occur on src if it is not NUL terminated. Note
that the src[len] byte is never copied, but strscpy() still needs to
read it to check whether a truncation occurred or not.

This exact pattern happened in ucan.

The root cause is that the source is not NUL terminated. Instead of
doing a copy in a local buffer, directly NUL terminate it as soon as
usb_control_msg() returns. With this, the local firmware_str[] variable
can be removed.

On top of this do a couple refactors:

  - ucan_ctl_payload->raw is only used for the firmware string, so
    rename it to ucan_ctl_payload->fw_str and change its type from u8 to
    char.

  - ucan_device_request_in() is only used to retrieve the firmware
    string, so rename it to ucan_get_fw_str() and refactor it to make it
    directly handle all the string termination logic.

The Linux kernel CVE team has assigned CVE-2025-22003 to this issue.


Affected and fixed versions
===========================

	Issue introduced in 6.2 with commit 7fdaf8966aae476deafe11f9a0067ff588615444 and fixed in 6.6.85 with commit cc29775a8a72d7f3b56cc026796ad99bd65804a7
	Issue introduced in 6.2 with commit 7fdaf8966aae476deafe11f9a0067ff588615444 and fixed in 6.12.21 with commit 8cec9e314d3360fc1d8346297c41a6ee45cb45a9
	Issue introduced in 6.2 with commit 7fdaf8966aae476deafe11f9a0067ff588615444 and fixed in 6.13.9 with commit a4994161a61bc8fd71d105c579d847cefee99262
	Issue introduced in 6.2 with commit 7fdaf8966aae476deafe11f9a0067ff588615444 and fixed in 6.14 with commit 1d22a122ffb116c3cf78053e812b8b21f8852ee9

Please see https://www.kernel.org for a full list of currently supported
kernel versions by the kernel community.

Unaffected versions might change over time as fixes are backported to
older supported kernel versions.  The official CVE entry at
	https://cve.org/CVERecord/?id=CVE-2025-22003
will be updated if fixes are backported, please check that for the most
up to date information about this issue.


Affected files
==============

The file(s) affected by this issue are:
	drivers/net/can/usb/ucan.c


Mitigation
==========

The Linux kernel CVE team recommends that you update to the latest
stable kernel version for this, and many other bugfixes.  Individual
changes are never tested alone, but rather are part of a larger kernel
release.  Cherry-picking individual commits is not recommended or
supported by the Linux kernel community at all.  If however, updating to
the latest release is impossible, the individual changes to resolve this
issue can be found at these commits:
	https://git.kernel.org/stable/c/cc29775a8a72d7f3b56cc026796ad99bd65804a7
	https://git.kernel.org/stable/c/8cec9e314d3360fc1d8346297c41a6ee45cb45a9
	https://git.kernel.org/stable/c/a4994161a61bc8fd71d105c579d847cefee99262
	https://git.kernel.org/stable/c/1d22a122ffb116c3cf78053e812b8b21f8852ee9

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ