Skip to main content

Linux Kernel CVE-2025-39985

HIGH
2025-10-15 416baaa9-dc9f-4396-8d5f-8c081fb06d67
7.8
CVSS 3.1 · Vendor: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
Share

Severity by source

Vendor (416baaa9-dc9f-4396-8d5f-8c081fb06d67) PRIMARY
7.8 HIGH
AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
vuln.today AI
7.8 HIGH

Local-only with no UI; needs CAP_NET_ADMIN to change MTU so PR:L, low complexity, and a kernel OOB write yields full C/I/A impact.

3.1 AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
4.0 AV:L/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
SUSE
5.5 MEDIUM
AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H

Primary rating from Vendor (416baaa9-dc9f-4396-8d5f-8c081fb06d67).

CVSS VectorVendor: 416baaa9-dc9f-4396-8d5f-8c081fb06d67

Attack Vector
Local
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Unchanged
Confidentiality
High
Integrity
High
Availability
High

Lifecycle Timeline

2
Analysis Generated
Jul 30, 2026 - 08:06 vuln.today
CVE Published
Oct 15, 2025 - 08:15 cve.org
HIGH 7.8

DescriptionCVE.org

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

can: mcba_usb: populate ndo_change_mtu() to prevent buffer overflow

Sending an PF_PACKET allows to bypass the CAN framework logic and to directly reach the xmit() function of a CAN driver. The only check which is performed by the PF_PACKET framework is to make sure that skb->len fits the interface's MTU.

Unfortunately, because the mcba_usb driver does not populate its net_device_ops->ndo_change_mtu(), it is possible for an attacker to configure an invalid MTU by doing, for example:

$ ip link set can0 mtu 9999

After doing so, the attacker could open a PF_PACKET socket using the ETH_P_CANXL protocol:

socket(PF_PACKET, SOCK_RAW, htons(ETH_P_CANXL))

to inject a malicious CAN XL frames. For example:

struct canxl_frame frame = { .flags = 0xff, .len = 2048, };

The CAN drivers' xmit() function are calling can_dev_dropped_skb() to check that the skb is valid, unfortunately under above conditions, the malicious packet is able to go through can_dev_dropped_skb() checks:

  1. the skb->protocol is set to ETH_P_CANXL which is valid (the

function does not check the actual device capabilities).

  1. the length is a valid CAN XL length.

And so, mcba_usb_start_xmit() receives a CAN XL frame which it is not able to correctly handle and will thus misinterpret it as a CAN frame.

This can result in a buffer overflow. The driver will consume cf->len as-is with no further checks on these lines:

usb_msg.dlc = cf->len;

memcpy(usb_msg.data, cf->data, usb_msg.dlc);

Here, cf->len corresponds to the flags field of the CAN XL frame. In our previous example, we set canxl_frame->flags to 0xff. Because the maximum expected length is 8, a buffer overflow of 247 bytes occurs!

Populate net_device_ops->ndo_change_mtu() to ensure that the interface's MTU can not be set to anything bigger than CAN_MTU. By fixing the root cause, this prevents the buffer overflow.

AnalysisAI

Local privilege-holders can trigger a kernel heap buffer overflow in the Linux mcba_usb CAN driver (Microchip CAN BUS Analyzer USB adapter) by raising the interface MTU beyond CAN_MTU and injecting a crafted CAN XL frame through a PF_PACKET raw socket. Because the driver never implemented ndo_change_mtu(), an attacker can set an oversized MTU (e.g. 9999), then send an ETH_P_CANXL frame whose flags byte is misread as the classic-CAN length field, causing memcpy to copy up to 247 bytes past the intended 8-byte buffer. This is a memory-corruption issue with high confidentiality, integrity and availability impact (CVSS 7.8); there is no public exploit identified at time of analysis, though the advisory includes a detailed reproduction, and EPSS is low at 0.22%.

Technical ContextAI

The flaw lives in the mcba_usb driver, which bridges Microchip's CAN BUS Analyzer USB dongle to Linux's SocketCAN/CAN networking stack. Sending frames via PF_PACKET (SOCK_RAW) bypasses the higher-level CAN framework and reaches the driver's ndo_start_xmit (mcba_usb_start_xmit) directly; the only validation PF_PACKET performs is that skb->len does not exceed the interface MTU. Normally CAN interfaces are pinned to CAN_MTU (16 bytes for classic CAN), but mcba_usb omitted a net_device_ops->ndo_change_mtu() handler, leaving the generic MTU setter in place so the MTU can be enlarged arbitrarily. A CAN XL frame (ETH_P_CANXL) then survives can_dev_dropped_skb() because that helper checks only protocol validity and a valid CAN XL length, not the device's actual capabilities. The driver then executes 'usb_msg.dlc = cf->len; memcpy(usb_msg.data, cf->data, usb_msg.dlc);' where cf->len is actually the CAN XL flags field (0xff in the PoC), overflowing the fixed 8-byte usb_msg.data buffer. This is a classic out-of-bounds write / buffer overflow (CWE-787/CWE-120 class, though the input lists CWE as N/A) rooted in a missing input-length/MTU validation.

