CVE-2026-98379 Linux 内核 ip6t_rpfilter 空指针解引用漏洞
影响本地非特权用户可触发内核空指针解引用,导致系统崩溃
Linux 内核 netfilter 的 ip6t_rpfilter 模块在处理 IPv6 反向路径过滤时,未校验 ip6_route_lookup() 返回路由的 rt6i_idev 是否为 NULL。当外部下一跳设备的 MTU 被降至 IPV6_MIN_MTU 以下时,其 inet6_dev 被拆除,但使用 nexthop 对象的路由仍留在 FIB 中,从而形成 rt6i_idev 为 NULL 的路由。攻击者随后通过 IPv6 rpfilter 查找即可触发空指针解引用。
影响范围
受影响范围为包含 ip6t_rpfilter 模块的 Linux 内核版本,具体受影响版本区间暂无公开信息。
漏洞详情
漏洞类型为空指针解引用(NULL pointer dereference)。成因是 ip6t_rpfilter.c 中 rpfilter_mt 函数在调用 ip6_route_lookup() 后直接使用返回路由的 rt6i_idev 字段,未判断其是否为 NULL。利用方式为:非特权用户在私有 user 和 network namespace 中通过 rtnetlink 将外部下一跳设备 MTU 降至 IPV6_MIN_MTU 以下,使 inet6_dev 被拆除而路由残留,再触发 IPv6 rpfilter 查找,导致内核在 rpfilter_mt 处发生空指针解引用并崩溃。
利用条件与风险
利用前提是攻击者具备本地非特权用户权限并可在私有命名空间中操作 rtnetlink,实战中可造成内核崩溃(拒绝服务),暂未见远程利用或权限提升的公开信息。
修复建议
官方修复方案为在 ip6t_rpfilter 中拒绝 rt6i_idev 为 NULL 的路由(reject routes without inet6_dev)。临时缓解措施暂无公开信息,建议及时更新内核补丁。
In the Linux kernel, the following vulnerability has been resolved:
netfilter: ip6t_rpfilter: reject routes without inet6_dev
ip6_route_lookup() can return an error-free route whose rt6i_idev is
NULL. Lowering an external nexthop device’s MTU below IPV6_MIN_MTU tears
down its inet6_dev while fib6_ifdown() leaves routes using nexthop objects
in the FIB. An unprivileged user can construct this state with rtnetlink
in a private user and network namespace, then trigger a NULL dereference
through an IPv6 rpfilter lookup:
Oops: general protection fault, probably for non-canonical address
0xdffffc0000000000
KASAN: null-ptr-deref in range [0x0000000000000000-0x0000000000000007]
RIP: rpfilter_mt (net/ipv6/netfilter/ip6t_rpfilter.c:75)
Call Trace:
ip6t_do_table (net/ipv6/netfilter/ip6_tables.c:316)
nf_hook_slow (net/netfilter/core.c:619)
ipv6_rcv (net/ipv6/ip6_input.c:351)
__netif_receive_skb_one_core (net/core/dev.c:6216)
process_backlog (net/core/dev.c:6680)
__napi_poll (net/core/dev.c:7739)
net_rx_action (net/core/dev.c:7959)
handle_softirqs (kernel/softirq.c:622)
do_softirq.part.0 (kernel/softirq.c:523)
__local_bh_enable_ip (kernel/softirq.c:450)
__dev_queue_xmit (net/core/dev.c:4913)
packet_sendmsg (net/packet/af_packet.c:3139)
__sys_sendto (net/socket.c:2252)
__x64_sys_sendto (net/socket.c:2259)
do_syscall_64 (arch/x86/entry/syscall_64.c:94)
entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:121)
Kernel panic – not syncing: Fatal exception in interrupt
Reject routes without an inet6_dev immediately after lookup. Such routes
are not eligible for reverse-path filtering, and the check protects all
later rt6i_idev dereferences.