Koshmare-Blossom/DirtyDecrypt-go

GitHub: Koshmare-Blossom/DirtyDecrypt-go

CVE-2026-31635 的 Go 语言漏洞利用工具,通过 RxRPC rxgk 解密路径中的 page-cache 覆盖缺陷实现本地提权至 root。

Stars: 0 | Forks: 0

# dirtydecrypt-go [dirtydecrypt](https://github.com/v12-security/pocs/tree/main/dirtydecrypt)(CVE-2026-31635)的 Go 移植版。属于 [Dirty Frag](https://github.com/V4bel/dirtyfrag) 漏洞类别。 ## 工作原理 (简述) 该 bug 位于 `rxgk_decrypt_skb()`(`net/rxrpc/rxgk_common.h`)。该函数在调用 krb5enc AEAD 之前缺少对 `skb_cow_data()` 的调用。AEAD 会在原处解密 skb payload —— 直接写入支持 skb 数据的任何 page 中。如果该 page 是一个 page-cache page(通过 vmsplice + splice 固定在此处),则解密操作会覆盖该文件的 page cache。 **为什么是概率性的** 与 fragnesia(AES-GCM keystream 表)不同,rxgk 在调用设置时协商的 session key 下使用 AES-128-CTS。我们每次触发都会生成一个全新的随机 16 字节 key。写回 `page_cache[i]` 的 AES-CBC 解密数据块的第一个字节是完全随机的:它有 1/256 的概率等于目标字节。 **滑动窗口技术** 在偏移量 `i` 处的每次触发会破坏 16 个字节:`page_cache[i..i+15]`。一旦 `page_cache[i]` 与目标匹配,我们就移动到偏移量 `i+1`。下一次触发会覆盖 `page_cache[i+1..i+16]` —— 在不触及已写入字节 `i` 的情况下,修复偏移量 `i` 处的附带破坏。仅向前进行,无需重访。 每个字节的预期触发次数:约 256 次。最坏情况:每个字节 10000 次。 **触发链** 1. `add_key("rxrpc", ...)` - 安装随机的 AES-128 rxgk session key 2. `AF_RXRPC` 客户端 socket 连接到 loopback 上的伪 UDP 服务器 3. 伪服务器发送一个 CHALLENGE(SecuIdx=6, rxgk) 4. 客户端响应;伪服务器通过 `vmsplice`(网络包头)+ `splice`(偏移量 `i` 处的文件 page)构建一个恶意的 DATA 包 5. `rxgk_decrypt_skb()` 在客户端上运行 —— 进行原处解密,`/usr/bin/su` 的字节 `i` 变为随机值 6. mmap 检查:如果 `page_cache[i] == target[i]`,则前进到 `i+1` 总计 192 个字节。平均触发约 49152 次。一个 SA。无竞态。 ## 用法 ``` go build -o dirtydecrypt-go . ./dirtydecrypt-go ``` 成功后,会通过 PTY 进入一个 root shell。磁盘上的二进制文件保持不变。 ### 清理 ``` echo 1 | tee /proc/sys/vm/drop_caches ``` ## 环境要求 - Linux - 未修补的内核(见下文) - 无需外部工具 - 纯 Go,单一静态二进制文件 - 内核模块:`rxrpc`(在 `socket(AF_RXRPC, ...)` 时自动加载) ## 受影响的内核 补丁之前的所有内核:https://lore.kernel.org/netdev/ 与 dirtyfrag 系列的范围相同。 ## 缓解措施 ``` rmmod rxrpc printf 'install rxrpc /bin/false\n' > /etc/modprobe.d/dirtydecrypt.conf ``` ## 系列对比 | | dirtyfrag-go | fragnesia-go | **dirtydecrypt-go** | |---|---|---|---| | CVE | CVE-2026-43284 / CVE-2026-43500 | CVE-2026-46300 | CVE-2026-31635 | | 传输方式 | ESP-in-UDP + RxRPC/rxkad | ESP-in-TCP (ULP) | RxRPC/rxgk | | 写入模型 | 确定性 | 确定性(keystream 表) | 概率性(1/256) | | 每字节触发次数 | 1 (ESP) / 3 次固定写入 (rxkad) | 1(keystream 查找) | 平均约 256 次 | | 加密方式 | CBC-AES / HMAC-SHA256 / fcrypt | AES-128-GCM | AES-128-CTS (krb5enc) | ## 参考 - [v12-security/pocs - dirtydecrypt](https://github.com/v12-security/pocs/tree/main/dirtydecrypt) - 原始 C 语言 PoC - [CVE-2026-31635](https://nvd.nist.gov/vuln/detail/CVE-2026-31635) ## 致谢 - **Aaron Esau / V12 团队** - 漏洞发现及原始 PoC
标签:CVE, EVTX分析, Go语言, Web报告查看器, 内核漏洞, 数字签名, 日志审计, 本地提权, 程序破解, 网络安全, 隐私保护