
Proof-of-concept per CVE-2026-43494 (PinTheft): LPE su Linux tramite bug di refcount zerocopy RDS + buffer fissi io_uring → sovrascrittura della cache di pagina SUID. Solo 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 locali del kernel Linux che combina un bug di conteggio dei riferimenti zerocopy RDS con buffer fissi di io_uring per sovrascrivere la cache delle pagine di un binario SUID-root.
Liberatoria: Questo repository è destinato esclusivamente a ricerca sulla sicurezza autorizzata, formazione e test difensivi. Eseguirlo su sistemi di cui non si è proprietari o senza esplicita autorizzazione è illegale e non etico. Gli autori declinano ogni responsabilità per uso improprio.
| 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 → ruba i riferimenti FOLL_PIN |
| Armamento | buffer fisso io_uring + zerocopy RDS fallito → scrittura UAF nella cache delle pagine |
| Impatto | Root locale su configurazioni vulnerabili |
| Fix upstream | e17492979319 |
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 pagina anonima] --> B[io_uring: registra buffer fisso]
B --> C[Clona tabella buffer sul 2° ring]
C --> D[1024× invii zerocopy RDS falliti]
D --> E[Drena bias FOLL_PIN / ruba riferimenti]
E --> F[munmap → pagina liberata]
F --> G[Pagina del binario SUID reclamata nella cache delle pagine]
G --> H[Puntatore obsoleto io_uring scrive stub ELF]
H --> I[exec SUID → shell root]
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 utilizzata dalla catena pubblicasudo apt install build-essential linux-libc-dev # Debian/Ubuntu
# o pacchetto header 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 # attendi 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 a 256 colori, barra di avanzamento, log per fasi). Assicurati che il terminale supporti UTF-8 e colori veri/256 colori per l'interfaccia con caratteri per cornici.
Fasi di esempio:
PHASE 1 │ Ricognizione
PHASE 2 │ Configurazione memoria e io_uring
PHASE 3 │ Furto di riferimento pin (zerocopy RDS)
PHASE 4 │ Sovrascrittura cache pagine e privesc
Su una configurazione sfruttata con successo, la catena si completa e passa al binario SUID scoperto con la prima pagina sovrascritta — ottenendo una shell root se la race e lo stato del kernel si allineano.
Su kernel patchati, host rinforzati o in assenza di RDS/io_uring, il PoC fallirà presto (nessun target SUID, errori di mmap/io_uring/socket, ecc.).
| Azione | Note |
|---|---|
| Patcha il kernel | Applica il fix stabile contenente il commit e17492979319 |
| Disabilita RDS | modprobe -r rds_tcp rds (e blocca il caricamento automatico) se non necessario |
| Limita io_uring | kernel.io_uring_disabled=1 o 2 tramite sysctl |
| Minimo privilegio | Rimuovi i binari SUID non necessari; usa contenitori con profili rinforzati |
| Monitora | Allerta su burst di fallimenti zerocopy RDS e pattern di registrazione dei buffer io_uring |
Gli advisory di sicurezza specifici per distribuzione possono includere patch backportate — 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 in un unico file + interfaccia terminale
└── .gitignore
Questo software è fornito così com'è per scopi di ricerca e formazione. Sei responsabile del rispetto delle leggi applicabili e dell'ottenimento dell'autorizzazione scritta prima di testare qualsiasi sistema di cui non sei proprietario.
MIT — vedi il file di licenza del repository se aggiunto. Usa responsabilmente.