Skip to main content

Linux Kernel CVE-2025-39988

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 kernel overflow (AV:L) with no user interaction; requires network capabilities (CAP_NET_ADMIN/RAW) so PR:L, yielding full kernel-memory CIA impact (C/I/A:H).

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:04 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: etas_es58x: 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 etas_es58x 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, es58x_start_xmit() receives a CAN XL frame which it is not able to correctly handle and will thus misinterpret it as a CAN(FD) frame.

This can result in a buffer overflow. For example, using the es581.4 variant, the frame will be dispatched to es581_4_tx_can_msg(), go through the last check at the beginning of this function:

if (can_is_canfd_skb(skb)) return -EMSGSIZE;

and reach this line:

memcpy(tx_can_msg->data, cf->data, cf->len);

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 or CANFD_MTU (depending on the device capabilities). By fixing the root cause, this prevents the buffer overflow.

AnalysisAI

Local privilege-context buffer overflow in the Linux kernel's ETAS ES58x CAN USB driver (etas_es58x) lets a user with network capabilities corrupt kernel memory by injecting oversized CAN XL frames. Because the driver never implemented ndo_change_mtu(), an attacker can raise the interface MTU beyond CAN limits, then use a PF_PACKET raw socket with ETH_P_CANXL to smuggle a frame whose length field (up to 0xff) is memcpy'd into an 8-byte buffer, overflowing it by up to 247 bytes. CVSS is 7.8 (High); there is no public exploit identified at time of analysis and EPSS is low (0.22%), consistent with the requirement for local access and specific ETAS hardware.

Technical ContextAI

The affected component is the etas_es58x driver, which supports ETAS ES581.4 and ES58x-series USB-to-CAN interfaces on Linux. CAN network devices use a fixed MTU (CAN_MTU = 16 for Classic CAN, CANFD_MTU = 72 for CAN FD) and rely on the kernel CAN framework to validate frames. The root cause is a missing net_device_ops->ndo_change_mtu() handler: without it, the generic net core accepts arbitrary MTU values. PF_PACKET SOCK_RAW bypasses the CAN framework and reaches the driver's xmit() directly, with the only guard being that skb->len fits the (now attacker-controlled) MTU. can_dev_dropped_skb() fails to catch the mismatch because it validates skb->protocol (ETH_P_CANXL is 'valid') and length independently of the device's actual CAN XL capability. In es581_4_tx_can_msg(), the CAN XL frame's flags byte is misinterpreted as the CAN(FD) length and passed to memcpy(tx_can_msg->data, cf->data, cf->len), overflowing the fixed destination. This is a classic CWE-787 (out-of-bounds write) / CWE-120 buffer overflow, though the input lists CWE as N/A.

Affected ProductsAI

The Linux kernel's etas_es58x CAN driver (drivers/net/can/usb/etas_es58x), covering ETAS ES581.4 and ES58x-family USB CAN interfaces, is affected on kernel versions prior to those containing the fix. No CPE strings were provided in the input, so exact version ranges are not enumerated here; the fix is distributed across multiple stable-tree commits at git.kernel.org (38c0abad45b1, 72de0facc50a, b26cccd87dcd, c4e582e686c4, cbc1de71766f, e587af2c89ec), indicating backports to several maintained stable branches. Consult your distribution's advisory for the exact patched package version.

RemediationAI

Upstream fix available (commit); released patched kernel version not independently confirmed from the provided data - apply the vendor/distribution kernel update that incorporates the ndo_change_mtu() population for etas_es58x, referencing the stable commits at https://git.kernel.org/stable/c/cbc1de71766f326a44bb798aeae4a7ef4a081cc9 (and backports 38c0abad45b190a30d8284a37264d2127a6ec303, 72de0facc50afdb101fb7197d880407f1abfc77f, b26cccd87dcddc47b450a40f3b1ac3fe346efcff, c4e582e686c4d683c87f2b4a316385b3d81d370f, e587af2c89ecc6382c518febea52fa9ba81e47c0). Until patched, compensating controls include blacklisting the etas_es58x kernel module on hosts that do not need ETAS CAN hardware (trade-off: disables the interface entirely), physically removing or restricting attachment of ES58x USB devices, and tightening capability grants so untrusted users cannot obtain CAP_NET_ADMIN/CAP_NET_RAW (trade-off: may affect legitimate network-management tooling in containers). These controls prevent the MTU-raising and raw-socket steps that make the overflow reachable.

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-39988 vulnerability details – vuln.today

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