Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObtain local BPF privileges (CAP_BPF)
-
DeliveryPrime link while forcing anon_inode_getfile failure
-
ExploitRead link iterator to take dangling reference
-
ExecutionTrigger UAF write in bpf_link_put
-
ImpactCorrupt kernel slab for privilege escalation
Vulnerability Assessment
| Exploitation Conditions | Requires local access with privileges to use the BPF subsystem (typically CAP_BPF or CAP_SYS_ADMIN): the attacker must create/prime a BPF link via bpf_link_prime() AND concurrently read a BPF link iterator (bpf_iter over links) so the iterator takes a reference to a link whose ID is still zero (unsettled). The trigger further depends on anon_inode_getfile() failing during link priming so the creator removes the ID and frees the still-private link, leaving the iterator's reference dangling for the next bpf_link_put(). Limiting factors: it is local-only (not remotely reachable), needs BPF privileges rather than an unprivileged user on default hardened configs, and depends on winning a narrow race window combined with the file-allocation failure path - all of which reduce real-world exploitability below the raw CVSS score. |
| Impact | This is a genuine but access-gated local privilege-escalation risk rather than a mass-exploitation emergency. The input CVSS vector (AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H, 7.8) correctly marks it local and privilege-requiring; a slab use-after-free write (KASAN reports 'Write of size 8' in bpf_link_put) in kernel memory is the classic primitive for local privilege escalation, which is why confidentiality, integrity and availability are all High. The real-world exploitation signals are modest and mutually consistent: EPSS is 0.16% (5th percentile) and there is no CISA KEV listing, so this is best classified as 'no public exploit identified at time of analysis' - none of the references (git.kernel.org commits, vuldb, NVD) is flagged as working exploit code. One point of tension to verify: the vuln.today decision label is 'this_week' and the CVSS marks AC:L, yet the description's mechanism is a race between bpf_link_prime() publishing an ID-zero link and anon_inode_getfile() failing - a narrow, timing- and failure-injection-dependent window that in practice raises attack complexity above a straightforward trigger. Net: prioritize patching within the normal fast-track cycle for multi-tenant, container, or untrusted-local-user hosts where BPF privileges are exposed, but this is not a remote or unauthenticated internet-facing threat. |
| Exploit ScenarioDerived | A local actor with BPF privileges (e.g. an attacker who has gained a foothold in a container or on a shared host with CAP_BPF/CAP_SYS_ADMIN) primes a BPF link and arranges for anon_inode_getfile() to fail so the creator frees the still-private link, while concurrently reading a BPF link iterator that has already taken a reference to that ID-zero link. The iterator's next bpf_link_put() then writes into freed slab memory, giving a use-after-free that can be shaped into kernel memory corruption and privilege escalation. No public exploit code is identified at time of analysis, and the attack depends on winning the race window plus forcing the file-allocation failure. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 24, 2026
A use-after-free in the Linux kernel BPF link iterator lets a local user who can already use the BPF subsystem (CAP_BPF or CAP_SYS_ADMIN) corrupt freed slab memory and potentially escalate privileges or crash the system. The flaw is a race: bpf_link_prime() inserts a link into link_idr before anon_inode_getfile() succeeds and before bpf_link_settle() publishes the link ID, and while bpf_link_by_id() rejects such ID-zero links as unsettled, the link iterator takes a reference to them anyway - if anon_inode_getfile() then fails, the creator frees the still-private link and the iterator is left holding a dangling reference that the next bpf_link_put() writes through. Exploitation is local-only and depends on winning a narrow race window combined with the file-allocation failure path, which is why the assessed severity uses AC:H rather than the raw 7.8; EPSS is 0.16% (5th percentile), there is no CISA KEV entry and no public exploit identified at time of analysis, and vendor patches are available for the affected stable branches.
RemediationAI
Update to a vendor-released kernel containing the fix: Linux 6.1.189, 6.6.158, 6.12.112, 6.18.55 or 7.2.9, or 7.3-rc5 on the mainline rc line; the individual stable commits (for example https://git.kernel.org/stable/c/87ce4b53b7436b50fc984f0a6afaf77f68ac5573 and the sibling reference links) can be backported to custom or long-term trees that do not track these branches. Because the bug is a lifetime race reachable only by principals allowed to create BPF links and read BPF link iterators, the practical exposure reduction on systems that cannot be patched immediately is to keep BPF out of unprivileged hands (kernel.unprivileged_bpf_disabled=2) and to restrict CAP_BPF/CAP_SYS_ADMIN to trusted workloads - noting this does not eliminate the flaw for privileged containers or services, which still satisfy the assessed PR:L prerequisite. Where BPF is not needed at all, disabling the BPF syscall for untrusted tenants removes the attack surface entirely at the cost of breaking tooling that depends on it (bpftrace, some observability agents, container runtimes using BPF-based networking/security). Apply the stable update as the complete fix; the change is confined to skipping unsettled ID-zero entries in bpf_link_get_curr_or_next(), so no ABI break is expected. Vendor and third-party advisory references: https://vuldb.com/vuln/415751 and https://nvd.nist.gov/vuln/detail/CVE-2026-98378.
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 BPF link subsystem exposes links to userspace as file descriptors backed by an IDR (link_idr) keyed by a numeric link ID. The creation path is not atomic: bpf_link_prime() allocates the ID and inserts the link into link_idr first, anon_inode_getfile() then creates the backing file, and only bpf_link_settle() publishes the real ID into link->id, with ID zero marking an entry that is still in flight. bpf_link_by_id() was written with that convention and treats an ID-zero entry as unsettled and unusable, but the iterator path (bpf_link_get_curr_or_next() feeding bpf_link_seq_next() in kernel/bpf/link_iter.c) resolved entries and called bpf_link_inc() without the same ID-zero check. The bug therefore requires two concurrent actors: one thread priming and settling a link, another walking a BPF iterator over links; if anon_inode_getfile() fails in the priming thread, that thread removes the ID and frees its still-private link directly, while the iterator still holds an incremented reference. The resulting use-after-free is a slab-use-after-free write of size 8 reached from bpf_link_put() via bpf_link_seq_next(), bpf_seq_read(), vfs_read() and ksys_read(), as captured in the KASAN report. The fix makes bpf_link_get_curr_or_next() skip ID-zero entries exactly as bpf_link_by_id() does, so transient links are never handed out with a reference. The underlying weakness is a classic reference-counting/lifetime race (use-after-free) in kernel code that is only reachable by principals permitted to create BPF links and read BPF link iterators - no CWE identifier was supplied in the source data, so the classification is taken from the KASAN slab-use-after-free signature rather than an assigned CWE. The trigger requires BPF privileges, local access, and the failure path of an internal file allocation; the sources do not describe any additional way to reach the freed object.
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 BPF-privileged actor (AV:L, PR:L); AC:H because the UAF depends on winning a race and on anon_inode_getfile() failing; 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:
bpf: Skip unsettled links in link iterator
bpf_link_prime() inserts a link into link_idr before anon_inode_getfile() succeeds and before bpf_link_settle() publishes the ID in link->id. bpf_link_by_id() treats such an ID-zero link as unsettled, but the link iterator takes a reference without this check.
If anon_inode_getfile() then fails, the creator removes the ID and frees its still-private link directly. The iterator is left with a dangling reference and its next bpf_link_put() accesses freed memory.
Treat ID-zero entries as transient in bpf_link_get_curr_or_next(), just as bpf_link_by_id() does.
BUG: KASAN: slab-use-after-free in bpf_link_put Write of size 8 by task exp/384 Call Trace: bpf_link_put kernel/bpf/syscall.c:3372 bpf_link_seq_next kernel/bpf/link_iter.c:33 bpf_seq_read kernel/bpf/bpf_iter.c:158 vfs_read fs/read_write.c:572 ksys_read fs/read_write.c:716 do_syscall_64 arch/x86/entry/syscall_64.c:84 entry_SYSCALL_64_after_hwframe arch/x86/entry/entry_64.S:121 Kernel panic - not syncing: KASAN: panic_on_warn set ...
Executive ViewAI
A high-severity Linux kernel vulnerability (CVE-2026-98378) allows local attackers with BPF privileges to potentially escalate to root or crash systems, affecting any Linux environment where BPF is enabled and accessible to users. Leadership should prioritize patching because while exploitation requires specific conditions, a successful attack could lead to full system compromise and operational disruption.
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-95533
GHSA-9m4g-3f3p-3783
NVD
CVE.org
EPSS
VulDB
Exploit-DB