Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessGain local unprivileged shell
-
DeliveryCreate UDP socket
-
ExploitRace SIOCGSTAMPNS_NEW ioctl against bind()
-
ExecutionClear SOCK_RCU_FREE via lost sk_flags update
-
PersistTrigger premature free during RCU lookup
-
ImpactCorrupt freed socket memory for escalation
Vulnerability Assessment
| Exploitation Conditions | Requires a local, authenticated unprivileged user (CVSS PR:L) able to execute code and make syscalls on the target. The specific trigger is a SIOCGSTAMPNS_NEW (socket timestamp) ioctl on a UDP socket issued concurrently with a bind() on the same socket, so that both threads perform a racing non-atomic read-modify-write on sk->sk_flags and the SOCK_RCU_FREE bit is dropped. LIMITING FACTORS: exploitation is local-only (AV:L, no remote vector), needs the attacker to win a narrow timing window between the two sk_flags updates (making reliable exploitation difficult and non-deterministic), and affects unpatched kernels in the listed version ranges; no special non-default configuration is required since the timestamp ioctl path is standard kernel functionality. |
| Impact | This is a local-privilege memory-corruption flaw (UAF) in the Linux kernel networking stack, confirmed by the vendor-provided CVSS vector CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H and the KASAN slab-use-after-free trace in the description. Risk signals are mixed: the CVSS base score of 7.8 (HIGH) reflects full C/I/A impact from a kernel UAF, but the exploitation probability is low - EPSS is 0.18% (7th percentile) - and the CVE is NOT on the CISA KEV list, so there is no evidence of active exploitation. No public exploit code is flagged in the input (POC not provided), though the description references a reproducer ('Comm: exploit') written by the reporters, indicating a working private trigger exists. The real-world difficulty is higher than AC:L suggests: successful exploitation requires winning a tight read-modify-write race between a SIOCGSTAMPNS_NEW ioctl and bind() on a UDP socket, which is inherently non-deterministic. CONFLICT TO VERIFY: the vendor marks AC:L, but the bug is fundamentally a race condition whose win requires precise timing, which argues for higher attack complexity. Net assessment: a genuine kernel UAF worth patching on multi-tenant and untrusted-local-user systems, but not an emergency for most single-user or well-isolated deployments given low EPSS, no KEV, and the local-only attack vector. |
| Exploit ScenarioDerived | A local unprivileged user (UID 1000 in the reported trace) runs a program that repeatedly issues a SIOCGSTAMPNS_NEW ioctl on a UDP socket while concurrently calling bind(), racing the two non-atomic read-modify-write updates to sk->sk_flags so that the SOCK_RCU_FREE bit set by udp_lib_get_port() is lost. The socket is then freed immediately instead of after an RCU grace period while still reachable by lockless UDP receive lookups, yielding a slab-use-after-free that can crash the kernel or be groomed toward privilege escalation. The reporters demonstrated a working trigger, but no public exploit code is provided in the input. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 07, 2026
A race condition in the Linux kernel networking stack (sock_gettstamp()) allows a local, authenticated unprivileged user to trigger a slab-use-after-free in the UDP receive path by issuing a SIOCGSTAMPNS_NEW socket-timestamp ioctl on a UDP socket concurrently with a bind() on that same socket. Because sock_enable_timestamp() modifies sk->sk_flags with non-atomic bit operations while the SIOCGSTAMPNS_NEW path does not hold the socket lock, the concurrent read-modify-write can silently drop the SOCK_RCU_FREE bit that udp_lib_get_port() had just set, causing sk_destruct() to free the socket immediately instead of after an RCU grace period while lockless receive lookups still hold a pointer to it. Exploitation is local-only and requires winning a narrow timing window (our assessment rates it AV:L/AC:H/PR:L, versus the vendor-published CVSS 3.1 score of 7.8 with AC:L), EPSS is low at 0.18% (7th percentile), there is no KEV listing and no public exploit identified at time of analysis, and vendor-released patches exist for the affected stable branches.
RemediationAI
Vendor-released patch: upgrade to the first fixed stable release for your branch - 5.10.271, 5.15.222, 6.1.189, 6.6.158, 6.12.112, 6.18.54, or 7.2.8 (7.3-rc4 on the mainline RC line); the corresponding upstream commits are listed under the git.kernel.org/stable references (for example https://git.kernel.org/stable/c/18899e2e4023369a8f7739c2255a59a9748d8d17) and the advisory is at https://nvd.nist.gov/vuln/detail/CVE-2026-98276. If immediate rebasing is not possible, compensating controls must target the trigger: use a seccomp filter or LSM policy to deny SIOCGSTAMPNS/SIOCGSTAMPNS_NEW (and the older SIOCGSTAMP/SIOCGSTAMPNS) ioctls for untrusted or containerized workloads - the trade-off is that legitimate applications relying on socket packet-timestamping (latency/monitoring tools, some network daemons) will fail with EPERM, so scope the rule to low-privilege users rather than the whole host. Where available, apply the distributor's live-patch/kpatch stream for this commit, and keep local-user attack surface minimized by disabling unprivileged user namespaces and restricting who can open UDP sockets and run arbitrary code, since exploitation requires only PR:L local access plus a timing race and no special kernel configuration. Note that this fix only covers the sock_gettstamp() path; the identical unlocked sk_flags pattern in sk_set_memalloc()/sk_clear_memalloc() used by nbd, iscsi_tcp, nvme-tcp, sunrpc and wireguard is explicitly deferred to a separate patch, so operators of those subsystems should track follow-up kernel updates rather than assume CVE-2026-98276's fix closes every variant of the race.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The flaw sits in the core socket layer. sk->sk_flags is documented to be modified only while holding the socket lock, because sock_set_flag()/sock_reset_flag() are implemented with the non-atomic __set_bit()/__clear_bit() helpers. sock_gettstamp(), reached from the SIOCGSTAMPNS_NEW ioctl via the socket timestamping path, was one of the last syscall-reachable places that changed an sk_flags bit (SOCK_TIMESTAMP through sock_enable_timestamp()) without owning that lock. The description shows the classic lost-update interleaving: CPU 0 in bind() reads sk_flags = F, computes F | SOCK_RCU_FREE and stores it, then calls sk_add_node_rcu(); CPU 1 concurrently reads the same F, computes F | SOCK_TIMESTAMP and stores it, overwriting the SOCK_RCU_FREE bit. With SOCK_RCU_FREE cleared, sk_destruct() releases the socket immediately rather than after an RCU grace period, while the lockless UDP receive path (udp_queue_rcv_one_skb -> ipv4_pktinfo_prepare) still dereferences the socket, producing the reported KASAN slab-use-after-free (8-byte read in ipv4_pktinfo_prepare). This is a concurrency defect (race condition on a shared bit word leading to a use-after-free), affecting UDP sockets, and it is reachable with standard, non-privileged kernel functionality with no special configuration. The upstream fix takes the socket lock only when SOCK_TIMESTAMP actually has to be set, preserving the lockless fast path; the description explicitly notes that sk_set_memalloc()/sk_clear_memalloc() have the same unlocked sk_flags pattern, but their callers (nbd, iscsi_tcp, nvme-tcp, sunrpc, wireguard) require a separate audit and patch, so related races in those subsystems are not addressed by this CVE's fix. Affected CPE data identifies the generic Linux kernel (cpe:2.3:a:linux:linux) spanning from the initial git import commit 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 (and older 2.6.12-era kernels) through the patched stable releases.
Know when the next one hits your stack
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Local unprivileged user can trigger it (AV:L/PR:L), but success depends on winning a tight sk_flags race, so AC:H; a kernel UAF yields full C/I/A impact.
Primary rating from Vendor (Linux).
CVSS VectorVendor: Linux
Lifecycle Timeline
4DescriptionCVE.org
In the Linux kernel, the following vulnerability has been resolved:
net: lock the socket in sock_gettstamp()
sk->sk_flags must only be changed while holding the socket lock, because sock_set_flag() and sock_reset_flag() use non atomic operations (__set_bit() and __clear_bit()).
sock_gettstamp() is one of the last places where a bit of sk->sk_flags is changed from a syscall without owning the socket lock, through sock_enable_timestamp(sk, SOCK_TIMESTAMP).
sk_set_memalloc() and sk_clear_memalloc() also change sk->sk_flags without the socket lock, but their callers (nbd, iscsi_tcp, nvme-tcp, sunrpc, wireguard) need a careful audit, this will be addressed in a separate patch.
Jungwoo Lee and Wongi Lee reported an UDP socket use-after-free caused by this bug: a SIOCGSTAMPNS_NEW ioctl racing with bind() can cancel the SOCK_RCU_FREE bit that udp_lib_get_port() just set, because both threads perform a read-modify-write on the same word.
CPU 0 (bind) CPU 1 (SIOCGSTAMPNS_NEW) -------------------------------- ---------------------------- read sk_flags = F read sk_flags = F compute F | BIT(SOCK_RCU_FREE) compute F | BIT(SOCK_TIMESTAMP) store F | BIT(SOCK_RCU_FREE) sk_add_node_rcu(sk, ...) store F | BIT(SOCK_TIMESTAMP)
After the lost update, SOCK_RCU_FREE is clear while the socket is visible to lockless UDP receive lookups. sk_destruct() then frees the socket immediately instead of waiting for a RCU grace period, while the receive path still holds a reference-less pointer to it:
BUG: KASAN: slab-use-after-free in ipv4_pktinfo_prepare+0x30/0x410 Read of size 8 at addr ffff888008806610 by task exploit/207 CPU: 0 UID: 1000 PID: 207 Comm: exploit Not tainted 6.12.95+ #1 ipv4_pktinfo_prepare+0x30/0x410 udp_queue_rcv_one_skb+0x51c/0x1180 udp_unicast_rcv_skb+0x109/0x350 ip_protocol_deliver_rcu+0x14b/0x310 ip_local_deliver_finish+0x29d/0x390 ip_local_deliver+0x24d/0x2a0
Only grab the socket lock when SOCK_TIMESTAMP has to be set, to keep the common case lockless.
Executive ViewAI
A use-after-free flaw in the Linux kernel's UDP networking path lets an authenticated local user escalate to kernel-level privileges on affected systems, potentially yielding full control of the host. This matters most for multi-tenant platforms, container hosts, and any server where an attacker could first obtain a low-privileged local foothold, because that foothold can be converted into root-level compromise. Leadership should prioritize remediation of unpatched Linux fleets given the kernel-level impact and the widespread presence of Linux across infrastructure.
Apply vendor patch.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
EUVD-2026-93204
GHSA-qgp7-2j87-wmwc
NVD
CVE.org
EPSS
Exploit-DB