
Isto é uma prova de conceito para o CVE-2025-38352, uma vulnerabilidade na implementação dos temporizadores POSIX de CPU do kernel Linux. O Boletim Android de Setembro de 2025 menciona que esta vulnerabilidade foi utilizada em exploração limitada e direcionada em ambiente real.
Este repositório contém apenas a prova de conceito que aciona a vulnerabilidade.
Desde então, escrevi um exploit completo para esta vulnerabilidade. Você pode encontrar os detalhes no link abaixo.
https://github.com/farazsth98/chronomaly

O PoC realmente depende de como o tempo de CPU é consumido pela chamada de sistema getpid.
Para esse fim, garanti que o PoC seja o mais independente de sistema possível - ou seja, deve funcionar no seu sistema mesmo que a chamada de sistema getpid consuma drasticamente mais/menos tempo do que no meu sistema.
Este é um PoC para CVE-2025-38352, uma vulnerabilidade de condição de corrida na implementação de temporizadores de CPU POSIX do kernel Linux. O Boletim Android de setembro de 2025 menciona que essa vulnerabilidade foi usada em exploração limitada e direcionada na natureza.
Foi escrito para LTS 6.12.33 e requer que CONFIG_POSIX_CPU_TIMERS_TASK_WORK esteja desativado na configuração do kernel. Além disso, também ativei a preempção total (CONFIG_PREEMPT=y) pois é isso que o kernel Android usa.
Uma vez que a corrida é vencida, leva a um use-after-free de um struct k_itimer.
Para mais informações sobre como configurar o ambiente de teste, consulte a postagem do blog vinculada acima, especificamente a seção "Testing Environment TL;DR".
NOTA: Nenhum patch é necessário para que este PoC funcione (colocando isso aqui porque meu último PoC meio que precisava de um mdelay de 500ms 😅).
O PoC sempre disparou para mim dentro de 100 tentativas (nunca chegou a mais de 60 tentativas). A confiabilidade pode ser melhorada em alguns lugares, na minha opinião, mas vou trabalhar nisso mais tarde.
O arquivo profiler_patch.diff contém um patch para aplicar algum código de perfilamento em handle_posix_cpu_timers(). É útil para descobrir como estender a janela de corrida, pois imprime a quantidade de tempo de execução usada pela iteração da lista firing aqui.
Compile com o Makefile fornecido e execute com /poc.
Se quiser executar o profiler, compile-o da mesma forma que o PoC.
Entre em contato comigo no Twitter ou em qualquer outro lugar se tiver alguma dúvida.