Skip to main content

OKHK 👀

个人数字泔水\(⁠◔⁠‿⁠◔⁠)
Thinking...
  1. 重要/漏洞:Linux Kernel Fragnesia XFRM ESP-in-TCP page cache 存在写入本地提权漏洞

    漏洞编号:暂无
    关联/同类参考编号:CVE-2026-43284(Linux xfrm/ESP shared skb frag 原地解密问题);Dirty Frag 关联链路另涉及 CVE-2026-43500(RxRPC)。NVD 对 CVE-2026-43284 的描述明确指向 Linux kernel xfrm ESP 在 shared skb frags 上避免原地解密的问题。
    重要等级: 严重(高危)

    CVSS 分数:
    参考关联 CVE-2026-43284:CVSS v3.1 7.8

    受影响系统:
    受 dirtyfrag 影响的所有版本都会受到影响。
    Fragnesia 属于 Dirty Frag 漏洞类别。它是 ESP/XFRM 中的一个独立漏洞,与 Dirty Frag 不同,后者已有单独的补丁。但是,它们位于同一攻击面上,缓解措施也与 Dirty Frag 相同。

    报告者称,未合入 2026 年 5 月 13 日 net: skbuff: preserve shared-frag marker during coalescing 修复补丁的 Linux 内核均可能受影响。实际风险需结合系统内核版本、发行版补丁回移情况、内核配置、ESP/XFRM 相关模块、user namespace / network namespace 策略以及容器权限配置综合确认。

    受影响内核条件:
    使用了存在 skb shared-frag 标记丢失问题的 Linux 内核,并且未合入 net: skbuff: preserve shared-frag marker during coalescing 修复补丁的系统。公开 PoC 仓库说明,该 PoC 利用 Linux XFRM ESP-in-TCP 子系统逻辑缺陷,对只读文件的 page cache 实现任意字节写。


    漏洞原理
    该漏洞核心问题在于:Linux 内核在 TCP skb coalescing 过程中,没有正确保留 skb frag 的 shared-frag 标记。修复补丁说明,skb_try_coalesce() 可以把一个 skb 的 paged frags 转移到另一个 skb;如果来源 skb 带有 SKBFL_SHARED_FRAG,合并后的目标 skb 仍然可能包含外部拥有或 page-cache-backed 的 frag,但旧逻辑会丢失该标记。之后 ESP input 检查 skb_has_shared_frag() 时可能得到 false,从而跳过 copy-on-write,直接在 page-cache-backed frag 上原地解密。

    攻击链路中,splice() 可将普通文件的 page cache 页引入 TCP skb paged frag。正常情况下,这类 frag 应被视为共享/外部拥有,后续可能写入 packet data 的协议栈路径应先执行 COW,避免修改文件页缓存。Fragnesia 利用的异常点是:数据进入 TCP receive queue 后再启用 ESP-in-TCP ULP,内核把这些排队数据当作 ESP 记录处理,而 shared-frag 标记在 coalescing 后丢失,导致 ESP 解密逻辑误认为可以原地写入。

    在 ESP/AES-GCM 解密过程中,密文与 keystream 做 XOR。PoC 通过控制 IV/nonce,使目标 page cache 字节被 XOR 成攻击者期望的值,从而实现对只读文件 page cache 的按字节修改。该修改发生在内存 page cache 中,不直接写回磁盘。


    注意

    这是一个本地提权漏洞,攻击者需要能够在目标系统上执行本地代码,但一旦满足前提,风险非常高,尤其是多用户 Linux 主机、CI/CD Runner、容器宿主机、共享开发机、云主机和高权限 SUID 程序较多的环境。
    该漏洞修改的是 page cache,不是磁盘文件本体。因此常规文件完整性检查如果只关注磁盘内容,可能无法直接发现短时间内的内存页缓存污染。被污染期间,普通 read()、程序加载、执行路径可能命中被篡改的 page cache。

    受影响组件
    Linux kernel net/core/skbuff.c
    skb_try_coalesce()
    SKBFL_SHARED_FRAG
    XFRM ESP input
    ESP-in-TCP ULP
    TCP receive queue
    page cache / skb paged frag


    处置建议:
    在不影响业务的前提下,禁用或限制非特权 user namespace / network namespace 创建能力,降低普通用户获得 netns 内 CAP_NET_ADMIN 并配置 XFRM SA 的可能性。
    如业务不依赖 IPsec ESP,可临时禁用或阻止加载 esp4、esp6。
    避免给容器授予 CAP_NET_ADMIN、CAP_SYS_ADMIN、特权容器、host network 等高风险配置。

    参考来源: Github
OKHK