HIGH
netfilter CtNetlink UAF
CVE-2026-23458
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
KernelScan AI7.7HIGH
01Description
In the Linux kernel, the following vulnerability has been resolved: netfilter: ctnetlink: fix use-after-free in ctnetlink_dump_exp_ct() ctnetlink_dump_exp_ct() stores a conntrack pointer in cb->data for the netlink dump callback ctnetlink_exp_ct_dump_table(), but drops the conntrack reference immediately after netlink_dump_start(). When the dump spans multiple rounds, the second recvmsg() triggers the dump callback which dereferences the now-freed conntrack via nfct_help(ct), leading to a use-after-free on ct->ext. The bug is that the netlink_dump_control has no .start or .done callbacks to manage the conntrack reference across dump rounds. Other dump functions in the same file (e.g. ctnetlink_get_conntrack) properly use .start/.done callbacks for this purpose. Fix this by adding .start and .done callbacks that hold and release the conntrack reference for the duration of the dump, and move the nfct_help() call after the cb->args[0] early-return check in the dump callback to avoid dereferencing ct->ext unnecessarily. BUG: KASAN: slab-use-after-free in ctnetlink_exp_ct_dump_table+0x4f/0x2e0 Read of size 8 at addr ffff88810597ebf0 by task ctnetlink_poc/133 CPU: 1 UID: 0 PID: 133 Comm: ctnetlink_poc Not tainted 7.0.0-rc2+ #3 PREEMPTLAZY Call Trace: <TASK> ctnetlink_exp_ct_dump_table+0x4f/0x2e0 netlink_dump+0x333/0x880 netlink_recvmsg+0x3e2/0x4b0 ? aa_sk_perm+0x184/0x450 sock_recvmsg+0xde/0xf0 Allocated by task 133: kmem_cache_alloc_noprof+0x134/0x440 __nf_conntrack_alloc+0xa8/0x2b0 ctnetlink_create_conntrack+0xa1/0x900 ctnetlink_new_conntrack+0x3cf/0x7d0 nfnetlink_rcv_msg+0x48e/0x510 netlink_rcv_skb+0xc9/0x1f0 nfnetlink_rcv+0xdb/0x220 netlink_unicast+0x3ec/0x590 netlink_sendmsg+0x397/0x690 __sys_sendmsg+0xf4/0x180 Freed by task 0: slab_free_after_rcu_debug+0xad/0x1e0 rcu_core+0x5c3/0x9c0
02KernelScan AI Analysis
Risk summary
Systems with netfilter connection tracking enabled are vulnerable to a use-after-free bug in the ctnetlink expectation dump functionality. A local attacker with CAP_NET_ADMIN privileges (obtainable via unprivileged user namespaces on default kernels) can trigger kernel memory corruption, leading to information disclosure, privilege escalation, or denial of service. This affects systems where untrusted users or containers can execute code and access netlink sockets.
Vulnerability analysis
The vulnerability occurs in ctnetlink_dump_exp_ct() where a conntrack pointer is stored in cb->data but the reference is dropped immediately after netlink_dump_start(). When netlink dumps span multiple rounds, subsequent recvmsg() calls trigger the dump callback ctnetlink_exp_ct_dump_table() which dereferences the freed conntrack object via nfct_help(ct), accessing ct->ext after RCU has freed the object. The fix adds proper .start/.done callbacks to manage the conntrack reference across dump rounds and moves the nfct_help() call after early-return checks. The attack surface is local-only via the nfnetlink socket, requiring CAP_NET_ADMIN, which is reachable from unprivileged user namespaces.
03Fix Versions
| Branch | Fixed in | Patch commit |
|---|---|---|
| 5.10 | 5.10.253 | d8cd0efbccc5 |
| 5.15 | 5.15.203 | 9821b47f669e |
| 6.1 | 6.1.167 | bdf2724eefd4 |
| 6.12 | 6.12.78 | f025171feef2 |
| 6.18 | 6.18.20 | 04c8907ce4e3 |
| 6.19 | 6.19.10 | cd541f15b60e |
| 6.6 | 6.6.130 | f04cc86d5990 |
| mainline | 7.0 | 5cb81eeda909 |