CVE-2026-53262
NoneCVSS
—
EPSS
0.1%
Published
Jun 25, 2026
CISA due date
—
Cloudanix analysis
A local user or compromised program may be able to crash or take over a vulnerable Linux system by abusing a flaw in its L2TP networking code.
- Exploitation
- Local Privilege
- Attacker needs
- Local User
- Complexity
- Moderate
- Impact
- Privilege Gain
- Component
- OS kernel
- Class
- Use After Free
- Remediation
- Patch
- Effort
- Low
- Patch risk
- Low
What it actually does
This is a Linux kernel use-after-free flaw in the PPP over L2TP socket ioctl path. The vulnerable pppol2tp_ioctl() code reads sk->sk_user_data without taking a safe reference to the associated L2TP session. A local process can induce a sleep during copy_from_user(), for example by using a userfaultfd-triggered page fault, while another thread closes the socket. The close path can asynchronously free the l2tp_session object through l2tp_session_del_work; when the ioctl resumes, it can dereference a stale pointer. Depending on kernel configuration, heap state, and exploit reliability, this can lead to kernel crash, denial of service, information disclosure, or potentially local privilege escalation through controlled reuse of freed kernel memory.
Why it matters to the business
The main operational risk is that an unprivileged or low-privileged local user or compromised workload may be able to crash affected Linux systems or, in a more advanced exploit, gain elevated privileges on the host. This is most relevant for multi-user Linux servers, shared hosting, developer workstations, container hosts, VPN/L2TP deployments, and systems where untrusted users or workloads can execute local code. The current public exploitation signal appears low: EPSS is very low, it is not listed in CISA KEV, and no mature public exploit is indicated. However, kernel memory-corruption vulnerabilities can become more serious once exploit techniques are developed, so remediation should be included in normal kernel patch cycles and prioritized where local code execution by untrusted users is possible.
How an attack unfolds
An attacker first needs local code execution on an affected Linux system and access to create or interact with PPPoL2TP/L2TP sockets. They create a race condition against pppol2tp_ioctl(): one thread issues an ioctl that causes the kernel to enter copy_from_user(), while attacker-controlled memory handling, such as userfaultfd, intentionally stalls the copy. During that controlled sleep window, another thread closes the related socket, causing the L2TP session cleanup path to run and free the session object. The blocked ioctl then resumes and uses the previously read session pointer, which now refers to freed memory. A basic exploit may cause a kernel oops or system crash. A more advanced exploit would attempt to reclaim the freed memory with attacker-influenced kernel objects before the stale pointer is dereferenced, potentially converting the use-after-free into privilege escalation.
How to fix it
Apply a Linux kernel update that includes the fix for the PPPoL2TP ioctl session reference handling issue. The corrected implementation obtains the L2TP session through the RCU-safe, refcounted pppol2tp_sock_to_session(sk) helper and releases it with l2tp_session_put() on all return paths. Because no specific distribution package or kernel fixed versions were provided, use vendor advisories for the relevant Linux distribution or kernel branch to identify the exact patched package. If immediate patching is not possible, reduce exposure by restricting local shell access, limiting untrusted workloads, disabling or unloading unused L2TP/PPPoL2TP kernel modules where operationally feasible, and applying defense-in-depth controls that make kernel exploitation harder, such as kernel lockdown, hardened slab options, user namespace restrictions, and limiting access to userfaultfd where supported. Validate mitigations carefully before disabling L2TP components on systems that provide VPN or tunneling services.
How to confirm the fix worked
Confirm that the running kernel includes the upstream fix or the distribution backport for the pppol2tp_ioctl() session reference change. Validate both the installed kernel package and the currently booted kernel, because Linux hosts often retain older kernels until reboot. Check kernel version and vendor changelogs with commands such as uname -a and the platform package manager. Where source or symbol-level validation is possible, confirm that pppol2tp_ioctl() uses the refcounted pppol2tp_sock_to_session(sk) helper rather than directly dereferencing sk->sk_user_data. Also confirm whether L2TP/PPPoL2TP modules are loaded or available using lsmod and modinfo for modules such as l2tp_ppp, l2tp_netlink, l2tp_core, pppol2tp, and ppp_generic. After patching, reboot into the fixed kernel and verify that the vulnerable kernel is no longer running.
Typical attack path
- Obtain local execution on an affected Linux host as an unprivileged or low-privileged user.
- Create or access PPP over L2TP socket state that reaches the pppol2tp_ioctl() path.
- Prepare user-space memory so copy_from_user() can be deliberately stalled, for example using userfaultfd-induced page fault behavior.
- Trigger the vulnerable ioctl from one thread and pause it while the kernel has read the session pointer without holding a safe reference.
- From a second thread, close the socket or otherwise trigger L2TP session teardown so the l2tp_session object is freed asynchronously.
- Resume the stalled ioctl so it dereferences the stale session pointer.
- Use the resulting memory corruption to crash the kernel or attempt controlled heap reuse for local privilege escalation.
How to detect it
To determine whether exploitation may already have occurred, review host-based telemetry and kernel logs for signs of L2TP/PPPoL2TP-related kernel faults, use-after-free reports, unexpected reboots, kernel oops or panic events, and local processes using userfaultfd in conjunction with PPP/L2TP socket activity. Relevant sources include dmesg output, journald kernel logs, /var/log/kern.log, /var/log/messages, crash dump facilities such as kdump, auditd or eBPF process telemetry, EDR process lineage, and module load logs. Look for stack traces involving pppol2tp_ioctl, pppol2tp_session_close, l2tp_session_del_work, l2tp_session_delete, l2tp_core, l2tp_ppp, ppp_generic, copy_from_user, or userfaultfd. Also investigate unexplained kernel crashes on systems where L2TP modules are loaded, especially if preceded by local execution of unfamiliar binaries, fuzzers, proof-of-concept exploit names, or high-rate socket/ioctl activity. There are no known network-only indicators for this issue because exploitation requires local interaction with kernel socket/ioctl paths rather than a distinctive remote packet pattern.
- pppol2tp_ioctl
- pppol2tp_session_close
- l2tp_session_del_work
- l2tp_session_delete
- l2tp_ppp
- l2tp_core
- pppol2tp
- ppp_generic
- copy_from_user
- userfaultfd
- BUG: KASAN: use-after-free
- KASAN: use-after-free in pppol2tp_ioctl
- kernel BUG at net/l2tp
- Oops:
- general protection fault
- Kernel panic - not syncing
- /var/log/kern.log
- /var/log/messages
- /proc/modules
What your security team should do
- Inventory Linux systems that allow local user access, run untrusted workloads, host containers, or provide L2TP/PPPoL2TP functionality.
- Prioritize patching multi-user servers, container hosts, shared compute platforms, and systems exposed to potentially malicious local users.
- Verify that patched kernels are not only installed but also booted after maintenance reboots.
- If L2TP/PPPoL2TP is not required, consider disabling or preventing autoload of related kernel modules as a temporary mitigation.
- Review controls around unprivileged userfaultfd and user namespaces, because these primitives can improve exploit reliability for kernel race and memory-corruption bugs.
- Monitor kernel logs for crashes, use-after-free diagnostics, L2TP/PPP-related oops traces, and suspicious local exploit activity.
- Treat confirmed exploitation as a host compromise event because a successful exploit may grant kernel-level privileges.
- Track Linux distribution advisories for exact fixed package versions and backports, since kernel CVE fixes are often backported without changing to the latest upstream kernel release.
The record
In the Linux kernel, the following vulnerability has been resolved: l2tp: pppol2tp: hold reference to session in pppol2tp_ioctl() pppol2tp_ioctl() read sock->sk->sk_user_data directly without any locks or reference counting. If a controllable sleep was induced during copy_from_user() (e.g. via a userfaultfd page fault sleep), a concurrent socket close could trigger pppol2tp_session_close() asynchronously. This frees the l2tp_session structure via the l2tp_session_del_work workqueue. Upon resuming, the ioctl thread dereferences the stale session pointer, resulting in a Use-After-Free (UAF). Fix this by securely fetching the session reference using the RCU-safe, refcounted helper pppol2tp_sock_to_session(sk) on entry. This locks the session's refcount across the sleep. We structured the function to exit via standard err breaks, guaranteeing that l2tp_session_put() is cleanly called on all return paths to drop the reference. To preserve existing behavior we validate the session and its magic signature only for the specific L2TP commands that require it. This ensures that generic/unknown ioctls called on an unconnected socket still return -ENOIOCTLCMD and correctly fall back to generic handlers (e.g. in sock_do_ioctl()).
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|