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.crxgk_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() 创建私有副本

利用链

  1. 选择一个 SUID 二进制文件或敏感文件的目标页
  2. 创建带有可控 AES 密钥的 RxRPC 解密上下文
  3. 构建一个双片段 SKB,映射到目标页 + 密文
  4. 触发 rxgk_decrypt_skb() — 内核在共享页缓存上直接解密
  5. AES-CBC 解密的结果(可预测)覆盖了目标页的内容
  6. 执行被篡改的二进制 → 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 由第三方公开

参考资料