CVE-2026-31635 — "DirtyDecrypt" Linux 内核本地提权漏洞
RxRPC rxgk 子系统中缺失的写时复制检查,允许本地用户解密操作直接覆盖页缓存获取 root。
漏洞概述
| 项目 | 内容 |
|---|---|
| 漏洞名称 | DirtyDecrypt(也称 DirtyCBC) |
| CVE 编号 | CVE-2026-31635 |
| 漏洞类型 | 页缓存写入(Page-Cache Write)— 缺少 COW 守卫 |
| CVSS | 7.5(High) |
| 发现者 | Zellic 与 V12 安全团队 |
| 报告时间 | 2026 年 5 月 9 日 |
| PoC 状态 | ✅ 已公开(GitHub: 0xFuffM3/CVE-2026-31635-DirtyDecrypt) |
影响范围
| 属性 | 内容 |
|---|---|
| 内核组件 | net/rxrpc/rxgk.c — rxgk_decrypt_skb() |
| 根因函数 | rxgk_verify_response() — 倒置的长度检查 + 原地解密无 COW |
| 配置要求 | CONFIG_RXGK=y 或 =m |
| 受影响内核 | 6.10 ~ 6.13(较窄的范围) |
各发行版受影响情况
| 发行版 | 默认风险 |
|---|---|
| Fedora 40/41 | ❌ 受影响(CONFIG_RXGK 默认启用) |
| Arch Linux | ❌ 受影响 |
| openSUSE Tumbleweed | ❌ 受影响 |
| Ubuntu 24.10 | ❌ 受影响(默认 6.11 内核) |
| Debian Sid | ⚠️ 受影响(6.12+ 内核) |
| RHEL 8/9 | ✅ 不受影响(CONFIG_RXGK 未启用) |
| Debian 稳定版 | ✅ 不受影响 |
| Ubuntu LTS | ✅ 不受影响 |
| AWS Linux / Android | ✅ 不受影响 |
漏洞原理
根因:两个缺陷的组合
该漏洞涉及 net/rxrpc/rxgk.c 中的两个缺陷:
缺陷 1:倒置的长度检查
// 有漏洞的代码(错误比较方向)
if (auth_len < len) // ❌ 应为 >
// 正确的比较
if (auth_len > len) // ✅ 拒绝过大的 RESPONSE 认证器
倒置的检查导致过大的认证数据包不会被拒绝,而是被传递到解密函数。
缺陷 2:原地解密无写时复制
rxgk_decrypt_skb() 在解密入站套接字缓冲区(sk_buff)时,直接在共享页缓存页上进行 AES-CBC 解密,而没有先调用 skb_cow_data() 创建私有副本。
利用链
- 选择一个 SUID 二进制文件或敏感文件的目标页
- 创建带有可控 AES 密钥的 RxRPC 解密上下文
- 构建一个双片段 SKB,映射到目标页 + 密文
- 触发
rxgk_decrypt_skb()— 内核在共享页缓存上直接解密 - AES-CBC 解密的结果(可预测)覆盖了目标页的内容
- 执行被篡改的二进制 → root shell(或清空
/etc/passwd的 root 密码)
漏洞特点
- ✅ Copy Fail 类(页缓存写入)家族的第四个变种
- ✅ 影响滚动更新的发行版
- ⚠️ 受影响内核版本范围较窄(6.10 ~ 6.13)
Copy Fail 类漏洞家族
| 漏洞名 | CVE | 组件 | 受影响范围 |
|---|---|---|---|
| Copy Fail | CVE-2026-31431 | AF_ALG (algif_aead) |
内核 4.17+(最广) |
| Dirty Frag | CVE-2026-43284 / CVE-2026-43500 | XFRM ESP / RxRPC | 2017 年后内核 |
| Fragnesia | CVE-2026-46300 | XFRM ESP-in-TCP | 特定版本 |
| DirtyDecrypt | CVE-2026-31635 | RxRPC / rxgk | 内核 6.10 ~ 6.13 |
| PinTheft | CVE-2026-43494 | RDS + io_uring | 特定配置 |
缓解措施
方案一:升级内核(推荐)
# Fedora
sudo dnf upgrade --refresh kernel kernel-core kernel-modules
sudo reboot
# Arch Linux
sudo pacman -Syu linux linux-headers
sudo reboot
# openSUSE Tumbleweed
sudo zypper dup
sudo reboot
# Ubuntu 24.10(如未自动更新)
sudo apt update && sudo apt dist-upgrade
sudo reboot
修复内核版本
| 内核线 | 修复版本 |
|---|---|
| 主线 | 6.14+(补丁于 2026-04-25 合并) |
| 稳定版 | 6.13.2、6.12.10、6.6.75 |
方案二:临时缓解 — 禁用 rxrpc 模块
# 卸载模块
sudo rmmod rxrpc
# 阻止自动加载
echo "blacklist rxrpc" | sudo tee /etc/modprobe.d/blacklist-rxrpc.conf
# 清空页缓存
echo 3 | sudo tee /proc/sys/vm/drop_caches
⚠️ 禁用
rxrpc会中断 AFS(Andrew File System)客户端功能,但对绝大多数系统无影响。
方案三:Seccomp 阻止 AF_RXRPC
# 在容器或应用中通过 seccomp 策略阻止 AF_RXRPC 套接字(协议 33)
检测方法
# 检查内核版本是否在受影响范围
uname -r
# 受影响:6.10 ~ 6.13
# 已修复:6.14+ / 6.13.2+ / 6.12.10+ / 6.6.75+
# 检查 rxrpc 模块是否加载
lsmod | grep rxrpc
# 检查 CONFIG_RXGK 是否启用
grep CONFIG_RXGK /boot/config-$(uname -r) 2>/dev/null || zcat /proc/config.gz 2>/dev/null | grep CONFIG_RXGK
时间线
| 日期 | 事件 |
|---|---|
| 2026-04-25 | 上游修复合入主线内核 |
| 2026-05-09 | Zellic / V12 团队报告漏洞 |
| 2026-05 | 内核维护者确认该漏洞为已修复问题的重复报告 |
| 2026-05 | PoC 由第三方公开 |
参考资料
💬 评论