Affected ProductsAI

The affected product is the Linux kernel, specifically the mcba_usb CAN network driver (drivers/net/can/usb/mcba_usb.c) for the Microchip CAN BUS Analyzer USB device. The input does not provide explicit fixed version numbers or CPE strings; affected versions are all kernel releases carrying the mcba_usb driver prior to the fix. The upstream fix is distributed across multiple stable-tree commits published on git.kernel.org (e.g. https://git.kernel.org/stable/c/17c8d794527f01def0d1c8b7dc2d7b8d34fed0e6 and seven sibling commits), indicating backports to several maintained stable branches; exact affected/fixed release tags are not stated in the provided data and should be confirmed against each distribution's kernel changelog.

RemediationAI

Upstream fix available (PR/commit); released patched version not independently confirmed - the correction populates net_device_ops->ndo_change_mtu() so the mcba_usb interface MTU can no longer be set above CAN_MTU, eliminating the root cause. Apply your distribution's kernel update that incorporates the relevant git.kernel.org stable commits (e.g. https://git.kernel.org/stable/c/17c8d794527f01def0d1c8b7dc2d7b8d34fed0e6, https://git.kernel.org/stable/c/0fa9303c4b9493727e0d3a6ac3729300e3013930, and the additional six referenced commits) and match the commit to the stable branch you run. As compensating controls until patched: unload/blacklist the mcba_usb module if the Microchip CAN-USB adapter is not needed (side effect: the CAN dongle stops working); restrict CAP_NET_ADMIN and avoid granting unprivileged user namespaces that could obtain CAP_NET_ADMIN over CAN interfaces (side effect: may break container networking or unprivileged network management); and prevent unprivileged access to PF_PACKET raw sockets where feasible (side effect: can break legitimate packet-capture and low-level networking tools).

Vendor StatusVendor

SUSE

Severity: Moderate
Product Status
Container suse/hpc/warewulf4-x86_64/sle-hpc-node:15.6.17.8.134 Image SLES15-SP6 Image SLES15-SP6-BYOS Image SLES15-SP6-BYOS-Azure Image SLES15-SP6-BYOS-EC2 Image SLES15-SP6-BYOS-GCE Image SLES15-SP6-CHOST-BYOS Image SLES15-SP6-CHOST-BYOS-Aliyun Image SLES15-SP6-CHOST-BYOS-Azure Image SLES15-SP6-CHOST-BYOS-EC2 Image SLES15-SP6-CHOST-BYOS-GCE Image SLES15-SP6-CHOST-BYOS-GDC Image SLES15-SP6-CHOST-BYOS-SAP-CCloud Image SLES15-SP6-EC2 Image SLES15-SP6-EC2-ECS-HVM Image SLES15-SP6-GCE Image SLES15-SP6-HPC-BYOS Image SLES15-SP6-HPC-BYOS-Azure Image SLES15-SP6-HPC-BYOS-EC2 Image SLES15-SP6-HPC-BYOS-GCE Image SLES15-SP6-HPC-EC2 Image SLES15-SP6-HPC-GCE Image SLES15-SP6-Hardened-BYOS Image SLES15-SP6-Hardened-BYOS-Azure Image SLES15-SP6-Hardened-BYOS-EC2 Image SLES15-SP6-Hardened-BYOS-GCE Image SLES15-SP6-SAP Image SLES15-SP6-SAP-Azure Image SLES15-SP6-SAP-EC2 Image SLES15-SP6-SAP-GCE Image SLES15-SP6-SAPCAL Image SLES15-SP6-SAPCAL-Azure Image SLES15-SP6-SAPCAL-EC2 Image SLES15-SP6-SAPCAL-GCE Affected
Container suse/sl-micro/6.0/baremetal-os-container:latest Container suse/sl-micro/6.0/toolbox:latest Affected
Container suse/sl-micro/6.0/base-os-container:2.1.3-7.65 Image SLE-Micro Image SLE-Micro-Azure Image SLE-Micro-BYOS Image SLE-Micro-BYOS-Azure Image SLE-Micro-BYOS-EC2 Image SLE-Micro-BYOS-GCE Image SLE-Micro-EC2 Image SLE-Micro-GCE Affected
Container suse/sl-micro/6.0/kvm-os-container:2.1.3-6.88 Affected
Container suse/sl-micro/6.0/rt-os-container:2.1.3-7.105 Affected

Share

CVE-2025-39985 vulnerability details – vuln.today

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy