Fragnesia:Linux 内核 XFRM ESP-in-TCP Page Cache 碎片处理提权漏洞

文档版本:v1.0 · 更新日期:2026-05-18 适用对象:安全研究员、系统管理员、DevSecOps 团队


漏洞速览

属性
CVE 编号CVE-2026-46300
漏洞别名Fragnesia
CVSS 评分7.8 HIGH
CVSS 向量AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
漏洞类型本地权限提升 LPE (Page Cache 写入原语 / UAF)
攻击向量本地 Local
权限要求低权限 Low
用户交互不需要 None
公开日期2026-05-13
PoC 状态已公开
补丁版本上游已提交补丁,Fedora 43 内核 7.0.6 已包含修复
临时缓解可禁用 XFRM ESP/RxRPC 模块或清理页缓存

发现者:V12 Security 团队

关键时间线

2026-05-13  V12 Security 公开披露
    ↓
上游提交补丁
    ↓
Fedora 43 (kernel 7.0.6) 包含修复
    ↓
各发行版跟进

漏洞简介

Fragnesia(CVE-2026-46300)由 V12 Security 团队于 2026 年 5 月 13 日公开披露。这是两周内第三个被公开的 Linux 内核本地权限提升漏洞——此前 CopyFail(CVE-2026-xxxxx)于 4 月 29 日披露,DirtyFrag(CVE-2026-xxxxx)于 5 月 7 日披露。Fragnesia 与 CopyFail、DirtyFrag 同属一类与 splice() 零拷贝机制相关的 Page Cache 写入原语漏洞。

该漏洞位于 Linux 内核 XFRM 框架的 ESP-in-TCP 子系统中,核心问题在于 skb(socket buffer)共享页面碎片(page fragment)的处理存在缺陷。当 ESP-in-TCP 对 fragment 页面进行处理时,页面释放与引用计数的生命周期管理出现错误,导致释放后使用(Use-After-Free, UAF)以及页缓存污染。攻击者可利用这一缺陷篡改内存中的页缓存内容,实现对只读文件的任意字节写入。

具体攻击路径为:攻击者通过 splice() 系统调用构造恶意数据,经由 ESP-in-TCP 封装的网络路径触发碎片处理缺陷,随后利用内存重分配技术控制已释放页面的内容,将攻击载荷写入目标只读文件(如 /usr/bin/su)对应的页缓存页面。修改后的 su 二进制文件仅在内存中存在(磁盘文件不受影响),攻击者执行 su 即可获得 root shell,实现一键提权。

“Fragnesia” 这一名称暗示了两层含义:“Fragment” 指向页面碎片(page fragment)生命周期管理的错误,“Amnesia”(遗忘)则形象地描述了内核在页面所有权追踪上的”失忆”——忘记正确记录页面的引用状态。该漏洞利用过程具有确定性,不需要依赖竞态条件(race condition),攻击者可以稳定、可靠地完成提权操作。


技术原理

攻击链

1. 配置 XFRM ESP-in-TCP 通道
       ↓
2. splice() 将 pipe 页面注入 socket 接收路径
       ↓
3. ESP-in-TCP 处理 fragment 页面,skb 共享页面碎片处理出错
       ↓
4. 页面碎片被释放但仍有引用存在(UAF)
       ↓
5. 页缓存页面被释放后仍可访问
       ↓
6. 攻击者通过内存重分配控制已释放页面内容
       ↓
7. 实现对只读文件的页缓存内任意字节写入
       ↓
8. 篡改 /usr/bin/su → 执行获得 root shell

关键差异(与 DirtyFrag 对比)

Fragnesia 与 DirtyFrag 虽同属 Page Cache 写入原语类漏洞,但攻击目标路径存在显著差异:

  • DirtyFrag 针对普通的 ESP 协议(IP 协议号 50)和 RxRPC 协议路径。
  • Fragnesia 专门针对 ESP-in-TCP 封装路径(使用 TCP 端口 4500,类似 NAT-T 场景)。其碎片生命周期错误涉及 skb_shared_info 结构体中的 frags[] 数组管理。

涉及的内核组件

组件角色
XFRM 框架IPsec 安全策略与状态管理的基础框架
ESP-in-TCPESP 协议经 TCP 封装,用于穿越 NAT 设备
skb 碎片管理skb_shared_info.frags[] 中页面碎片的引用与释放
splice()零拷贝数据传输系统调用,攻击的入口点
Page Cache文件数据在内存中的缓存,攻击的最终写入目标

受影响版本

发行版 / 组件受影响版本范围修复版本备注
Linux Kernel (含 XFRM/ESP-in-TCP)自 ESP-in-TCP 引入以来的版本 [待验证]上游已提交补丁 [待验证]
Fedora 43kernel < 7.0.6≥ 7.0.6已修复
Ubuntu受影响 [待验证]待发行版安全公告关注 USN 公告
RHEL / AlmaLinux受影响 [待验证]待发行版安全公告
Anolis OSN/AN/A根据龙蜥社区公告,Anolis OS 不受影响

