
Exploit di escalation dei privilegi del kernel Linux per CVE-2026-46242, una race condition use-after-free in epoll, con root affidabile al 99% su desktop, server e dispositivi Android.

Un processo non privilegiato che scala a root su Google kernelCTF.
Bad Epoll (CVE-2026-46242) è una use-after-free da race condition nel sottosistema
epoll del kernel Linux. Questo bug consente a un processo non privilegiato di diventare root, non solo su desktop e server Linux ma anche su dispositivi Android.
Bad Epoll è stato segnalato e sfruttato da Jaeyoung Chung come invio 0-day a Google kernelCTF, che premia un exploit per il kernel Linux con $71.337+.
[!NOTE] L'IA di Anthropic, Mythos, ha trovato un altro bug di race nello stesso codice di epoll ma non ha visto Bad Epoll.
Un bug raro in grado di dare root su Android. La maggior parte dei bug di escalazione dei privilegi su Linux non può assolutamente dare root su Android. Copy Fail e le sue varianti, ad esempio, richiedono moduli che Android non carica mai. Delle circa 130 vulnerabilità sfruttate su kernelCTF di Google, solo una decina sono candidate per dare root su Android. Bad Epoll è una di queste.
Nessun kill-switch. Copy Fail e le sue varianti possono essere neutralizzati scaricando i loro moduli vulnerabili, ma epoll non ha questa opzione. È una funzionalità fondamentale del kernel su cui si basano il sistema operativo, i servizi di rete e i browser. L'unico modo per risolverlo è applicare la patch.
Finestra di race minuscola, ma l'attacco è affidabile al 99%. La finestra di race del bug copre solo circa sei istruzioni, e un tentativo normale quasi mai la centra. L'exploit allarga quella finestra ed esegue un ciclo di ripetizione che non manda mai in crash il kernel. Il risultato è un exploit affidabile al 99%, come descrive la panoramica dell'attacco qui sotto.
Un singolo commit del 2023 ha introdotto due race condition separate nel codice di epoll, composto in tutto da circa 2.500 righe. Entrambe si sono rivelate bug critici che possono portare all'escalation dei privilegi.
La prima è stata trovata dall'IA Mythos di Anthropic e segnalata come CVE-2026-43074. Quel risultato è di per sé impressionante, perché i bug di race nel kernel sono noti per essere difficili da trovare. Ha dimostrato la capacità di un modello AI di frontiera di individuare bug di race. Un ricercatore indipendente ha in seguito inviato un exploit 1-day relativo a quel bug a kernelCTF.
L'altra race è Bad Epoll, quella sfuggita a Mythos. Dato che Mythos ha trovato il primo bug in questo piccolo percorso di codice di epoll, probabilmente ha esaminato la stessa area con una profondità significativa. Non possiamo sapere esattamente perché gli sia sfuggito Bad Epoll, ma due fattori probabilmente ne hanno reso difficile la scoperta.
La finestra di race è minuscola. Copre solo circa sei istruzioni, quindi l'esatta interleaving dei thread è difficile da immaginare anche osservando il codice vulnerabile.
C'erano poche prove a runtime. Dopo la correzione di CVE-2026-43074, la use-after-free di Bad Epoll di solito non attiva KASAN, il principale rilevatore di errori di memoria del kernel. Senza quel segnale, Mythos potrebbe non aver avuto abbastanza sicurezza per segnalarlo come un bug reale.
Anche correggere Bad Epoll è stato difficile. La prima patch dei manutentori non ha risolto completamente il problema, e una patch corretta è arrivata solo due mesi dopo la prima segnalazione del bug. È un lasso di tempo lungo per un kernel che di solito gestisce i problemi di sicurezza con urgenza.
Nel complesso, Bad Epoll mostra quanto le race condition siano difficili in ogni fase. Sono difficili da trovare persino per un modello di frontiera, difficili da correggere correttamente e, come mostra la sezione successiva, difficili da sfruttare in modo affidabile. Suggerisce inoltre una direzione di ricerca sulle vulnerabilità che vale ancora la pena esplorare in presenza di modelli AI di frontiera: scoprire il reale impatto sulla sicurezza dietro condizioni temporali ristrette e prove deboli.
Ecco una panoramica di alto livello dell'attacco, per i curiosi.
Due oggetti epoll collegati. Chiuderli entrambi contemporaneamente innesca la race.
Due dei percorsi di chiusura di epoll vengono eseguiti contemporaneamente e collidono. Uno libera un oggetto mentre l'altro vi sta ancora scrivendo, e questa è la use-after-free (UAF).
La finestra di race e come l'exploit la pilota.
L'exploit usa quattro oggetti epoll raggruppati in due coppie. Una coppia innesca la race, mentre l'altra diventa la vittima. Da lì, l'exploit trasforma la scrittura UAF di 8 byte in una UAF su un oggetto file e usa un attacco cross-cache per controllare completamente il contenuto del file.
Trasformare il bug in una lettura arbitraria della memoria del kernel tramite /proc/self/fdinfo.
Con quel controllo, l'exploit ottiene una lettura arbitraria della memoria del kernel tramite /proc/self/fdinfo. Infine,
dirotta il flusso di controllo ed esegue una catena ROP per ottenere una shell root.
Maggiori dettagli sono disponibili nel writeup completo dell'exploit e nel codice.
Poiché epoll non può essere disabilitato, Bad Epoll non ha una semplice soluzione alternativa. L'unico rimedio è applicare la patch.
a6dc643c6931,
oppure il backport della tua distribuzione appena disponibile.Bad Epoll è stato introdotto da
58c9b016e128 (2023-04-08)
e corretto da
a6dc643c6931 (2026-04-24).
Molte distribuzioni Linux potrebbero essere interessate se utilizzano kernel basati su v6.4 o versioni successive e non hanno ancora applicato il backport della correzione. Controlla gli aggiornamenti di sicurezza del kernel della tua distribuzione per un backport del commit di correzione sopra indicato. I kernel più vecchi basati su v6.1 non sono interessati perché il bug è stato introdotto in v6.4.
L'exploit attuale è scritto per i seguenti target di Google kernelCTF.
lts-6.12.67 (LTS), affidabile al 99%cos-121-18867.294.100 (COS), affidabile al 98%L'exploit per Android è ancora in lavorazione.
Il nome segue la serie "Bad" di bug del kernel in grado di dare root su Android, le cui voci precedenti includono Bad Binder, Bad IO_uring, e Bad Spin. Bad Epoll è la controparte per epoll.
Questa pagina è la versione breve. Puoi trovare l'analisi completa della causa principale, il writeup dell'exploit e il codice dell'exploit nei seguenti link.
Bad Epoll è stato segnalato e sfruttato da Jaeyoung Chung.
Un enorme ringraziamento al nostro gruppo di ricerca, CompSec Lab, e in particolare a Eulgyu Kim, Woohyuk Choi, Dae R. Jeong e al mio advisor Byoungyoung Lee, per la loro guida e il loro supporto.
| Data | Evento |
|---|
| 2023-04-08 | Il bug è stato introdotto in epoll (commit 58c9b016e128). |
| 2026-02-17 | Abbiamo segnalato il bug a [email protected]. |
| 2026-02-17 | I manutentori hanno proposto un prototipo di patch, ma non era la correzione giusta e la discussione si è poi arenata. |
| 2026-04-02 | La correzione per il bug trovato da Mythos (CVE-2026-43074) è arrivata in mainline. |
| 2026-04-22 | Abbiamo risegnalato il problema rimanente. |
| 2026-04-24 | La correzione per questo bug è arrivata in mainline (commit a6dc643c6931). |