基于Dirty Frag漏洞发现过程的“攻击原语”思考——再论漏洞发现与分析工作的人机分工
时间 : 2026年06月01日 | 来源:安天CERT

导语
安天CERT基于对Theori研究员Taeyang Lee借助Xint Code平台发现并曝光Copy Fail(CVE-2026-31431)的相关信息的分析挖掘,撰写了《人与AI协同的漏洞分析新范式——Copy Fail发现过程解析》一文。文章指出,在内核漏洞研究从“工匠时代”加速进入“人机协同时代”的过程中,工作范式正在被重构——“人聚焦‘问对问题’,AI负责‘问遍所有相关问题’”。有网友询问:如何理解“问对问题”?我们依托Theori前研究员Hyunwoo Kim(@v4bel)披露的Dirty Frag漏洞,跟进梳理相关细节,完善对“问对问题”的理解,即新一代安全研究者正以“攻击原语”为锚点,重构漏洞发现与分析的范式框架。
1.引言
1.1 事件背景:Dirty Frag漏洞的技术概要与社会化披露冲击
2026年5月,独立安全研究员Hyunwoo Kim(@v4bel)披露了一个影响全系列主流Linux发行版的本地权限提升(LPE)漏洞——Dirty Frag (CVE-2026-43284, CVE-2026-43500)。Dirty Frag的技术本质并非单一漏洞,而是两个页缓存(Page Cache)写入原语的链式组合:根植于IPsec/xfrm子系统的xfrm-ESP Page-Cache Write(2017年1月引入)与根植于RxRPC子系统的RxRPC Page-Cache Write(2023年6月引入)。两者单独利用均存在环境限制,但Hyunwoo Kim通过链式组合实现了跨发行版、跨配置的稳定提权,覆盖Ubuntu 24.04.4、RHEL 10.1、openSUSE Tumbleweed、CentOS Stream 10、AlmaLinux 10、Fedora 44等主流系统。
Dirty Frag的披露在Copy Fail(CVE-2026-31431)曝光后极短时间内出现,两者共享同一攻击哲学——页缓存可控写入(Page-Cache Write Primitive),但Dirty Frag通过跨子系统原语互补,将利用的通用性与可靠性提升至新的高度。这一事件不仅是一次技术层面的漏洞曝光,更对当前的漏洞响应机制、负责任披露流程以及安全研究的人机协同模式提出了深刻挑战。
1.2 问题提出:从“崩溃点发现”到“原语抽象(Primitive)”的认知升级
传统的漏洞研究往往以“发现崩溃点”为起点,以“获得CVE编号”为终点,研究者的注意力集中在触发条件、崩溃现场与补丁差异上。然而,Dirty Frag的发现过程揭示了一种更高阶的研究范式:发现者Hyunwoo Kim并非在寻找“又一个缓冲区溢出”或“又一个UAF”,而是在系统性地狩猎一种稀缺能力——页缓存写入原语。这种范式转换要求研究者从“现象描述”跃迁至“能力抽象”,从关注“哪行代码错了”转向关注“这段代码赋予了利用者什么原子能力”。
攻击原语(Attack Primitive)是漏洞利用研究中的核心工程概念,指攻击者通过某个漏洞或机制获得的、可被稳定复用的基础操作能力。它不是完整的exploit,而是构成exploit的“原子操作”。理解攻击原语,是区分“漏洞分析研究员”与“漏洞利用工程师”的关键分水岭。
1.3 研究目标:以攻击原语为锚点,重构漏洞发现与分析的范式框架
本报告旨在以Hyunwoo Kim发现Dirty Frag漏洞的过程为解剖样本,解析攻击原语的基本框架与分类体系,解构Dirty Frag的双原语链式结构,透视Hyunwoo Kim从子系统审计到“原语狩猎”的方法论路径,并在此基础上重新论述漏洞发现与分析工作中的人机分工。最终,将尝试回答:在AI辅助漏洞挖掘能力爆发的背景下,人类研究员的核心价值何在(即如何问对问题)?工具链应如何进化?防御体系应如何转型?
1.4 报告范围与术语约定
本报告聚焦Linux内核本地提权场景,核心术语定义如下:
• 攻击原语(Attack Primitive):可被稳定复用的基础攻击能力单元,如页缓存写入、任意地址读、控制流劫持等。
• 页缓存写入原语(Page-Cache Write Primitive):在不触碰磁盘文件的前提下,向内存中的页缓存页(page cache page)写入可控数据的能力。
• 链式组合(Chaining):将多个独立攻击原语按逻辑顺序拼接,以绕过各自的环境限制,构建完整杀伤链。
• Dirty家族:指Dirty Pipe(CVE-2022-0847)、Copy Fail(CVE-2026-31431)、Dirty Frag等共享页缓存篡改范式的漏洞谱系。
2.攻击原语的理论框架与分类体系
2.1 概念界定:从密码学原语到漏洞利用原语的语义迁移
在密码学中,“原语”(Primitive)指哈希、对称加密、签名等基础算法——它们本身不解决具体业务问题,但可通过组合构建出TLS、VPN、区块链等复杂协议。攻击原语借用了这一概念:它是构成漏洞利用的“最小功能单元”。单个原语往往不足以完成致效,但它是支撑完整杀伤链的基础。
从密码学原语到攻击原语的语义迁移,体现了安全研究从“防御性抽象”向“攻击性抽象”的范式扩展。密码学原语回答“我能安全地做什么”,攻击原语回答“我能利用系统做什么”。两者共同遵循组合性(Composability)、确定性(Determinism)与可复用性(Reusability)三大原则。
2.2 内核本地提权(LPE)场景的原语四分法:读、写、执、降级
在Linux内核本地提权研究中,攻击原语可按能力类型分为四类:
| 类型 | 能力描述 | 典型来源 |
| 读原语(Read Primitive) | 读取内核/用户态任意地址数据 | 信息泄漏、侧信道、UAF读 |
| 写原语(Write Primitive) | 向内核/用户态任意地址写入可控数据 | 页缓存篡改、OOB写、UAF写 |
| 执行原语(Execute Primitive) | 劫持控制流(修改函数指针、返回地址) | ROP、JOP、内核UAF |
| 降级原语(Downgrade Primitive) | 绕过安全边界(禁用COW、绕过SELinux) | 逻辑缺陷、配置篡改、引用计数操纵 |
Dirty Frag和Copy Fail提供的正是写原语中最稀缺的一类——页缓存可控写入原语。这类原语的稀缺性在于:它允许攻击者修改内存中setuid二进制文件的页缓存副本,而无需触碰磁盘,从而绕过文件完整性监控与签名验证机制。
2.3 页缓存写入原语(Page-Cache Write Primitive)的特殊地位与稀缺性
页缓存(Page Cache)是Linux内核用于缓存文件系统数据的核心机制。当用户态程序读取文件时,内核将磁盘块映射到内存页缓存页,程序实际读取的是页缓存副本。正常情况下,页缓存页对映射它的用户态进程是只读的;任何写入应触发COW(Copy-On-Write),由内核分配新页并复制数据。
页缓存写入原语的本质是:找到一个内核代码路径,该路径在误认为页缓存页可安全原地修改的情况下,向其写入攻击者可控的数据。这种原语的特殊性在于:
1.无文件写权限要求:攻击者无需拥有目标文件的写权限,甚至无需拥有所在目录的写权限。
2.绕过完整性监控:由于仅修改内存中的页缓存,不触发磁盘回写,文件系统级别的完整性检查(如IMA/EVM)无法感知。
3.高确定性:逻辑漏洞导致的页缓存写入不依赖竞态条件,成功率接近100%。
4.跨版本稳定性:页缓存机制是内核核心架构,利用方式在不同内核版本间高度稳定。
正因上述特性,页缓存写入原语成为本地提权研究中的“魔戒”级能力。Dirty Pipe首次证明该原语可行,Copy Fail证明其可复现,Dirty Frag则证明其可工程化、通用化。
2.4 攻击原语与经典安全模型的映射:杀伤链、ATT&CK、STRIDE 的互补视角
攻击原语思维可与经典安全模型形成互补映射:
• 杀伤链(Kill Chain):攻击原语对应杀伤链中的“武器化”(Weaponization)阶段。页缓存写入原语是一种通用武器化组件,可适配不同初始访问向量。
• ATT&CK框架:页缓存写入原语映射至T1068(Exploitation for Privilege Escalation),但更细粒度地揭示了“利用机制”而非仅“利用行为”。
• STRIDE:从威胁建模视角,页缓存写入原语利用了“篡改”(Tampering)威胁的实例化——但篡改对象从传统意义上的“数据”升级为“执行体在内存中的映像”。
将攻击原语纳入经典模型,有助于防御方从“能力消除”而非仅“漏洞修补”的维度重构防御体系。
3.Dirty Frag的攻击原语解构
3.1 技术本质:非单一漏洞,而是双原语链式组合结构
Dirty Frag的技术本质必须被准确理解:它不是一个单一commit引入的缺陷,而是两个独立页缓存写入原语的链式组合。Hyunwoo Kim在披露中明确将其定义为“两个Page-Cache Write primitive的链式利用”,这一自我定位揭示了现代漏洞研究的工程化高度——研究者不再仅追求“发现一个完美的漏洞”,而是追求“一组互补的原语”。

