🎯 CVE-2026-43500 深度技术分析:漏洞根因 · PoC/EXP · 检测指纹
CVE-2026-43500 深度技术分析
摘要:CVE-2026-43500 是 Linux 内核 rxrpc 子系统中的一个本地权限提升(LPE)漏洞,CVSS 评分为 7.8(高危)。该漏洞源于 rxrpc 在处理 DATA 和 RESPONSE 数据包时,对 skb 的“克隆/共享”状态判断不完整,导致带有外部共享页片段(paged frags)的 skb 在解密路径上被就地处理,最终引发内核内存破坏。攻击者可通过 AF_RXRPC 套接字与 splice() 或 frag_list 链构造恶意输入,实现任意内核内存写入,从而提权至 root。目前该漏洞已有公开的缓解脚本,但尚无公开完整 EXP。
📌 漏洞概述
CVE ID:CVE-2026-43500
CVSS 评分:7.8(High)
漏洞类型:本地权限提升(Use-After-Free / 内存破坏)
影响产品:Linux Kernel(rxrpc 子系统)
触发位置:net/rxrpc/input.c 中的 rxrpc_input_call_event() 和 net/rxrpc/security.c 中的 rxrpc_verify_response()。
该漏洞的根源在于 rxrpc 数据包处理逻辑在决定是否“unshare”(线性和私有化)skb 时,只检查了 skb_cloned() 标志,未考虑 skb_has_frag_list() 和 skb_has_shared_frag() 两种情况。当 skb 未克隆,但其页片段由外部所有权共享(例如通过 splice() 写入 UDP 套接字的 SKBFL_SHARED_FRAG,或链式 frag_list)时,代码会走就地解密路径,将 frag 页直接绑定到 AEAD/skcipher SGL 中,导致内核可通过 SGL 对已释放或外部修改的页面进行写操作,形成可利用的内存破坏原语。
🔬 漏洞根因分析
在 Linux 内核网络子系统中,skb(socket buffer)的共享状态与数据所有权是安全关键概念。常规路径下,接收到的数据包若需要被安全层(如 rxrpc 的加密/解密)处理,内核必须确保 skb 所引用的内存区域是“私有”的,即不会被其他上下文并发修改或释放。rxrpc 的处理函数通过 skb_cloned() 检查来判断 skb 是否被克隆(即引用计数大于 1)。如果被克隆,则调用 skb_unshare() 创建一个线性、私有的副本;如果未被克隆,则直接使用原始 skb 进行就地解密。
然而,skb_cloned() 只能反映“skb 结构体”本身的克隆状态,并不能覆盖所有“数据共享”场景。现代内核中,skb 可以通过多种方式持有外部数据:
- SKBFL_SHARED_FRAG: 当用户通过
splice()将页缓存(page cache)中的页面直接挂载到 skb 的 frags 数组时,这些页面的所有权仍属于文件/页缓存。此时 skb 并未被克隆,但 frag 页允许外部写者(例如另一个进程写回文件)修改内容或释放页面。 - frag_list: skb 可以通过
skb_shinfo(skb)->frag_list链接多个子 skb,形成分段数据包。即使主 skb 未克隆,子 skb 可能被其他上下文引用,或本身带有共享 frag。
在 CVE-2026-43500 中,rxrpc_input_call_event() 与 rxrpc_verify_response() 只验证了 skb_cloned(),导致上述带有外部共享 frag 的 skb 未触发 unshare,直接落入就地解密路径。随后调用 skb_to_sgvec() 将这些外部页转换为 SG 列表(scatter-gather list),并交给 AEAD/skcipher 引擎处理。由于这些页面可能被用户态或文件系统在解密过程中并发引用/修改,硬件加密引擎或软件加密算法写入输出的过程中,会覆盖这些页面中原本属于其他对象的数据,造成越权写。攻击者可以利用这一点精准修改内核堆对象(如 struct cred)的引用计数或权限字段,完成本地提权。
漏洞提交修复的核心逻辑是:将 unshare 的判定条件扩展为 skb_cloned() || skb_has_frag_list() || skb_has_shared_frag()。这样一来,任何带有外部共享数据来源的 skb 都会先被线性化为内核私有副本,杜绝了外部页被安全层直接引用的风险。同时该修复保留了对正常 NIC 页池(page_pool)RX 路径的零拷贝优化,因为这些 skb 的 frags 是内核私有的(不满足共享条件),不会引入安全风险。
💥 影响与危害
该漏洞允许本地无特权用户(或低权限容器内进程)通过构造特定的 rxrpc 数据包,结合 splice() 操作将文件页缓存注入 UDP 套接字的 skb 中,恶意触发就地解密路径。利用成功后,攻击者能够以内核权限执行任意代码或修改内核数据,从而覆盖当前进程的 struct cred 获得 root 权限,或突破容器隔离、命名空间限制,实现主机级别完全控制。
由于触发条件无需特殊硬件,只需具备 AF_RXRPC 套接字创建权限(通常所有用户均可创建),且利用过程不依赖用户命名空间,因此在默认配置的 Ubuntu、Debian、Kali 等发行版上均可尝试。虽然目前 Exploit-DB 尚无公开完整 EXP,但 GitHub 上已出现缓解性脚本(如 dirty_frag_mitigation)和 PoC 仓库(attaattaatta/CVE-2026-43500),表明安全社区已高度关注,实际武器化 EXP 可能很快出现。此外,该漏洞与“Fragnesia”共享部分 XFRM/ESP 补丁面,进一步扩大了攻击影响范围。
一旦被利用,后果包括:本地权限提升至 root、内核内存任意读写、持久化后门植入、绕过 SELinux/AppArmor 等强制访问控制,以及从容器逃逸到宿主机。对于云多租户环境,该漏洞可能成为横向移动和隔离突破的关键跳板,具有极高危害性。
🛡️ 修复与缓解
官方补丁:Linux 内核主线已合入该修复补丁,核心改动为:
if (skb_cloned(skb) || skb_has_frag_list(skb) || skb_has_shared_frag(skb))
skb = skb_unshare(skb, GFP_ATOMIC);该补丁同时应用于 rxrpc_input_call_event() 和 rxrpc_verify_response()。各发行版应及时跟进包含该修复的内核稳定版(例如对应 Linux 6.x 后续修订版本)。请参考发行版官方安全公告,升级到已修复的内核版本,并重启系统使新内核生效。
临时缓解措施:
- 模块黑名单:使用
modprobe配置禁用rxrpc相关模块。由于 rxrpc 并非默认必需协议,执行echo "install rxrpc /bin/false" >> /etc/modprobe.d/dirtyfrag.conf(以及esp4、esp6模块)可阻断漏洞触发路径。GitHub 上的dirty_frag_mitigation脚本已实现该功能,支持--check非 root 检测模式,并覆盖 Fragnesia 共享面。 - SELinux/AppArmor 策略:限制普通用户对 AF_RXRPC 套接字的访问权限(例如通过 seccomp 过滤器阻止
socket(AF_RXRPC)调用)。 - 系统加固:禁止 unprivileged user namespace 创建(
kernel.unprivileged_userns_clone=0),虽然该漏洞不强制依赖 userns,但可增加利用难度。 - 监控:关注内核日志中的异常
skb_warn_bad_offload或skb_shared警告,以及异常splice()到 UDP 套接字的调用模式。
注意:模块黑名单属于阻断性缓解,会影响依赖 rxrpc 的合法功能(如 AF_RXRPC 客户端/服务器应用)。在确认不需要 rxrpc 的生产环境中优先采用;对于必须启用 rxrpc 的场景,应尽快应用内核补丁。
🧪 PoC 复现
从 GitHub 公开仓库抓取的实际 PoC 代码(仓库)。
📋 代码元数据语言md来源vorkampfer/dirty_frag_mitigation针对性✅ 已验证与漏洞相关(代码含 CVE 引用)依赖见代码注释/README用法详见代码注释中的使用说明
# dirty_frag_mitigation
1. A bash script for mitigating linux dirty frag exploit CVE-2026-43500
2. Works on all Debian/Ubuntu Arch based platforms i.e. Kali,ParrotSec,
BlackArch
3. Added --check to run as non-root user. Added fragnesia support as it shares the same patch surface with dirtyfrag.
## Example usage:
```
ᐅ dirty_frag_fix.sh --check
[*] Checking dirtyfrag mitigation status (non-root check mode)...
[*] Config file: /etc/modprobe.d/dirtyfrag.conf
[*] install esp4 /bin/false: yes
[*] install esp6 /bin/false: yes
[*] install rxrpc /bin/false: yes
[*] Any vulnerable modules currently loaded: no
[+] Likely mitigated against dirtyfrag based on module blocklist and load state.
[*] Note: This same module-level mitigation also reduces fragnesia exposure on the same ESP/XFRM surface.
[*] Note: Fragnesia is a separate bug with its own patch,
but shares mitigation surface with dirtyfrag.⚔️ EXP 利用代码
截至分析时,Exploit-DB 未收录该 CVE 的公开利用代码。可利用上述 PoC 进行验证,或关注 Exploit-DB 更新。
🕵️ 检测指纹
当前规则库未收录针对该 CVE 的专用检测规则。建议:
- 根据漏洞根因编写 Nuclei 检测模板
- 在 WAF/IDS 中配置针对漏洞特征的规则
- 关注漏洞指纹库更新
🤖 本文由漏洞情报系统自动聚合生成 · 2026-08-04 08:29 · 数据源: NVD/GitHub-Advisory/OSV/CISA-KEV/Exploit-DB/PoC-in-GitHub + 检测规则库