CVE-2026-46116
High · 7.8CVSS
7.8
EPSS
0.1%
Published
May 28, 2026
CISA due date
—
Cloudanix analysis
A flaw in the Linux networking code could let someone with local access crash a system or potentially gain control of it, so affected kernels should be updated.
- Exploitation
- Local Privilege
- Attacker needs
- Local User
- Complexity
- Moderate
- Impact
- Privilege Gain
- Component
- OS kernel
- Class
- Use After Free
- Remediation
- Patch
- Effort
- Medium
- Patch risk
- Low
What it actually does
This is a Linux kernel use-after-free flaw in the XFRM/IPsec state lifecycle. The vulnerable code deletes XFRM state hash-list entries based on mutable field values rather than actual list membership, and repeated or racing deletion paths can write through stale list pointers after an xfrm_state object has already been removed or freed. Triggering the bug can cause kernel memory corruption, including slab use-after-free and out-of-bounds write conditions in paths such as __xfrm_state_delete(), __xfrm_state_lookup(), xfrm_alloc_spi(), and __xfrm_state_insert(). Because the corruption occurs in kernel space, successful exploitation could allow a local attacker to crash the system or potentially escalate privileges and execute code with kernel-level privileges.
Why it matters to the business
Systems running affected Linux kernel versions may be vulnerable to local denial of service or local privilege escalation. The highest operational risk is on multi-user systems, container hosts, CI runners, shared development systems, appliances, VPN/IPsec gateways, and environments where untrusted users or workloads can access network namespace or XFRM-related functionality. Although EPSS is currently low and there is no known KEV listing or public exploit maturity reported, kernel memory-corruption vulnerabilities can become high-priority quickly once reliable exploit techniques are published.
How an attack unfolds
An attacker first obtains local code execution with low privileges on a vulnerable Linux system. They then repeatedly exercise XFRM/IPsec state creation, lookup, SPI allocation, deletion, namespace cleanup, or flush paths to create timing and lifecycle conditions where an xfrm_state object is deleted or unhashed inconsistently. On vulnerable kernels, the delete path may attempt to remove list entries that are no longer valid or were never on the expected list, resulting in writes through stale hlist pointers. A simple attack may use this to trigger a kernel crash and deny service. A more advanced attack would groom kernel heap allocations around the freed xfrm_state object, reclaim the memory with attacker-influenced objects, and use the stale write primitive to corrupt kernel data structures, potentially leading to privilege escalation. Exploitation is local and generally depends on the attacker's ability to reach XFRM-related kernel paths, often through CAP_NET_ADMIN in a network namespace or equivalent local capability exposure.
How to fix it
Upgrade to a Linux kernel release that includes the XFRM fix changing the affected hash-list deletion logic to use hlist_del_init_rcu() and hlist_unhashed() checks for XFRM state list handling. No exact fixed package versions were provided in the input, so use the corrected kernel packages from the operating system vendor or upstream stable kernel trees once available for the deployed distribution and kernel branch. Prioritize kernels in the 6.12.y stable line and any other branches carrying the vulnerable XFRM code path. If immediate patching is not possible, reduce exposure by limiting local shell access, restricting untrusted workloads, disabling unprivileged user namespaces where operationally feasible, preventing untrusted containers from obtaining CAP_NET_ADMIN or host networking, and limiting access to IPsec/XFRM administration interfaces. Reboot into the patched kernel after installation; merely installing kernel packages is not sufficient if the running kernel remains vulnerable.
How to confirm the fix worked
Confirm the running kernel version and vendor advisory status after remediation using commands such as uname -a and the distribution package manager's kernel changelog or security advisory metadata. Verify the active, booted kernel is the patched version, not only that a patched package is installed. Where source or vendor patch metadata is available, confirm the XFRM fix is present in net/xfrm/xfrm_state.c and that vulnerable hlist_del_rcu() usage in __xfrm_state_delete() has been replaced with defensive hlist_del_init_rcu() behavior and hlist_unhashed() checks for byseq/byspi. For exposure validation, identify systems with IPsec/XFRM usage, container runtimes, unprivileged user namespaces, or workloads granted CAP_NET_ADMIN. In non-production test environments, kernel fuzzing or regression tests that exercise XFRM state allocation, SPI allocation, flush, and network namespace teardown should no longer produce KASAN reports or kernel oopses in the xfrm_state lifecycle.
Typical attack path
- Gain local execution on a vulnerable Linux host as a low-privileged user or within a workload/container that can exercise network namespace or XFRM/IPsec functionality.
- Create or manipulate network namespaces and XFRM/IPsec state entries, including security associations, SPI allocation, state lookup, flush, and teardown operations.
- Trigger repeated or racing XFRM state deletion and namespace cleanup paths so that the same xfrm_state list nodes are deleted inconsistently.
- Cause kernel slab use-after-free or out-of-bounds writes in XFRM state hash-list handling.
- Use the memory corruption to crash the kernel, or attempt heap grooming and kernel object corruption to escalate privileges.
How to detect it
Look for evidence in kernel logs, crash dumps, audit logs, and endpoint telemetry. Primary sources include dmesg, journalctl -k, /var/log/kern.log, /var/log/messages, systemd-journald, kdump/vmcore artifacts, kernel oops reports, and KASAN reports if debug kernels are deployed. Search for crashes or warnings involving XFRM state handling, IPsec state operations, network namespace cleanup, and functions such as __xfrm_state_delete, xfrm_state_delete, xfrm_state_flush, xfrm_state_fini, __xfrm_state_lookup, xfrm_alloc_spi, __xfrm_state_insert, cleanup_net, and hlist_del_rcu. Also review audit logs or EDR telemetry for unusual local use of XFRM/IPsec tooling such as ip xfrm state/policy commands, frequent network namespace creation/deletion, privileged container launches, or workloads granted CAP_NET_ADMIN shortly before a crash. Because reliable exploitation may leave only a kernel crash or corrupted-memory artifact, absence of these indicators does not prove the vulnerability was not exercised. There are no known named threat actors or KEV exploitation reports in the provided data.
- BUG: KASAN: slab-use-after-free in __hlist_del
- BUG: KASAN: slab-use-after-free in hlist_del_rcu
- BUG: KASAN: slab-use-after-free in __xfrm_state_delete
- BUG: KASAN: slab-use-after-free in xfrm_alloc_spi
- BUG: KASAN: slab-use-after-free in __xfrm_state_lookup
- BUG: KASAN: slab-use-after-free in __xfrm_state_insert
- BUG: KASAN: slab-out-of-bounds in __xfrm_state_delete
- net/xfrm/xfrm_state.c
- __xfrm_state_delete
- xfrm_state_delete
- xfrm_state_flush
- xfrm_state_fini
- __xfrm_state_lookup
- xfrm_alloc_spi
- __xfrm_state_insert
- Workqueue: netns cleanup_net
- cleanup_net
- hlist_del_rcu
- LIST_POISON
- xfrm_state
What your security team should do
- Inventory Linux systems running affected kernel branches, especially 6.12.y kernels, container hosts, VPN/IPsec systems, shared servers, and systems allowing untrusted local workloads.
- Prioritize kernel updates on systems where local users, containers, CI jobs, or sandboxed workloads may obtain network namespace capabilities or CAP_NET_ADMIN.
- Track distribution-specific advisories for the exact fixed kernel package versions and ensure systems reboot into the patched kernel.
- Until patched, remove CAP_NET_ADMIN from untrusted containers and workloads, avoid privileged containers, restrict host networking, and disable unprivileged user namespaces where feasible.
- Monitor kernel logs for XFRM-related use-after-free, out-of-bounds write, KASAN, BUG, general protection fault, or panic messages that may indicate attempted triggering.
- Treat unexplained kernel crashes involving net/xfrm/xfrm_state.c, __xfrm_state_delete(), xfrm_alloc_spi(), or cleanup_net as potentially security-relevant and preserve logs, crash dumps, and workload context.
- Harden local privilege boundaries with SELinux/AppArmor/seccomp profiles and container runtime restrictions to reduce reachable kernel attack surface.
The record
In the Linux kernel, the following vulnerability has been resolved: xfrm: defensively unhash xfrm_state lists in __xfrm_state_delete KASAN reproduces a slab-use-after-free in __xfrm_state_delete()'s hlist_del_rcu calls under syzkaller load on linux-6.12.y stable (reproduced on 6.12.47, also reachable via the same code path on torvalds/master and on the ipsec tree). Nine unique signatures cluster in the xfrm_state lifecycle, the load-bearing one being: BUG: KASAN: slab-use-after-free in __hlist_del include/linux/list.h:990 [inline] BUG: KASAN: slab-use-after-free in hlist_del_rcu include/linux/rculist.h:516 [inline] BUG: KASAN: slab-use-after-free in __xfrm_state_delete net/xfrm/xfrm_state.c Write of size 8 at addr ffff8881198bcb70 by task kworker/u8:9/435 Workqueue: netns cleanup_net Call Trace: __hlist_del / hlist_del_rcu __xfrm_state_delete xfrm_state_delete xfrm_state_flush xfrm_state_fini ops_exit_list cleanup_net The other observed signatures hit the same slab object from __xfrm_state_lookup, xfrm_alloc_spi, __xfrm_state_insert and an OOB write variant of __xfrm_state_delete, all on the byseq/byspi hash chains. __xfrm_state_delete() guards its byseq and byspi unhashes with value-based predicates: if (x->km.seq) hlist_del_rcu(&x->byseq); if (x->id.spi) hlist_del_rcu(&x->byspi); while everywhere else in the file (e.g. state_cache, state_cache_input) the safer hlist_unhashed() check is used. xfrm_alloc_spi() sets x->id.spi = newspi inside xfrm_state_lock and then immediately inserts into byspi, but a path that observes x->id.spi != 0 outside of xfrm_state_lock can still skip-or-hit the byspi unhash inconsistently with whether x is actually on the list. The same holds for x->km.seq versus byseq, and the bydst/bysrc unhashes have no predicate at all, so a second __xfrm_state_delete() on the same object writes through LIST_POISON pprev. The defensive change here: - Use hlist_del_init_rcu() instead of hlist_del_rcu() on bydst, bysrc, byseq and byspi so a second deletion is a no-op rather than a write through LIST_POISON pprev. The byseq/byspi nodes are already initialised in xfrm_state_alloc(). - Test hlist_unhashed() rather than the value predicate for byseq/byspi, so the unhash decision tracks list state rather than mutable scalar fields. Empirical verification: applied this patch on top of v6.12.47, rebuilt, and re-ran the same syzkaller harness for 1h16m on a previously-crashy configuration that produced ~100 hits each of slab-use-after-free Read in xfrm_alloc_spi / Read in __xfrm_state_lookup / Write in __xfrm_state_delete. After the patch, 7.1M execs across 32 VMs at ~1550 exec/sec produced zero xfrm_state UAF/OOB hits. /proc/slabinfo confirms the xfrm_state slab is actively allocated and freed during the run (~143 KiB resident), so the fuzzer is still exercising those code paths -- they just no longer crash. Reproduction: - Linux 6.12.47 x86_64 + KASAN_GENERIC + KASAN_INLINE + KCOV - syzkaller @ 746545b8b1e4c3a128db8652b340d3df90ce61db - 32 QEMU/KVM VMs x 2 vCPU on AWS c5.metal bare metal - 9 unique signatures collected in ~9h, all within xfrm_state lifecycle
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| openSUSE:Tumbleweed | kernel-source | 0 | 7.0.11-1.1 |
Related vulnerabilities
- CVE-2026-53354 In the Linux kernel, the following vulnerability has been resolved: arm64: errata… Also affects kernel-source
- CVE-2026-53325 In the Linux kernel, the following vulnerability has been resolved: agp/amd64: Fix broken… Also affects kernel-source
- CVE-2026-52946 In the Linux kernel, the following vulnerability has been resolved: fs/fcntl: fix… Also affects kernel-source
- CVE-2026-52907 In the Linux kernel, the following vulnerability has been resolved: media: rockchip… Also affects kernel-source
- CVE-2026-52906 In the Linux kernel, the following vulnerability has been resolved: 9p: fix access mode… Also affects kernel-source
- CVE-2026-52905 In the Linux kernel, the following vulnerability has been resolved: mm/damon/core… Also affects kernel-source
- CVE-2026-52904 In the Linux kernel, the following vulnerability has been resolved: drm/nouveau: fix… Also affects kernel-source
- CVE-2026-46332 In the Linux kernel, the following vulnerability has been resolved: greybus… Also affects kernel-source