图:xfrm-ESP与RxRPC双原语链式组合逻辑
3.2 xfrm-ESP 写原语:4字节可控写入的能力边界与命名空间约束
xfrm-ESP写原语根植于IPsec/ESP子系统。2017年1月,Steffen Klassert为优化ESP数据路径性能,提交了esp4/6: Avoid skb_cow_data whenever possible,意在减少不必要的COW开销。该优化在ESP输出路径中使用skb_page_frag_refill直接分配页片段,但当通过splice()将外部共享的页缓存页注入skb的frag时,ESP解密路径会原地写入这些共享页。具体而言,攻击者通过splice()将setuid二进制文件(如/usr/bin/su)的页缓存页映射到管道,再将其作为ESP数据包的一部分送入IPsec栈。ESP解密路径中的esp_input()系列函数在解密ESP尾部时,通过skb_put()或pskb_put()向skb的尾部写入4字节的seq_hi字段——而这一写入直接发生在攻击者注入的页缓存页上。由于seq_hi的值可由攻击者通过构造ESP数据包直接控制,因此实现了4字节完全可控写入。然而,xfrm-ESP原语存在关键限制:需要用户创建网络命名空间,在Ubuntu等默认启用并严格配置AppArmor的发行版中,通过apparmor_restrict_unprivileged_userns等策略,非特权用户创建用户命名空间的能力受到限制,导致该原语单独无法利用。
3.3 RxRPC 写原语:8字节写入的无特权路径与 fcrypt 密钥暴力破解机制
RxRPC写原语是Dirty Frag的“第二把钥匙”,其核心价值在于完全不需要任何特权。RxRPC(AF_RXRPC)是Linux内核中用于AFS(Andrew File System)和Kerberos认证的远程过程调用协议。在RxRPC的Kerberos认证路径rxkad_verify_packet_1()中,收到的数据包前8字节会执行原地PCBC(fcrypt)解密。skb_to_sgvec()直接将skb的frag(包含攻击者通过splice()注入的页缓存页)转换为scatterlist,且src与dst指向同一个sg。因此,解密操作将8字节的“解密结果”写回了只读的页缓存页面。与xfrm-ESP不同,RxRPC原语的值无法直接控制——它是fcrypt_decrypt(C, K)的结果。攻击者需要先通过add_key("rxrpc", ...)注册一个密钥K,然后在用户态暴力破解,找到能产出目标8字节明文的那个K。fcrypt是56-bit密钥、8-byte块的AFS专用密码,暴力破解空间可控。最关键的是:RxRPC路径完全不需要用户命名空间、不需要网络命名空间、不需要CAP_NET_ADMIN,且Ubuntu默认加载rxrpc.ko模块。
3.4 原语链式互补:从单点缺陷到跨子系统通用提权框架的跃迁
Dirty Frag的突破性在于原语链式互补的工程化设计:xfrm-ESP原语提供4字节直接可控写入但受限于命名空间;RxRPC原语提供8字节间接可控写入但无任何特权要求。Hyunwoo Kim的利用链逻辑如下:首先通过RxRPC原语在无特权环境下获得初步写入能力,或通过xfrm-ESP原语在允许命名空间的环境中实现精确写入;两者互补覆盖了所有主流发行版的默认配置。这种“拼接”思路意味着:即使单个原语存在环境限制,攻击者仍可通过跨子系统原语互补实现通用提权。这是现代漏洞利用的工程化升级:从“单点原语”进化为“多原语链式组合”,从“特定子系统的漏洞”进化为“跨子系统、跨发行版的通用提权框架”。
3.5 "Dirty"家族谱系:Dirty Pipe → Copy Fail → Dirty Frag 的原语继承与能力进化
三代演进体现了页缓存写入原语的发现、复现与通用化:
| 代际 | 漏洞 | 核心子系统 | 页缓存写入能力 | 标志性意义 |
|---|---|---|---|---|
| 第一代 | Dirty Pipe(CVE-2022-0847) | Pipe子系统 | 首次证明页缓存可篡改 | 开创"Dirty"攻击范式,Max Kellermann发现 |
| 第二代 | Copy Fail(CVE-2026-31431) | AF_ALG加密子系统 | 通过加密操作实现写入 | AI辅助发现,Theori/Xint Code证明范式可复现 |
| 第三代 | Dirty Frag (CVE-2026-43284,CVE-2026-43500) | xfrm-ESP + RxRPC | 双原语链式利用,绕过环境限制 | 通用化、工程化、武器化,Hyunwoo Kim实现 |
三代漏洞发现演进的核心规律:每一代都在证明同一类攻击原语的可行性,但每一代都在子系统选择、环境适配与工程化可靠性上实现跃迁。
4.漏洞发现过程的方法论透视
4.1 研究路径:Hyunwoo Kim 从子系统审计到“原语狩猎”的思维转换
Hyunwoo Kim(@v4bel)的研究路径呈现鲜明的范式特征:从子系统功能审计转向攻击原语狩猎。传统审计路径是:选择一个子系统→阅读代码→寻找bug→构造POC。而Kim的路径是:定义目标原语(页缓存写入)→ 枚举所有可能提供该原语的子系统 → 验证每个候选路径的确定性逻辑缺陷。这种思维转换的实质是从“代码中心”转向“能力中心”——代码只是获得原语的途径,原语本身才是研究目标。
4.2 发现逻辑:页缓存篡改攻击面的系统性梳理与确定性逻辑缺陷识别
Dirty Frag的发现逻辑可分解为三个层次:第一层:攻击面枚举,识别所有内核子系统中满足处理用户态数据、执行原地写操作且未对共享页执行COW检查的代码路径。第二层:确定性逻辑缺陷识别,优先选择不依赖竞态条件的逻辑缺陷。第三层:环境适配验证,单独验证每个原语的环境限制,寻找互补原语覆盖受限环境。
4.3 工程化思维:多原语链式组合、环境适配与利用可靠性设计
Dirty Frag的披露文档展示了高度工程化思维:多原语链式组合、针对Ubuntu与RHEL不同默认配置的自适应利用路径、确定性逻辑漏洞确保高成功率。这种思维标志着内核漏洞研究从“工匠手作”向“工业化生产”转型。
5.漏洞发现与分析工作的人机分工再论
5.1 范式转变:AI辅助漏洞挖掘的能力爆发——仍以Theori / Xint Code的Copy Fail扫描实践为例
Copy Fail的发现过程是人机协同漏洞挖掘的典范样本。Taeyang Lee借助Xint Code平台,通过AI辅助扫描在Linux内核AF_ALG子系统中识别出Copy Fail漏洞。AI的核心价值在于问遍所有相关问题:遍历所有子系统中可能的页缓存交互路径;识别未执行COW检查的代码模式;关联历史补丁与当前代码状态;在人力不可行的时间尺度内完成跨版本、跨子系统的模式匹配。
5.2 机器智能的适用域:大规模模式识别、原语候选发现与代码路径关联
机器智能在漏洞发现中的适用域明确:大规模模式识别、原语候选发现、代码路径关联、历史漏洞复用等计算密集型任务。
5.3 人类研究员的核心价值:原语语义推理、链式组合创新与伦理判断
在Dirty Frag的发现中,Hyunwoo Kim展现了人类不可替代的三重价值:原语语义推理、链式组合创新和伦理判断。机器可以识别写入操作,但只有人类能判断是否构成页缓存写入原语,是否可控,以及如何链式组合。
5.4 人机协同的理想模型:“人类构造范式,机器狩猎原语”的分工边界
人类负责“问对问题”——构造范式;机器负责“问遍所有相关问题”——狩猎原语。 人类承担原语语义验证、链式组合设计、利用可靠性工程等;机器承担原语候选发现、模式匹配、跨版本关联等。
5.5 对漏洞分析人才培养的启示:从“挖洞手”到“原语架构师”
未来核心能力应是原语架构师素养:系统级视野、抽象思维能力、人机协同能力、工程化能力。
5.6 对工具链建设的启示:原语识别、语义标注与链式组合推演的智能平台
工具链应从单点漏洞扫描进化为攻击原语识别、语义标注与链式组合推演的智能化支撑平台。
6.防御视角的原语对抗与架构反思
6.1 防御范式转换:从“修补CVE”到“消除原语”的策略升级
防御范式必须升级:从“修补CVE”转向“消除原语”。通过架构级改造(如强制COW、共享页标记隔离)消除页缓存写入原语的存在基础。
6.2 页缓存写入原语的缓解策略:COW强制化、共享页标记与路径隔离
三层缓解策略:COW强制化、共享页标记、路径隔离。
6.3 内核安全架构演进:子系统间原语传播阻断与最小权限原则
引入子系统间原语传播阻断,默认禁用非必要子系统等。
6.4 对“执行体治理”理念的映射:运行对象层次的约束、审计与行为基线
防御方必须监控“执行体映像的完整性”而非仅“磁盘文件的完整性”,对setuid二进制等高风险执行体强制内存域隔离。
7.结论与展望
攻击原语思维是漏洞研究认知升级的关键。人机分工再平衡,安全研究者须进化为“原语架构师”。未来威胁对抗趋势:集约化分析平台与应急协调机制融合,预测性防御与泛在感知成为必要。
结语:漏洞是信息系统的自身属性,无法消亡。防御者应构建“盾立方”式安全体系,引入攻击原语思维,精准识别漏洞利用能力基础,科学分配人机协同智力资源。
附录A:Dirty Frag / Copy Fail / Dirty Pipe 攻击原语能力对比矩阵
| 对比维度 | Dirty Pipe | Copy Fail | Dirty Frag |
|---|---|---|---|
| 核心子系统 | Pipe | AF_ALG / algif_aead | xfrm-ESP + RxRPC |
| 页缓存写入能力 | 通过管道拼接实现篡改 | 通过加密操作实现写入 | 双原语链式组合写入 |
| 写入大小 | 任意(管道写) | 4字节(加密尾部) | 4字节(ESP)+8字节(RxRPC) |
| 值可控性 | 直接可控 | 直接可控 | ESP直接可控/RxRPC间接可控 |
| 确定性 | 逻辑漏洞 | 逻辑漏洞 | 逻辑漏洞 |
| 特权要求 | 无 | 无 | 无(RxRPC完全无特权) |
| 命名空间要求 | 无 | 无 | ESP需命名空间 / RxRPC无需 |
| 标志性意义 | 开创页缓存篡改范式 | AI辅助发现,证明范式可复现 | 通用化、工程化、武器化 |
附录B:Linux 内核页缓存写入原语的历史演进时间线
| 时间 | 事件 | 技术意义 |
|---|---|---|
| Jan-17 | Steffen Klassert提交esp4/6: Avoid skb_cow_data whenever possible | Dirty Frag xfrm-ESP原语根因引入 |
| Feb-22 | Max Kellermann披露Dirty Pipe(CVE-2022-0847) | 首次证明页缓存可篡改 |
| Mar-22 | Steffen Klassert签署CVE-2022-27666修复补丁 | 首次意识到2017年优化隐患 |
| Jun- |