Skip to main content
CVE Vulnerability Database
Vulnerability Database/CVE-2026-68398

CVE-2026-68398: Linux Kernel PPP Use-After-Free Bug

CVE-2026-68398 is a use-after-free flaw in the Linux kernel's PPP subsystem affecting pppol2tp channel handling. Unprivileged users can trigger this race condition. This article covers technical details, impact, and fixes.

Published:

CVE-2026-68398 Overview

CVE-2026-68398 is a use-after-free vulnerability in the Linux kernel's Point-to-Point Protocol over Layer 2 Tunneling Protocol (PPPoL2TP) implementation. The flaw resides in pppol2tp_recv() on the L2TP UDP-encap softirq receive path. An unprivileged local user can trigger the condition by closing a bound but unattached PPP channel while receive traffic is in flight. The internal struct channel is freed with a plain kfree() without any Read-Copy-Update (RCU) grace period, allowing an in-flight ppp_input() on one CPU to dereference memory freed by close() on another CPU.

Critical Impact

Local unprivileged attackers can trigger a kernel use-after-free, enabling potential privilege escalation, information disclosure, or denial of service.

Affected Products

  • Linux kernel PPP subsystem (drivers/net/ppp)
  • Linux kernel L2TP module (net/l2tp/l2tp_ppp.c)
  • Distributions shipping stable kernels prior to the referenced fix commits

Discovery Timeline

  • 2026-08-10 - CVE-2026-68398 published to NVD
  • 2026-08-13 - Last updated in NVD database

Technical Details for CVE-2026-68398

Vulnerability Analysis

The vulnerability occurs in the L2TP receive path: l2tp_udp_encap_recv() calls l2tp_recv_common(), which calls pppol2tp_recv(), which then invokes ppp_input(&po->chan). This chain runs under rcu_read_lock() while holding only an l2tp_session reference. It takes no reference on the internal PPP channel that ppp_input() dereferences.

The pppox socket uses SOCK_RCU_FREE, so the socket and the embedded ppp_channel are RCU-safe. However, the internal struct channel is a separate allocation freed by ppp_release_channel() using a plain kfree(), which provides no grace period for concurrent readers.

Root Cause

The root cause is a missing RCU grace period on channel teardown. When a channel is bound via PPPIOCGCHAN but never attached to a PPP unit through PPPIOCCONNECT (pch->ppp == NULL) and is not bridged, teardown skips both ppp_disconnect_channel()'s synchronize_net() and ppp_unbridge_channels()'s synchronize_rcu(). The kfree() therefore executes without waiting for concurrent RCU readers.

Attack Vector

An unprivileged local user opens a PPPoL2TP data socket, binds a PPP channel with PPPIOCGCHAN, and does not attach it to a unit. The attacker then closes the socket via pppol2tp_release(), which triggers pppox_unbind_sock()ppp_unregister_channel()ppp_release_channel()kfree(pch). Concurrently, inbound L2TP UDP traffic drives pppol2tp_recv() on another CPU, which dereferences the freed channel structure. Racing these two paths yields a use-after-free that can be leveraged for memory corruption or information disclosure. See the kernel commit 06213c85 for the upstream fix.

Detection Methods for CVE-2026-68398

Indicators of Compromise

  • Unexpected kernel oops or panic messages referencing ppp_input, pppol2tp_recv, or ppp_release_channel in dmesg or /var/log/kern.log
  • KASAN reports flagging use-after-free in the PPP or L2TP subsystems
  • Unprivileged processes repeatedly opening and closing PPPoL2TP sockets in short intervals
  • Loading of pppol2tp or l2tp_ppp kernel modules on systems where L2TP is not operationally required

Detection Strategies

  • Enable Kernel Address Sanitizer (KASAN) on test kernels to catch UAF conditions before production exposure
  • Audit process telemetry for non-root users invoking socket(AF_PPPOX, SOCK_DGRAM, PX_PROTO_OL2TP) followed by rapid close sequences
  • Correlate kernel crash telemetry with recent PPPoL2TP socket activity from unprivileged UIDs

Monitoring Recommendations

  • Forward kern.log and dmesg to a centralized log platform and alert on stack traces containing ppp_input or pppol2tp_recv
  • Track kernel module load events for pppol2tp, l2tp_ppp, and l2tp_core using auditd or eBPF-based sensors
  • Monitor for anomalous rates of AF_PPPOX socket creation by non-privileged users

How to Mitigate CVE-2026-68398

Immediate Actions Required

  • Apply the vendor kernel update containing the fix commits referenced in the NVD advisory as soon as your distribution publishes them
  • If patching is delayed, blacklist the pppol2tp and l2tp_ppp modules on hosts that do not require L2TP tunneling
  • Restrict local shell access on multi-tenant systems until the patched kernel is deployed and validated

Patch Information

Upstream stable trees address the issue by deferring the channel free to an RCU callback via call_rcu(), ensuring the grace period fences any in-flight ppp_input(). Fix commits are available at 06213c85, 3ab32218, 4bb84e96, c9574b8a, and ec421568. Rebuild and reboot into the patched kernel.

Workarounds

  • Blacklist unused PPP and L2TP modules via /etc/modprobe.d/ to remove the attack surface on servers that do not tunnel PPP traffic
  • Apply seccomp or AppArmor profiles to workloads that restrict the socket() syscall for AF_PPPOX from unprivileged contexts
  • Enforce user namespace restrictions to limit which local users can create PPPoX sockets
bash
# Disable pppol2tp on hosts that do not require it
echo 'blacklist pppol2tp' | sudo tee /etc/modprobe.d/blacklist-pppol2tp.conf
echo 'blacklist l2tp_ppp' | sudo tee -a /etc/modprobe.d/blacklist-pppol2tp.conf
echo 'install pppol2tp /bin/true' | sudo tee -a /etc/modprobe.d/blacklist-pppol2tp.conf
sudo update-initramfs -u
sudo reboot

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.