
Questa è una proof of concept per CVE-2025-38352, una vulnerabilità nell'implementazione dei timer CPU POSIX del kernel Linux. Il bollettino Android di settembre 2025 menziona che questa vulnerabilità è stata utilizzata in uno sfruttamento limitato e mirato nel mondo reale.
Questo repository contiene solo la proof-of-concept che innesca la vulnerabilità.
Da allora ho scritto un exploit completo per questa vulnerabilità. Puoi trovare i dettagli nel link qui sotto.
https://github.com/farazsth98/chronomaly

La PoC dipende molto da come il tempo della CPU viene consumato dalla system call getpid.
A tal fine, ho cercato di rendere la PoC il più indipendente possibile dal sistema — cioè, dovrebbe funzionare sul tuo sistema anche se la system call getpid consuma molto più/meno tempo rispetto al mio.
Questa è una PoC per CVE-2025-38352, una vulnerabilità di race condition nell'implementazione dei timer POSIX della CPU nel kernel Linux. Il bollettino Android di settembre 2025 menziona che questa vulnerabilità è stata sfruttata in modo limitato e mirato nel mondo reale.
È stata scritta per LTS 6.12.33 e richiede che CONFIG_POSIX_CPU_TIMERS_TASK_WORK sia disabilitato nella configurazione del kernel. Inoltre, ho anche attivato la prelazione completa (CONFIG_PREEMPT=y) poiché è quella che usa il kernel Android.
Una volta vinta la race, si arriva a un use-after-free di una struct k_itimer.
Per maggiori informazioni sulla configurazione dell'ambiente di test, fai riferimento all'articolo del blog linkato sopra, in particolare alla sezione "Testing Environment TL;DR".
NOTA: non sono necessarie patch affinché questa PoC funzioni (lo metto qui perché la mia ultima PoC richiedeva un mdelay da 500ms 😅).
La PoC è sempre scattata entro 100 tentativi per me (non ha mai effettivamente superato i 60 tentativi). L'affidabilità può essere migliorata in alcuni punti IMO, ma ci lavorerò più avanti.
Il file profiler_patch.diff contiene una patch per applicare del codice di profilazione a handle_posix_cpu_timers(). È utile per capire come estendere la finestra della race, poiché stampa la quantità di tempo di esecuzione usata dall'iterazione della lista firing qui.
Compila con il Makefile fornito e basta eseguirlo con /poc.
Se vuoi eseguire il profiler, compilalo nello stesso modo della PoC.
Contattami su Twitter o altrove se hai domande.