CVE-2026-98382 Linux 内核 bpf 权限绕过漏洞
影响具备 CAP_BPF 与 CAP_NET_ADMIN 的本地攻击者可越权运行绑定驱动专用 kfunc,导致内核崩溃或内存越界读取
Linux 内核 BPF 子系统中,__bpf_offload_dev_match() 在 netdev 精确匹配失败后会回退比较 offdev 指针,而 bound-only 程序的 offdev 通常为 NULL,导致不相关的 netdev 被判定为匹配。攻击者可借助 bpf(BPF_LINK_CREATE) 指定不同的 target ifindex,使绑定到某驱动的程序在另一驱动的 xdp_buff 上运行。
影响范围
受影响范围为包含该缺陷代码的 Linux 内核版本,具体版本区间暂无公开信息,需以官方补丁说明为准。
漏洞详情
漏洞类型为权限绕过/类型混淆。成因是 offload 设备匹配逻辑在 netdev 不匹配时回退比较 offdev 指针,NULL 值使不同设备被误判为同一设备。利用方式是调用 bpf(BPF_LINK_CREATE) 并传入不同 target ifindex,将 veth 绑定的程序挂到 tun 设备上执行,从而按 veth_xdp_buff 结构读取 tun 的裸栈 xdp_buff,触发越界读取与空指针解引用。
利用条件与风险
利用需本地具备 CAP_BPF 与 CAP_NET_ADMIN 权限,属于高权限前提下的越权与稳定性风险,可造成内核 Oops、KASAN 报错乃至拒绝服务。
修复建议
官方已通过补丁修复,在设备匹配时拒绝 dev-bound-only 程序在其他设备上运行;建议升级到包含该修复的内核版本,或在无法升级时限制 CAP_BPF/CAP_NET_ADMIN 的授予范围。
In the Linux kernel, the following vulnerability has been resolved:
bpf: Reject dev-bound-only programs on other devices
__bpf_offload_dev_match() falls back to comparing offdev pointers after an
exact netdev mismatch. Bound-only programs normally have NULL offdevs, so
unrelated netdevs compare equal. A bound-only program on an
offload-registered netdev can instead inherit a real offdev and match a
sibling port. With CAP_BPF and CAP_NET_ADMIN, a caller can use
bpf(BPF_LINK_CREATE) with a different target ifindex to run metadata kfuncs
specialized for the bound driver on the target driver’s xdp_buff. Running a
veth-bound program on tun reads beyond tun’s bare stack xdp_buff as a
veth_xdp_buff.
Oops: general protection fault, probably for non-canonical address
KASAN: null-ptr-deref in range [0x0000000000000010-0x0000000000000017]
RIP: 0010:veth_xdp_rx_timestamp (drivers/net/veth.c:1673)
Call Trace:
…
tun_build_skb (drivers/net/tun.c:1739)
tun_get_user (drivers/net/tun.c:1856)
tun_chr_write_iter (drivers/net/tun.c:2091)
vfs_write (fs/read_write.c:595 fs/read_write.c:687)
ksys_write (fs/read_write.c:739)
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: Fatal exception in interrupt
Restrict non-offloaded programs to exact netdev matches and retain the
shared-offdev fallback only for genuinely offloaded multi-port programs.