
CVE-2026-46331 act_pedit Page-Cache-Korruptions-Exploit, mit Alpine-PIE-Fix
net/sched act_pedit partielle-COW Page-Cache-Korruption (Verursacher 899ee91156e5, vorhanden v5.18 .. gefixt v7.1-rc7). packet_edit_meme.c wandelt dies in einen unprivilegierten lokalen Root-Zugriff um: Ein userns CAP_NET_ADMIN Kindprozess überschreibt die zwischengespeicherten ELF-Metadaten einer setuid-root-Binärdatei mit setgid(0)+setuid(0)+execve("/bin/sh") Shellcode.
make
./packet_edit_meme
./packet_edit_meme --ubuntu # AppArmor-gated Ubuntu: aa-exec bypass first
| Distribution | Kernel | Flagge | Ergebnis |
|---|---|---|---|
| RHEL 10.0 | 6.12.0 | (none) | ROOT |
| Debian 13 trixie | 6.12.90+deb13.1 | (none) | ROOT |
| Ubuntu 24.04.4 | 6.17.0-22 | --ubuntu | ROOT |
| Alpine edge | 7.0.10-0-stable | (none) | ROOT |
Alpine Linux (musl) kompiliert PIE-Executables, bei denen das ausführbare PT_LOAD-Segment ab einem Dateioffset ≥ 0x1000 beginnt – jenseits des pedit-TCP-Header-Offset-Limits von 511 Bytes. Der ELF-Header und die Programm-Header belegen den ersten schreibgeschützten PT_LOAD (Dateioffset 0). Dieser angepasste Exploit:
Macht Seite 0 ausführbar, indem PF_X zum p_flags-Feld des ersten PT_LOAD am Dateioffset 0xB4 (phdr[2] + 4) hinzugefügt wird.
Teilt den Shellcode auf, um eine Beschädigung kritischer LOAD-Programm-Header zu vermeiden:
e_entry → 0x28 (ein e_shoff-Feld, das der Kernel zur Ausführungszeit nicht prüft).0x28: ein 5-Byte jmp 0x1C8.0x1C8, der PT_NOTE-Programm-Header überschreibt, die der Kernel während des Exec ignoriert.Erkennt das Ziel automatisch zur Laufzeit über find / -xdev -type f -perm -4000 -user root anstatt Pfade fest zu codieren. Die erste weltweit lesbare setuid-root-ELF-Binärdatei, die gefunden wird, wird verwendet – Alpine's /bin/su (-> /bin/bbsuid, ---s--x--x) wird automatisch übersprungen, da sie nicht geöffnet werden kann.
Ubuntu verweigert unconfined unprivileged userns über zwei 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 führt einen Neu-Exec über aa-exec -p {trinity,chrome,flatpak} durch (Profile, die eine userns,-Regel enthalten).
| Ubuntu | userns | unconfined | aa-exec-Bypass |
|---|---|---|---|
| 24.04.4 | 1 | 0 | WORKS |
| 26.04 | 1 | 1 | CLOSED |
Ein statischer x86_64-linux-gnu-Cross-Compiler:
# Debian / Ubuntu
apt install gcc-x86-64-linux-gnu
# Alpine
apk add gcc musl-dev