
Esta es una prueba de concepto para CVE-2025-38352, una vulnerabilidad en la implementación de temporizadores POSIX de CPU en el kernel de Linux. El Boletín de Android de septiembre de 2025 menciona que esta vulnerabilidad ha sido utilizada en una explotación limitada y selectiva en la naturaleza.
Este repositorio solo contiene la prueba de concepto que desencadena la vulnerabilidad.
Desde entonces, he escrito un exploit completo para esta vulnerabilidad. Puedes encontrar los detalles en el enlace de abajo.
https://github.com/farazsth98/chronomaly

El PoC realmente depende de cómo se consume el tiempo de CPU por la llamada al sistema getpid.
Con ese fin, me he asegurado de que el PoC sea lo más independiente del sistema posible; es decir, debería funcionar en tu sistema incluso si la llamada al sistema getpid usa drásticamente más/menos tiempo que en mi sistema.
Este es un PoC para CVE-2025-38352, una vulnerabilidad de condición de carrera en la implementación de temporizadores de CPU POSIX del kernel de Linux. El Boletín de Android de septiembre de 2025 menciona que esta vulnerabilidad ha sido utilizada en explotación limitada y dirigida en la naturaleza.
Fue escrito para LTS 6.12.33 y requiere que CONFIG_POSIX_CPU_TIMERS_TASK_WORK esté desactivado en la configuración del kernel. Además, también activé la preferencia completa (CONFIG_PREEMPT=y) ya que eso es lo que usa el kernel de Android.
Una vez que se gana la condición de carrera, conduce a un use-after-free de un struct k_itimer.
Para más información sobre cómo configurar el entorno de pruebas, consulta la publicación del blog enlazada arriba, específicamente la sección "Testing Environment TL;DR".
NOTA: No se requieren parches para que este PoC funcione (pongo esto aquí porque mi último PoC necesitaba un mdelay de 500 ms 😅).
El PoC siempre se ha activado para mí dentro de 100 reintentos (nunca ha llegado a más de 60 reintentos). La fiabilidad se puede mejorar en algunos lugares, en mi opinión, pero trabajaré en eso más tarde.
El archivo profiler_patch.diff contiene un parche para aplicar algún código de perfilado a handle_posix_cpu_timers(). Es útil para averiguar cómo extender la ventana de la condición de carrera, ya que imprime la cantidad de tiempo de ejecución utilizado por la iteración de la lista firing aquí.
Compila con el Makefile proporcionado y simplemente ejecútalo con /poc.
Si quieres ejecutar el perfilador, compílalo de la misma manera que el PoC.
Contáctame en Twitter o donde sea si tienes alguna pregunta.