Aviral2642/kernel-nday-exploits
GitHub: Aviral2642/kernel-nday-exploits
针对已修复 Linux 内核 CVE 的本地权限提升 PoC 研究项目,提供从补丁分析、根因定位到完整利用链推演的深度技术文档。
Stars: 0 | Forks: 0
# Linux 内核 N-Day 漏洞利用
**针对已修复 Linux 内核漏洞的本地权限提升研究**
补丁逆向分析 · 根因分析 · 漏洞利用开发
[](#the-exploits)
[](#the-exploits)
[](#the-exploits)
[](#scope)
[**渲染后的索引 →**](https://www.aviralsrivastava.tech/exploits/) · [aviralsrivastava.tech](https://www.aviralsrivastava.tech)
## 漏洞利用
| CVE | 子系统 | 类型 | 受影响的内核 | CVSS | 上游修复 |
|---|---|---|---|---|---|
| [CVE-2026-23231](CVE-2026-23231/) | `nf_tables` | RCU use-after-free | 3.16 – 6.19.3 | 7.8 | [`71e99ee2`](https://git.kernel.org/stable/c/71e99ee20fc3f662555118cf1159443250647533) |
| [CVE-2026-22999](CVE-2026-22999/) | QFQ scheduler | use-after-free → double free | 3.8 – 6.18.6 | 5.5 | [`3879cffd`](https://git.kernel.org/stable/c/3879cffd9d07aa0377c4b8835c4f64b4fb24ac78) |
| [CVE-2025-40271](CVE-2025-40271/) | procfs | rb-tree use-after-free | ~3.14 – 6.18-rc5 | — | 见分析报告 |
| [CVE-2025-38236](CVE-2025-38236/) | AF_UNIX `MSG_OOB` | use-after-free | 6.9 – 6.15.4 | — | 见分析报告 |
| [CVE-2025-38106](CVE-2025-38106/) | `io_uring` sqpoll | use-after-free info leak | 6.9 – 6.15.2 | — | 见分析报告 |
每个目录都包含 `exploit.c` 以及背后的分析。
### CVE-2026-23231 — nf_tables RCU use-after-free
`nf_tables_addchain()` 使用 `list_add_tail_rcu()` 将新链发布到表的链表中,这发生在注册其 hooks *之前*。当 `nf_tables_register_hook()` 失败时,错误路径会调用 `nft_chain_del()` 并销毁该链,且中间没有介入 `synchronize_rcu()`。并发的 RCU 读者仍然持有它。
跨越十二年的内核,可由非特权用户命名空间触达。
命名空间设置 → nftables 基础设施 → 在 cgroup v2 内存压力下强制 hook 注册失败 → 使用 `msg_msg` 喷射已释放的 kmalloc-256 槽位 → 通过与 `nf_tables_dump_chains()` 竞争来泄露内核地址 → 覆盖 `modprobe_path` → 触发 helper。
### CVE-2026-22999 — QFQ scheduler use-after-free
`qfq_change_class()` 在类创建和类修改之间共享同一个 `destroy_class` 错误标签。当聚合分配失败时修改现有类,会在该类仍然链接在调度器哈希表中时将其释放。随后的删除路径会再次释放它。
NVD 将此评为拒绝服务。这实际上是权限提升。
为获取 `CAP_NET_ADMIN` 设置命名空间 → 通过 netlink 设置 QFQ qdisc 和类 → 内存压力 → 类更改时的 UAF → 跨 CPU double free 以绕过 SLUB freelist 加固 → 重叠的 `msg_msg` 对象 → 泄露 → `modprobe_path` → root。
## 缓解措施
两个 2026 年的漏洞利用都采用了纯数据路线,这正是它们在现代内核上仍然可行的原因:由于没有控制流劫持,kCFI 和 SMEP 根本不会介入。
| | KASLR | SMEP | SMAP | kCFI | SLUB hardening |
|---|---|---|---|---|---|
| CVE-2026-23231 | 绕过 | n/a | n/a | n/a | 影响极小 |
| CVE-2026-22999 | 绕过 | n/a | n/a | n/a | 绕过 |
`n/a` 表示该技术完全不需要绕过它,而不是指缺少该缓解措施。
## 厂商补丁状态
这五个漏洞均已在上游修复。发行版的覆盖情况参差不齐,差距在此列出,而不是留给您自己去发现。
**CVE-2026-23231** — Ubuntu 已修复 ([USN-8244-1](https://ubuntu.com/security/notices/USN-8244-1)) ·
Debian 已修复 ([DLA-4561-1](https://security-tracker.debian.org/tracker/DLA-4561-1)) ·
RHEL 10 和 RHEL 7 ELS 已修复 · **RHEL 9 受影响,尚未发布厂商修复**
**CVE-2026-22999** — Debian 已修复 ([DLA-4475-1](https://security-tracker.debian.org/tracker/DLA-4475-1)) ·
Ubuntu 部分修复 (jammy, [USN-8162-1](https://ubuntu.com/security/notices/USN-8162-1)) ·
RHEL 9 和 10 不受影响 · **RHEL 8 和 RHEL 7 ELS 受影响,尚未发布厂商修复**
距离上游修复已经过去 193 天
如果您运行的是 RHEL 8 或 RHEL 9,相关的 bug 在您的系统上仍未修补,而本存储库包含针对它的漏洞利用代码。一个已经在上游存在了半年却仍未到达受支持的企业版本的修复,从运行它的人的角度来看,并不是一个已修复的 bug。
## 范围
仅为 PoC。每个漏洞利用演示 `uid=0` 后即停止。没有持久化,没有横向移动,没有载荷投递,没有网络回调,没有反取证。
每个漏洞利用都会检查正在运行的内核版本,并在已修复的内核上拒绝执行。
## 编译
```
gcc -Wall -Wextra -static -o exploit exploit.c -lpthread
```
x86_64 Linux。请在一次性虚拟机中运行。
## 方法
每个目录都包含了研究工作,而不仅仅是 payload:
**`patch-analysis.md`** — 上游 diff、补丁前后的代码路径,以及通往 bug 的 syscall 路由。
**`root-cause.md`** — bug 分类、原语、它所在的 slab cache、喷射候选者,以及每个缓解措施对该方法的影响。
**`exploit-strategy.md`** — 逐步的利用链:设置、触发、重新分配、泄露、提权、清理。
分析才是持久的部分。随着内核的演进,漏洞利用会过时。但关于为什么补丁不完整,或者分配器可以被如何引导的推理不会过时。
## 法律与意图
发布用于防御性研究、检测工程和漏洞利用开发教育。
所有五个漏洞都是公开的,并在上游得到了修复。
仅在您拥有或获得明确授权测试的系统上运行这些内容。在大多数司法管辖区,未经授权访问计算机系统是刑事犯罪。您对使用此代码的行为自行负责。
欢迎对分析进行纠正。请提交 issue。
## 许可证
MIT — 见 [LICENSE](LICENSE)。
**Aviral Srivastava** — 安全研究员,AI/ML 基础设施与 Linux 内核
CVE-2026-33017 (Langflow, CISA KEV) · CVE-2026-53923 (vLLM) · CVE-2026-32628 (AnythingLLM)
2026 Pwnie Award 提名,最佳服务器端 / 云端 Bug
[aviralsrivastava.tech](https://www.aviralsrivastava.tech) · [ORCID](https://orcid.org/0000-0002-6724-4662) · [LinkedIn](https://linkedin.com/in/aviralsrivastava23)
标签:Linux内核, PoC, UAF, Web报告查看器, 安全渗透, 客户端加密, 暴力破解, 本地提权, 漏洞分析, 路径探测