CVE-2026-98230
High · 7.0CVSS
7.0
EPSS
0.1%
Published
Oct 6, 2026
CISA due date
—
Cloudanix analysis
A bug in the Linux kernel's handling of network security data structures could let a local attacker corrupt memory and potentially gain higher privileges or crash the system.
- Exploitation
- Local Privilege
- Attacker needs
- Low Privilege
- Complexity
- High
- Impact
- Full Compromise
- Component
- OS kernel
- Class
- Use After Free
- Remediation
- Patch
- Effort
- Medium
- Patch risk
- Low
What it actually does
Use-after-free write and subsequent read in Linux kernel xfrm state hash lists (state_cache and state_cache_input) caused by hlist_del_rcu leaving poisoned pointers that allow a second __xfrm_state_delete to perform an invalid write through LIST_POISON2, leading to memory corruption and dangling pointers during RCU traversals in xfrm_input_state_lookup.
Why it matters to the business
Linux systems handling IPsec or network security policies face elevated risk of kernel memory corruption, crashes, or local privilege escalation; low public exploitability and absence from known campaigns reduce immediate operational urgency but still require prompt patching on affected kernels.
How an attack unfolds
An attacker with local access crafts repeated xfrm state operations that trigger a second deletion on the same state_cache or state_cache_input entry, causing a write through a poisoned pointer; the resulting corruption can be leveraged during subsequent RCU list walks to achieve read or write primitives for privilege escalation.
How to fix it
Upgrade to a Linux kernel containing the fix that replaces hlist_del_rcu with hlist_del_init_rcu for state_cache and state_cache_input; rebuild and reboot with the patched kernel; apply vendor backports if available for supported distributions.
How to confirm the fix worked
Confirm the kernel source includes the commit switching state_cache and state_cache_input to hlist_del_init_rcu; verify hlist_unhashed returns true after deletion on those lists; test double-delete scenarios and xfrm_input_state_lookup paths under RCU to ensure no poisoned pointer writes occur.
Typical attack path
- Obtain local user access on a Linux system
- Trigger xfrm state creation and deletion sequences that hit the vulnerable cache lists
- Force a double-delete condition to perform the invalid write through LIST_POISON2
- Trigger RCU traversal paths such as xfrm_input_state_lookup to dereference corrupted pointers
- Escalate privileges or cause denial of service via memory corruption
How to detect it
Review kernel logs for xfrm-related warnings or crashes involving state_cache or state_cache_input; inspect for use-after-free reports in __hlist_del or xfrm_input_state_lookup; correlate with processes performing frequent xfrm state manipulations.
What your security team should do
- Prioritize kernel updates on any systems using IPsec or xfrm for network security
- Monitor upstream kernel changelogs for the exact patch and backport it to distribution kernels
- Limit local user access and xfrm configuration privileges until patched
- Include the updated kernel in standard patch management cycles within the next maintenance window
The record
In the Linux kernel, the following vulnerability has been resolved: xfrm: use hlist_del_init_rcu for state_cache and state_cache_input Commit 14acf9652e56 ("xfrm: defensively unhash xfrm_state lists in __xfrm_state_delete") converted bydst/bysrc/byseq/byspi from hlist_del_rcu() to hlist_del_init_rcu() so that a second __xfrm_state_delete() on the same object becomes a no-op rather than a write through LIST_POISON pprev. It missed state_cache and state_cache_input, which kept hlist_del_rcu(): - hlist_del_rcu() leaves pprev = LIST_POISON2 (non-NULL), so hlist_unhashed() returns false. - hlist_del_init_rcu() leaves pprev = NULL, so hlist_unhashed() returns true. A second __xfrm_state_delete() therefore enters __hlist_del() on the already-deleted state_cache/state_cache_input nodes and does WRITE_ONCE(*pprev, next) through LIST_POISON2 — a write use-after-free once the slab is reused. The corruption can in turn cause a subsequent hlist_for_each_entry_rcu traversal to follow a dangling next pointer, producing the read use-after-free reported in xfrm_input_state_lookup(). Switch state_cache and state_cache_input to hlist_del_init_rcu() to match the other four lists, closing the write use-after-free and, with it, the read use-after-free it spawns.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|