
CVE-2026-46331 e CVE-2026-43503
3 exploit di escalation dei privilegi locali del kernel Linux. Stessa classe di bug di Dirty COW e Dirty Pipe. Shell di root in pochi secondi. Tutte le principali distro colpite.
Tutti e tre corrompono la page cache del kernel — la copia in memoria dei file che i processi leggono ed eseguono effettivamente. Il file su disco non viene mai toccato. Gli strumenti di integrità dei file non vedono nulla. execve("/usr/bin/su") carica dalla cache → esegue il tuo shellcode → root.
| Exploit | CVE | Meccanismo | Tempo per root | Righe |
|---|---|---|---|---|
| Dirty Pedit | CVE-2026-46331 | TC pedit COW gap (wraparound di u32) | < 1 secondo | 275 |
| skb_shift | CVE-2026-43503 | Perdita del flag di trasferimento frag in TCP SACK | ~10 secondi | 500 |
| GRO Flag Loss | CVE-2026-43503 | Perdita del flag di trasferimento frag nella coalescenza GRO | ~10 secondi | 550 |
Tutti e tre: da utente non privilegiato → root. Nessun permesso speciale. Solo user namespaces.
Ogni exploit in questa repo segue lo stesso schema:
1. Get page-cache pages into a kernel buffer (splice)
2. Bypass the copy-on-write defense
3. Write in-place → read-only file corrupted in memory
Ciò che cambia è COME viene aggirata la difesa e CHI esegue la scrittura:
2016 Dirty COW COW race via mmap + fork
2022 Dirty Pipe Stale PIPE_BUF_FLAG_CAN_MERGE in splice
2026 Copy Fail AF_ALG in-place AEAD on page-cache scatterlist
2026 Dirty Frag ESP skip_cow on splice'd frags (missing flag)
2026 Fragnesia skb_try_coalesce drops SHARED_FRAG flag
2026 Dirty Pedit ← TC pedit COW gap, no crypto needed
2026 skb_shift ← TCP SACK drops SHARED_FRAG, ESP writes
2026 GRO Flag Loss ← GRO merge drops SHARED_FRAG, ESP writes
Configurazioni predefinite. Nessun hardening necessario per essere vulnerabili. Se esegui Linux, eri interessato.
skb_shift e GRO usano entrambi la stessa tecnica di sfruttamento: perdere il flag SKBFL_SHARED_FRAG, poi lasciare che la crittografia ESP faccia XOR nelle pagine della page cache un byte alla volta usando una tabella di lookup IV precalcolata.
Dirty Pedit è una bestia completamente diversa:
skb_store_bits.skb_ensure_writable tramite wraparound di interi.# Build all three
cd dirty_pedit && gcc -static -O2 -o exploit exploit.c && cd ..
cd skb_shift && gcc -static -O2 -o exploit exploit.c && cd ..
cd gro && gcc -static -O2 -o exploit exploit.c && cd ..
Ogni exploit è un singolo file C autonomo. Nessuna dipendenza oltre a libc.
# Any of the three (as unprivileged user):
./exploit
# → root shell
Richiede: kernel Linux nell'intervallo di versioni interessate + CONFIG_USER_NS=y (predefinito su tutte le principali distro).
[*] Dirty Pedit — Local Privilege Escalation
[*] uid=1000 pid=42
[*] Victim line at offset 186: nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
[*] Injecting user 'a' (uid=0, no password) over victim line...
[+] User 'a' injected with uid=0!
[+] Running: su a
# id
uid=0(root) gid=0(root) groups=0(root)
[*] uid=1000 euid=1000
[*] IV table pre-computed (256 entries)
[*] Writing 192 bytes to /usr/bin/su...
[120] 0x00→0x48 ... OK
[121] 0x00→0x31 ... OK
[*] Write complete: 192/192
[!] /usr/bin/su page cache overwritten!
# whoami
root
Tutte le vulnerabilità sono state divulgate responsabilmente al team di sicurezza del kernel Linux e ai maintainer di rete. Le patch sono state integrate a monte (upstream) e backportate nei rami stabili.
899ee91156e548f6a5356a33Questi exploit sono pubblicati a scopo educativo e difensivo dopo che le patch erano disponibili. La corruzione della page cache è solo in memoria — un riavvio o echo 1 > /proc/sys/vm/drop_caches ripristina i file originali.
Rajat Gupta — Sicurezza Offensiva @ Qualcomm
MIT
| Exploit | Difesa aggirata | Scrittore |
|---|
| Dirty Pedit | skb_ensure_writable (wraparound di u32 → COW parziale) | skb_store_bits (scrittura diretta di 4 byte) |
| skb_shift | flag SKBFL_SHARED_FRAG perso durante TCP SACK | decrittazione ESP AES-GCM (1 byte per pacchetto) |
| GRO Flag Loss | flag SKBFL_SHARED_FRAG perso durante l'unione GRO | decrittazione ESP AES-GCM (1 byte per pacchetto) |
| Exploit | Introdotto | Corretto | Distro interessate |
|---|
| Dirty Pedit | v5.18 (maggio 2022) | v7.1-rc7 | Ubuntu, RHEL, Debian, Fedora, SUSE |
| skb_shift | v3.9 (2013) | v7.1-rc5 | Ogni distro per 13 anni |
| GRO Flag Loss | v3.9 (2013) | v7.1-rc5 | Ogni distro per 13 anni |
| Proprietà | Dirty Pedit | skb_shift | GRO |
|---|
| Privilegi | Nessuno (userns) | Nessuno (userns) | Nessuno (userns) |
| Accesso ai file | O_RDONLY | O_RDONLY | O_RDONLY |
| Crittografia necessaria | No | Sì (AES-GCM) | Sì (AES-GCM) |
| Controllo di scrittura | 4 byte/pacchetto | 1 byte/pacchetto | 1 byte/pacchetto |
| Affidabilità | Deterministica | Deterministica | Probabilistica (retry) |
| Escape container K8s | No (nessuna veth necessaria) | No | Sì (veth+GRO di default) |
| Superficie d'attacco | geneve + TC | loopback + espintcp | veth + ESP-in-UDP |