跳到主要内容

CVE-2026-46331 pedit COW 页缓存提权

CVE-2026-46331 是 Linux 内核流量控制模块 net/schedact_pedit 的本地提权漏洞。pedit 的 COW(copy-on-write)保护范围在进入 per-key 循环前预计算,而 typed key 的实际写入偏移会在运行时追加 header offset,导致写入越过 COW 保护区,落在共享的页缓存页上——与 CVE-2026-31431 Copy Fail 同属页缓存投毒类:磁盘哈希校验仍然通过,重启后自动还原。

仅限授权环境

该利用会破坏页缓存并触发内核流量控制路径,仅在授权实验环境复现,不要在生产系统运行 PoC。


概要

项目内容
CVECVE-2026-46331
组件Linux kernel net/sched act_pedit
影响范围v5.18 ~ v7.1-rc6
修复v7.1-rc7
类型页缓存破坏 / 本地提权

版本判定用 uname -a 比对内核版本区间即可,方法与 Copy Fail 的版本比对法一致。


根因:部分 COW

tcf_pedit_act() 在进入 per-key 循环之前,用 tcfp_off_max_hint 预计算 COW 范围并调用 skb_ensure_writable();而 typed key(TCP/UDP header edit)会在运行时追加 header offset,实际写入偏移超出 COW 保护范围

后果是"部分 COW":待写的内存页没有被完整触发写时复制,写入直接落在共享的页缓存页上,污染了其他使用者看到的文件内容——磁盘文件本身不变。


利用链五步

  1. unshare(CLONE_NEWUSER | CLONE_NEWNET) 在用户命名空间内获得 CAP_NET_ADMIN
  2. 在 loopback 上配置 tc clsact qdisc + pedit filter,用 IHL key 膨胀 IP 头长度,使 TCP key 的写入偏移越界。
  3. sendfile() 把 setuid-root 二进制(如 /bin/su)的页缓存页送进 socket buffer。
  4. pedit 越界写入 shellcode,覆盖 ELF 入口——只改内存中的页缓存,磁盘文件不变。
  5. execve("/bin/su") 触发 shellcode:setgid(0); setuid(0); execve("/bin/sh")

公开 exploit 的编译与执行

公开 exploit(如 GitHub 上的 packet_edit_meme 实现)静态编译后传输到目标执行:

make CC=gcc CFLAGS="-O2 -Wall -static"

静态编译避免目标缺少运行时依赖。

非交互会话注意:exploit 通过 execve 把自身进程替换成 root shell,在没有 TTY 的非交互 SSH 会话里,这个 shell 会立即退出。用 stdin 管道喂命令稳定拿输出:

echo "id; cat /root/root.txt" | ./packet_edit_meme

PIE 适配

/bin/su 为 PIE 时,第一个只读 LOAD 段在偏移 0,可执行段在 0x3000,超出 pedit 511 字节写入窗口能覆盖的范围。此时 exploit 走 PIE 适配路径:

  1. 给 PT_NOTE 对应 phdr 加 PF_X 标志。
  2. shellcode 写入 PT_NOTE 区域。
  3. 改写入口跳转,让执行流落到 shellcode。

与 Copy Fail 的对比

维度CVE-2026-46331 pedit COWCVE-2026-31431 Copy Fail
关键组件act_pedit / tcAF_ALG / algif_aead / splice
能力来源用户命名空间内 CAP_NET_ADMIN非特权 socket 操作
污染对象页缓存(setuid 二进制入口)页缓存(4 字节受控写)
磁盘影响不变不变
恢复方式重启 / 缓存回收重启 / 缓存回收

两者共同点:磁盘完整性校验(如 md5sum)依然通过,检测不能只看磁盘。


防御建议

  1. 升级至 v7.1-rc7 及以上或发行版修复版内核。
  2. 收紧非特权用户命名空间:设置 user.max_user_namespaces=0 等缓解,阻断 CAP_NET_ADMIN 获取路径。
  3. 监控 setuid 二进制完整性:结合执行期完整性校验,而不是只依赖磁盘哈希。
  4. 审计非预期进程创建 tc qdisc / filter 的行为。
  5. 多用户与容器节点优先排期内核补丁,缩短暴露窗口。