Skip to main content
CVE Vulnerability Database
Vulnerability Database/CVE-2025-39828

CVE-2025-39828: Linux Kernel Privilege Escalation Flaw

CVE-2025-39828 is a privilege escalation vulnerability in the Linux Kernel atmtcp module that allows attackers to overwrite kernel pointers. This article covers technical details, affected versions, impact, and mitigation.

Updated:

CVE-2025-39828 Overview

CVE-2025-39828 is a Linux kernel vulnerability in the Asynchronous Transfer Mode over TCP (atmtcp) driver. The flaw resides in atmtcp_recv_control() within drivers/atm/atmtcp.c, where messages received via sendmsg() are processed without length validation. A local user can craft a message that overwrites an in-kernel pointer stored in the atmtcp_control structure, resulting in an arbitrary kernel write. The issue was reported by syzbot and triggers a KASAN general protection fault when exploited. The bug affects a wide range of Linux kernel versions, including releases up to 6.17-rc3, and Debian Linux 11.0.

Critical Impact

A local, low-privileged user can trigger an arbitrary kernel write, leading to potential privilege escalation, kernel memory corruption, or full compromise of the host.

Affected Products

  • Linux Kernel (multiple ranges through 6.17-rc3)
  • Linux Kernel 2.6.12 (including rc2 through rc5)
  • Debian Linux 11.0

Discovery Timeline

  • 2025-09-16 - CVE-2025-39828 published to the National Vulnerability Database (NVD)
  • 2026-06-17 - Last updated in NVD database

Technical Details for CVE-2025-39828

Vulnerability Analysis

The atmtcp driver implements a TCP-based transport for Asynchronous Transfer Mode (ATM) virtual circuits. When atmtcp_v_open() or atmtcp_v_close() runs during connect() or close(), atmtcp_send_control() sends an in-kernel control message. This message uses ATMTCP_HDR_MAGIC in atmtcp_control.hdr.length and embeds a pointer to a struct atm_vcc in atmtcp_control.vcc.

The struct atmtcp_control is part of the user-facing API but reserves space for an in-kernel pointer using the atm_kptr_t type. The control message is dispatched through atmtcp_c_send(), which is reachable from two paths: .ndo_start_xmit() via atm_send_aal0(), and vcc_sendmsg() from user space.

Because vcc_sendmsg() did not validate the payload length or format before invoking the device send operation, a local attacker could deliver crafted data through sendmsg() that atmtcp_recv_control() interpreted as an in-kernel control message. The KASAN report shows access to an attacker-controlled address 0x0000000100000558, confirming an arbitrary write primitive.

Root Cause

The root cause is missing input validation on messages entering atmtcp_c_send() from the vcc_sendmsg() path. User-supplied data is treated as a trusted control message containing a kernel pointer, violating the trust boundary between user space and kernel memory [CWE-20 / NVD-CWE-noinfo].

Attack Vector

A local user with the ability to open an ATM socket can call sendmsg() on that socket with a crafted atmtcp_control payload. The payload sets hdr.length to ATMTCP_HDR_MAGIC and supplies an attacker-controlled vcc pointer. atmtcp_recv_control() then dereferences and writes through that pointer, giving the attacker an arbitrary kernel write.

The upstream fix introduces a new ->pre_send() hook that validates messages originating from sendmsg() before they reach the control-message handler. See the patch series linked in the Patch Information section for the exact implementation.

Detection Methods for CVE-2025-39828

Indicators of Compromise

  • Kernel oops or general protection fault entries referencing atmtcp_recv_control or atmtcp_c_send in dmesg and /var/log/kern.log.
  • KASAN reports citing probably user-memory-access originating from drivers/atm/atmtcp.c.
  • Unexpected loading of the atm or atmtcp kernel modules on systems that do not require ATM networking.
  • Processes opening AF_ATMPVC or AF_ATMSVC sockets outside of legitimate ATM workloads.

Detection Strategies

  • Audit modprobe and kmod events for on-demand loading of atm_tcp or related ATM modules by unprivileged users.
  • Use auditd rules on the socket() and sendmsg() syscalls to capture arguments referencing ATM address families.
  • Correlate kernel crash telemetry with process ancestry to identify low-privileged callers reaching the atmtcp code path.

Monitoring Recommendations

  • Forward kernel logs and syscall auditing data to a centralized platform for retention and analysis.
  • Alert on any kernel panic, oops, or KASAN warning generated on production hosts running unpatched kernels.
  • Monitor for privilege escalation indicators such as unexpected UID transitions following kernel warnings.

How to Mitigate CVE-2025-39828

Immediate Actions Required

  • Apply the vendor kernel update that adds the ->pre_send() validation hook and fixes atmtcp_recv_control().
  • Blocklist the atm_tcp module on systems that do not require ATM-over-TCP functionality using /etc/modprobe.d/.
  • Restrict socket creation for AF_ATMPVC and AF_ATMSVC through seccomp profiles or SELinux/AppArmor policies.
  • Inventory hosts running affected kernel versions and prioritize patching for multi-tenant and shared systems.

Patch Information

The Linux kernel maintainers released fixes across multiple stable branches. Relevant commits include 0a6a6d4fb333, 33f9e6dc66b3, 3ab9f5ad9bae, 3c80c230d6e3, 51872b264290, 62f368472b0a, b502f16bad8f, and ec79003c5f9d. Debian users should apply the updates from the Debian LTS Announcement (msg00007) and Debian LTS Announcement (msg00008). Siemens has published corresponding guidance in the Siemens Security Advisory SSA-032379.

Workarounds

  • Blocklist the atm_tcp module to prevent it from loading on demand.
  • Deny access to ATM address families using seccomp filters on untrusted processes and containers.
  • Reduce local attack surface by restricting shell access on multi-user systems until patches are deployed.
bash
# Prevent the vulnerable module from loading
echo "blacklist atm_tcp" | sudo tee /etc/modprobe.d/disable-atmtcp.conf
echo "install atm_tcp /bin/true" | sudo tee -a /etc/modprobe.d/disable-atmtcp.conf
sudo update-initramfs -u

# Verify the module is not currently loaded
lsmod | grep atm_tcp

Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

Default Legacy - Prefooter | Experience the World’s Most Advanced Cybersecurity Platform

Experience the Most Advanced Cybersecurity Platform

See how the world’s most intelligent, autonomous cybersecurity platform can protect your organization today and into the future.