
Prova di concetto per CVE-2026-43494 (PinTheft): Linux LPE tramite RDS zerocopy refcount bug + io_uring fixed buffers → SUID page-cache overwrite. Solo per ricerca autorizzata.
Prova di concetto — uid=1000(raken) → uid=0(root) dopo ./sley su WSL2 (6.6.87.2-microsoft-standard-WSL2)
Prova di concetto in un singolo file per CVE-2026-43494 (PinTheft): un'escalation dei privilegi locale del kernel Linux che combina un bug di conteggio dei riferimenti RDS zerocopy con buffer fissi di io_uring per sovrascrivere la cache delle pagine di un binario SUID-root.
Disclaimer: Questo repository è per ricerche di sicurezza autorizzate, istruzione e test difensivi solo. Eseguirlo su sistemi che non possiedi o per cui non hai esplicita autorizzazione è 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 terminale stilizzata per uso in laboratorio e 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 ≈ 1024).execve del binario SUID esegue lo stub iniettato 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 nella catena pubblicasudo apt install build-essential linux-libc-dev # Debian/Ubuntu
# o pacchetto headers equivalente sulla tua distribuzione
# Patchato? (esempio — adatta per la tua distribuzione)
uname -r
grep -r CVE-2026-43494 /usr/share/doc/linux* 2>/dev/null || true
# RDS disponibile?
grep CONFIG_RDS /boot/config-$(uname -r) 2>/dev/null
lsmod | grep -E '^rds'
# io_uring abilitato?
cat /proc/sys/kernel/io_uring_disabled # aspettati 0
gcc -O2 -Wall -Wextra -o sley sley.c
Collegamento statico (opzionale, per immagini di laboratorio minimali):
gcc -O2 -static -o sley sley.c
./sley
Tutto l'output di stato va su stderr (interfaccia ANSI 256 colori, barra di avanzamento, registrazione per fasi). Assicurati che il tuo terminale supporti UTF-8 e truecolor/256 colori per l'interfaccia di disegno delle caselle.
Fasi di esempio:
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 passa al binario SUID scoperto con la prima pagina sovrascritta — producendo una shell root se la competizione e lo stato del kernel si allineano.
Su kernel patchati, host induriti o in assenza di RDS/io_uring, il PoC fallirà precocemente (nessun target SUID, errori di mmap/io_uring/socket, ecc.).
Gli advisory di sicurezza specifici per distribuzione potrebbero includere backport di correzioni — tieni traccia della coda di sicurezza del kernel del tuo fornitore.
.
├── README.md # Questo file
├── proof-of-concept.jpg # Screenshot: LPE riuscita (uid 1000 → root)
├── sley.c # PoC + interfaccia terminale in un singolo file
└── .gitignore
Questo software è fornito così com'è per ricerca e istruzione. Sei responsabile del rispetto delle leggi applicabili e dell'ottenimento dell'autorizzazione scritta prima di testare qualsiasi sistema di cui non possiedi.
MIT — consulta il file di licenza del repository se presente. Usalo in modo responsabile.
| Elemento | Dettaglio |
|---|
| CVE | CVE-2026-43494 |
| Nome pubblico | PinTheft |
| Componente | net/rds — percorso send zerocopy (rds_message_zcopy_from_user) |
| Primitiva | Doppio put_page() quando il pin della pagina fallisce → ruba refs FOLL_PIN |
| Armamento | Buffer fisso io_uring + RDS zerocopy fallito → scrittura UAF nella cache delle pagine |
| Impatto | Root locale su configurazioni vulnerabili |
| Correzione upstream | e17492979319 |
| Azione | Note |
|---|
| Patchare il kernel | Applica la correzione stabile contenente il commit e17492979319 |
| Disabilitare RDS | modprobe -r rds_tcp rds (e blocca il caricamento automatico) se non necessario |
| Limitare io_uring | kernel.io_uring_disabled=1 o 2 tramite sysctl |
| Minimo privilegio | Rimuovi binari SUID non necessari; usa container con profili induriti |
| Monitoraggio | Avvisa in caso di burst di fallimenti RDS zerocopy + pattern di registrazione buffer io_uring |