
Proof-of-concept per CVE-2026-43494 (PinTheft): escalatione locale dei privilegi nel kernel Linux che sfrutta un bug di conteggio dei riferimenti in RDS zerocopy con buffer fissi di io_uring per sovrascrivere la cache delle pagine del binario SUID.
Prova di concetto — uid=1000(raken) → uid=0(root) dopo ./sley su WSL2 (6.6.87.2-microsoft-standard-WSL2)
Proof-of-concept monofile per CVE-2026-43494 (PinTheft): un'escalation dei privilegi locale del kernel Linux che combina un bug di conteggio dei riferimenti nella zerocopy RDS con i buffer fissi di io_uring per sovrascrivere la page cache di un binario SUID root.
Disclaimer: Questo repository è destinato esclusivamente a ricerca di sicurezza autorizzata, formazione e test difensivi. Eseguirlo su sistemi di cui non sei proprietario o per cui non hai esplicita autorizzazione ai test è illegale e non etico. Gli autori non si assumono alcuna responsabilità per un uso improprio.
La ricerca pubblica originale e il PoC sono stati pubblicati dal team V12 Security (Aaron Esau). SLEY è una reimplementazione indipendente e compatta con un'interfaccia di terminale stilizzata per uso in laboratorio e per l'apprendimento.
flowchart LR
A[mmap anonymous page] --> B[io_uring: register fixed buffer]
B --> C[Clone buffer table to 2nd ring]
C --> D[1024× failing RDS zerocopy sends]
D --> E[Drain FOLL_PIN bias / steal refs]
E --> F[munmap → page freed]
F --> G[SUID binary page reclaimed in page cache]
G --> H[Stale io_uring ptr writes ELF stub]
H --> I[exec SUID → root shell]su, mount, passwd, …).FOLL_PIN bias ≈ 1024).execve del binario SUID esegue la stub iniettata come root.CONFIG_RDS=y e CONFIG_RDS_TCP=yCONFIG_IO_URING=y e kernel.io_uring_disabled = 0rds / rds_tcp caricati (o caricabili automaticamente da utenti non privilegiati)IORING_REGISTER_CLONE_BUFFERS usata dalla catena pubblicasudo apt install build-essential linux-libc-dev # Debian/Ubuntu
# or equivalent headers package on your distro
# Patched? (example — adjust for your distro)
uname -r
grep -r CVE-2026-43494 /usr/share/doc/linux* 2>/dev/null || true
# RDS available?
grep CONFIG_RDS /boot/config-$(uname -r) 2>/dev/null
lsmod | grep -E '^rds'
# io_uring enabled?
cat /proc/sys/kernel/io_uring_disabled # expect 0
gcc -O2 -Wall -Wextra -o sley sley.c
Linking statico (opzionale, per immagini di laboratorio minime):
gcc -O2 -static -o sley sley.c
./sley
Tutto l'output di stato va su stderr (interfaccia ANSI a 256 colori, barra di avanzamento, log a fasi). Assicurati che il tuo terminale supporti UTF-8 e truecolor/256 colori per l'interfaccia a caratteri box-drawing.
Esempio di fasi:
PHASE 1 │ Reconnaissance
PHASE 2 │ Memory & io_uring setup
PHASE 3 │ Pin reference theft (RDS zerocopy)
PHASE 4 │ Page cache overwrite & privesc
Su una configurazione sfruttata con successo, la catena si completa e cede il controllo al binario SUID individuato, con la prima pagina sovrascritta — producendo una root shell se la race e lo stato del kernel si allineano.
Su kernel patchati, host induriti o in assenza di RDS/io_uring, il PoC fallirà subito (nessun target SUID, errori mmap/io_uring/socket, ecc.).
Gli advisory di sicurezza specifici per distribuzione possono includere patch backportate — segui la coda di sicurezza del kernel del tuo fornitore.
.
├── README.md # This file
├── proof-of-concept.jpg # Screenshot: successful LPE (uid 1000 → root)
├── sley.c # Single-file PoC + terminal UI
└── .gitignore
Questo software è fornito così com'è per ricerca e formazione. Sei responsabile del rispetto delle leggi applicabili e dell'ottenimento di un'autorizzazione scritta prima di testare qualsiasi sistema che non possiedi.
MIT — consulta il file di licenza del repository se aggiunto. Usa in modo responsabile.
| Elemento | Dettaglio |
|---|
| CVE | CVE-2026-43494 |
| Nome pubblico | PinTheft |
| Componente | net/rds — percorso di invio zerocopy (rds_message_zcopy_from_user) |
| Primitiva | Doppia put_page() quando il pin della pagina fallisce → furto dei ref FOLL_PIN |
| Weaponizzazione | buffer fisso io_uring + zerocopy RDS fallita → scrittura UAF nella page cache |
| Impatto | Root locale su configurazioni vulnerabili |
| Correzione upstream | e17492979319 |
| Azione | Note |
|---|
| Patch del kernel | Applicare la correzione stabile che include il commit e17492979319 |
| Disabilitare RDS | modprobe -r rds_tcp rds (e bloccare il caricamento automatico) se non necessario |
| Limitare io_uring | kernel.io_uring_disabled=1 o 2 tramite sysctl |
| Minimo privilegio | Rimuovere i binari SUID non necessari; usare container con profili induriti |
| Monitoraggio | Avvisi su raffiche di errori zerocopy RDS + pattern di registrazione dei buffer io_uring |