本仓库仅包含触发该漏洞的概念验证代码。
我已为此漏洞编写了一个完整的利用程序。你可以在下面的链接中找到详细信息。
https://github.com/farazsth98/chronomaly

PoC 很大程度上依赖于 getpid 系统调用消耗的 CPU 时间。
为此,我尽量使 PoC 与系统无关——也就是说,即使你的系统上 getpid 系统调用消耗的时间比我的系统多得多或少得多,它也应该能工作。
这是 CVE-2025-38352 的 PoC,一个存在于 Linux 内核 POSIX CPU 定时器实现中的竞态条件漏洞。2025年9月的 Android 公告提到该漏洞已被用于有限、有针对性的野外利用。
它是针对 LTS 6.12.33 编写的,并且要求在内核配置中关闭 CONFIG_POSIX_CPU_TIMERS_TASK_WORK。此外,我还开启了完全抢占(CONFIG_PREEMPT=y),因为 Android 内核正是使用此配置。
一旦竞态条件获胜,就会导致 struct k_itimer 的释放后使用(use-after-free)。
有关设置测试环境的更多信息,请参考上面链接的博客文章,特别是“测试环境 TL;DR”部分。
注意:此 PoC 不需要任何补丁(在此说明是因为我上一个 PoC 基本上需要一个500毫秒的 mdelay 😅)。
PoC 在我这边始终能在100次重试内触发(实际上从未超过60次重试)。在我看来,可靠性可以在几个地方进一步提高,但我以后会处理。
profiler_patch.diff 文件包含一个补丁,用于在 handle_posix_cpu_timers() 中应用一些性能分析代码。它有助于确定如何延长竞争窗口,因为它会打印出 此处 firing 列表迭代所消耗的执行时间。
使用提供的 Makefile 编译,然后运行 /poc。
如果你想运行性能分析器,请像编译 PoC 一样编译它。
如果你有任何问题,可以在 Twitter 或其他地方联系我。