漏洞影响场景

  1. 普通 Linux 主机本地提权:攻击者以低权限用户身份登录后,一条命令即可获得 root 权限,是此漏洞最直接的利用场景。

  2. VPN / IPsec 网关失陷:若攻击者已获得 VPN 或 IPsec 网关的本地访问权限,可利用此漏洞进一步提权,完全控制网关设备。

  3. 容器逃逸:在具备 CAP_NET_ADMIN 能力的容器中,攻击者可借助 XFRM/ESP-in-TCP 配置触发漏洞,从容器内突破至宿主机。

  4. 云虚拟机接管:云环境中,若租户虚拟机未及时修补内核,攻击者可利用低权限访问完成对整台虚拟机的提权接管。


修复措施

推荐修复(根本解决)

升级至包含补丁的内核版本:

# Fedora 43
sudo dnf update kernel
 
# 验证内核版本 ≥ 7.0.6
uname -r

对于 Ubuntu、RHEL、AlmaLinux 等发行版,请密切关注各发行版的安全公告(USN / RHSA / ALSA),在补丁发布后尽快升级。

临时缓解(无法立即升级时)

1. 禁用 XFRM ESP / RxRPC 内核模块(与 DirtyFrag 缓解措施相同)

sudo modprobe -r esp4 esp6 rxrpc 2>/dev/null || true
echo "install esp4 /bin/false" | sudo tee /etc/modprobe.d/fragnesia-mitigation.conf
echo "install esp6 /bin/false" | sudo tee -a /etc/modprobe.d/fragnesia-mitigation.conf
echo "install rxrpc /bin/false" | sudo tee -a /etc/modprobe.d/fragnesia-mitigation.conf

2. 清理页缓存(若怀疑系统已被入侵)

echo 1 | sudo tee /proc/sys/vm/drop_caches

3. Kubernetes 环境

  • 移除容器中的 CAP_NET_ADMIN 能力
  • 使用 RuntimeDefault seccomp 策略
  • 确保 Pod Security Standards 处于 enforced 模式

4. 重启清除

由于该漏洞的内存篡改仅在内存中生效、不落盘,重启系统可清除所有内存中的篡改痕迹。


一键检查与执行临时修复脚本

检查脚本

#!/bin/bash
# Fragnesia (CVE-2026-46300) 漏洞检查脚本
 
echo "=== Fragnesia (CVE-2026-46300) 检查脚本 ==="
echo ""
 
echo "[1] 内核版本:"
uname -r
echo ""
 
echo "[2] esp4 模块状态:"
lsmod 2>/dev/null | grep esp4 || echo "  未加载"
echo ""
 
echo "[3] esp6 模块状态:"
lsmod 2>/dev/null | grep esp6 || echo "  未加载"
echo ""
 
echo "[4] rxrpc 模块状态:"
lsmod 2>/dev/null | grep rxrpc || echo "  未加载"
echo ""
 
echo "[5] XFRM ESP-in-TCP 配置:"
ip xfrm state 2>/dev/null | grep -i esp || echo "  未检测到 ESP 相关的 XFRM 状态"
echo ""
 
echo "=== 检查完成 ==="

临时修复脚本

#!/bin/bash
# Fragnesia (CVE-2026-46300) 临时修复脚本
# 注意:此脚本仅作为临时缓解措施,请尽快升级内核
 
set -e
 
BACKUP_DIR="/etc/modprobe.d/backup-$(date +%Y%m%d%H%M%S)"
CONF_FILE="/etc/modprobe.d/fragnesia-mitigation.conf"
 
echo "=== Fragnesia (CVE-2026-46300) 临时修复脚本 ==="
echo "该脚本仅作临时缓解,请尽快升级内核至已修复版本"
echo ""
 
# 备份现有配置
sudo mkdir -p "$BACKUP_DIR"
echo "[1] 备份现有配置到 $BACKUP_DIR ..."
for f in /etc/modprobe.d/*.conf; do
    if [ -f "$f" ]; then
        sudo cp "$f" "$BACKUP_DIR/"
    fi
done
 
# 卸载模块
echo "[2] 卸载 esp4 / esp6 / rxrpc 模块 ..."
sudo modprobe -r esp4 2>/dev/null || echo "  esp4 未加载或无法卸载"
sudo modprobe -r esp6 2>/dev/null || echo "  esp6 未加载或无法卸载"
sudo modprobe -r rxrpc 2>/dev/null || echo "  rxrpc 未加载或无法卸载"
 
# 阻止模块加载
echo "[3] 配置阻止模块加载 ..."
sudo tee "$CONF_FILE" > /dev/null <<'EOF'
install esp4 /bin/false
install esp6 /bin/false
install rxrpc /bin/false
EOF
 
# 清理页缓存
echo "[4] 清理页缓存 ..."
echo 1 | sudo tee /proc/sys/vm/drop_caches
 
echo ""
echo "=== 临时修复完成 ==="
echo "* 备份目录:$BACKUP_DIR"
echo "* 阻止配置:$CONF_FILE"
echo "* 回滚命令:sudo rm $CONF_FILE && sudo mv $BACKUP_DIR/*.conf /etc/modprobe.d/"

参考资源