ishankaru/CVE-2026-23111-nftables-lab
GitHub: ishankaru/CVE-2026-23111-nftables-lab
针对 Linux nf_tables 本地提权漏洞 CVE-2026-23111 的防御性暴露检测工具与一次性虚拟机复现实验室,不含漏洞利用代码。
Stars: 0 | Forks: 0
# CVE-2026-23111 nf_tables LPE:暴露检查与安全实验室
针对 CVE-2026-23111(Linux 内核中 `nf_tables` 的释放后重用本地权限提升漏洞,即 `nft_map_catchall_activate()` 中元素活动状态检查反转的“off by !”漏洞)的防御性工具和可复现的**虚拟机**实验室。
无特权的本地用户可以通过无特权 user namespaces 提权至 root,并从容器中逃逸。
本仓库**不提供任何漏洞利用代码**。它包含一个只读的暴露检查器、一个用于创建真正的无特权用户的脚本,以及虚拟机定义文件,以便您能安全地触达该漏洞并研究公开的研究成果。完整的 root 提权利用链位于下方链接的披露报告中,而非本仓库中。
完整分析报告:https://techearl.com/cve-2026-23111-nftables-lpe
## 文件
- `check-exposure.sh` — 只读检测器:对比内核版本与已修复构建、检查 `nf_tables` 是否存在、无特权 userns 前置条件,以及内核日志崩溃特征。
- `setup-unprivileged-user.sh` — 创建一个没有 sudo 权限的 `labuser`,并证明其确实无特权。LPE 测试的核心在于必须从一个本身无法获取 root 权限的用户开始。
- `Vagrantfile` — 一次性的 Debian 12 和 AlmaLinux 10 虚拟机(Multipass 无法启动这些发行版)。
## 为什么使用 VM 而不是容器
容器共享宿主机内核。在容器内运行内核漏洞利用等同于在您真实的宿主机内核上运行,因此所谓的“测试”可能会危及实体机。请使用拥有独立内核的一次性 VM。
## 发行版与启动工具
| 发行版 | 启动工具 | 原因 |
|---|---|---|
| Ubuntu 24.04 / 22.04 | Multipass(仅限 Ubuntu) | Exodus 在两者上均复现了该漏洞;24.04 默认开启了 AppArmor userns 限制,因此能展示该缓解措施。 |
| Debian 12 | Vagrant (`vagrant up debian`) | Exodus 在其上复现了该漏洞;默认开放无特权 userns。 |
| AlmaLinux / Rocky 10.1 | Vagrant (`vagrant up alma`) | 匹配 FuzzingLabs 的目标内核 `6.12.0-124.x.el10`,因此能如他们公布的那样复现公开的触发程序。 |
Multipass 仅能启动 Ubuntu,这就是其他发行版使用 Vagrant 的原因。
## 锁定易受攻击的内核(按发行版)
每个发行版都需要使用不同的技巧,才能启动一个真正未修复且在云 VM 中仍能保持网络正常连接的内核:
- **Ubuntu (云):** 使用旧版的 `linux-aws`,而不是 `linux-generic`。通用内核(generic kernel)缺少 AWS **ENA** 网卡驱动,会导致在 Nitro 实例上丢失 SSH 连接。执行 `sudo apt install -y linux-image-6.8.0-1028-aws`(低于已修复的 `6.8.0-1051` 版本),在 GRUB 中将其设为默认,然后重启。在本地虚拟化环境中,通用内核没有问题。
- **Debian:** 主仓库只包含当前(已修复)的内核。添加一个未修复的快照镜像并安装 `cloud` 内核(保留了 ENA 支持):`deb [check-valid-until=no trusted=yes] https://snapshot.debian.org/archive/debian/20251201T000000Z/ bookworm main`,然后执行 `apt install -y linux-image-6.1.0-39-cloud-amd64=6.1.148-1`(低于已修复的 `6.1.164-1`,DSA-6163-1)。
- **AlmaLinux/Rocky:** 易受攻击的 `el10_1` 内核位于 10.1 vault 中。将 dnf 指向 `https://vault.almalinux.org/10.1/BaseOS/x86_64/os/` 并执行 `dnf install kernel-6.12.0-124.38.1.el10_1`,然后执行 `grubby --set-default`。
## 运行它(任意 VM)
```
# 1. 创建一个真实的非特权用户并证明其无法 sudo。
# (使用 useradd,而不是 Debian 的 adduser,因此它在 RHEL 上也能运行。)
sudo bash setup-unprivileged-user.sh labuser
# 2. Exposure 判定。
sudo ./check-exposure.sh
# 3. 作为 labuser,先执行 precondition,然后在 netns 内触发公开的 nft。
sudo -u labuser unshare -Ur id # uid=0 in a new userns = precondition open
# (denied on stock Ubuntu 24.04 = mitigation working)
# 公开的 FuzzingLabs 触发器(catchall GOTO + aborted batch)。此处内联作为
# 文档;本 repo 不提供可执行的 exploit/trigger 文件。
sudo -u labuser unshare -Urn bash -c '
nft add table inet t; nft add chain inet t c
nft add map inet t m "{ type ipv4_addr : verdict; }"
nft add element inet t m "{ * : goto c }"
printf "delete element inet t m { * }\ndelete element inet t m { 1.2.3.4 }\n" > /tmp/b.nft
nft -f /tmp/b.nft; nft flush ruleset'
```
该序列会运行存在缺陷的 abort 路径;它**不包含**权限提升利用链,并且在原版内核上是静默的(见下文)。
## 我实际观察到的情况(三种类型,真实有效)
| 发行版 | 启动的易受攻击内核 | userns 默认设置 | 结论 |
|---|---|---|---|
| Ubuntu 24.04 | `6.8.0-1028-aws` | 受限 (AppArmor) | 已缓解,未修复 |
| Debian 12 | `6.1.0-39-cloud` (`6.1.148-1`) | 开放 | 存在风险 |
| AlmaLinux 10.1 | `6.12.0-124.38.1.el10_1` | 开放 | 存在风险 |
关于触发程序的客观发现:**在原版生产内核上它是静默的。**
它运行了存在缺陷的 abort 路径,没有任何崩溃且没有 `dmesg` 输出,即使在循环执行释放并重用(free-and-reuse)的情况下也是如此。分析文章中提到的 `KASAN: slab-use-after-free` 输出来自于 KASAN/调试内核;要将潜在的释放后重用武器化,需要利用漏洞的堆喷射(heap spray,不包含在本仓库中)。该实验室证明了无特权用户能够触达该漏洞,展示了 Ubuntu 默认的 AppArmor 限制拦截了该路径,并给出了明确的“存在风险 / 已缓解 / 已修复”结论。原则上,它不会直接为您提供一个 root shell。
## 缓解措施
限制无特权 user namespaces(这会封堵公开漏洞利用的现实路径),然后修补内核。
```
# Ubuntu 23.10+(基于 AppArmor,保持合法的 userns 用户正常工作):
echo "kernel.apparmor_restrict_unprivileged_userns=1" | sudo tee /etc/sysctl.d/99-restrict-userns.conf
sudo sysctl --system
# 其他系统(全面禁用;在 Debian/Ubuntu 上同时设置两者):
printf 'kernel.unprivileged_userns_clone=0\nuser.max_user_namespaces=0\n' | sudo tee /etc/sysctl.d/99-restrict-userns.conf
sudo sysctl --system
# Patch(Ubuntu 24.04 generic 已在 6.8.0-107.107 中修复):
sudo apt update && sudo apt install --only-upgrade linux-image-generic && sudo reboot
```
## 参考
- NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-23111
- Exodus Intelligence "Off By !": https://blog.exodusintel.com/2026/06/08/off-by-exploiting-a-use-after-free-in-the-linux-kernel/
- FuzzingLabs reproduction: https://fuzzinglabs.com/repro-cve-2026-23111/
- Ubuntu: https://ubuntu.com/security/CVE-2026-23111
- Red Hat: https://access.redhat.com/security/cve/cve-2026-23111
- Debian: https://security-tracker.debian.org/tracker/CVE-2026-23111
## 许可证
MIT。仅限防御和教育用途。
标签:Linux内核, Vagrant, Web报告查看器, 安全渗透, 安全漏洞检测, 应用安全, 本地提权, 虚拟化实验环境, 配置修复