
이것은 Linux 커널의 POSIX CPU 타이머 구현에 존재하는 취약점인 CVE-2025-38352에 대한 개념 증명입니다. 2025년 9월 Android 보안 게시판에서는 이 취약점이 실제 환경에서 제한적이고 표적화된 악용에 사용되었음을 언급합니다.
이 저장소는 취약점을 트리거하는 개념 증명(PoC) 코드만 포함하고 있습니다.
이후 이 취약점에 대한 전체 익스플로잇을 작성했습니다. 자세한 내용은 아래 링크에서 확인할 수 있습니다.
https://github.com/farazsth98/chronomaly

이 PoC는 getpid 시스템 호출이 CPU 시간을 소비하는 방식에 크게 의존합니다.
그렇기 때문에 PoC를 가능한 한 시스템에 독립적으로 만들기 위해 노력했습니다. 즉, getpid 시스템 호출이 제 시스템보다 훨씬 많거나 적은 시간을 사용하더라도 여러분의 시스템에서 작동해야 합니다.
CVE-2025-38352는 Linux 커널의 POSIX CPU 타이머 구현에 존재하는 경쟁 조건(race condition) 취약점입니다. 2025년 9월 Android Bulletin에서는 이 취약점이 실제 환경에서 제한적이고 표적화된 공격에 사용되었다고 언급합니다.
이 PoC는 LTS 6.12.33용으로 작성되었으며, 커널 구성에서 CONFIG_POSIX_CPU_TIMERS_TASK_WORK가 꺼져 있어야 합니다. 또한 Android 커널이 사용하는 것과 동일하게 전체 선점(preemption)을 켰습니다(CONFIG_PREEMPT=y).
경쟁 조건에서 승리하면 struct k_itimer의 use-after-free로 이어집니다.
테스트 환경 구성에 대한 자세한 내용은 위에 링크된 블로그 게시물, 특히 "Testing Environment TL;DR" 섹션을 참조하세요.
참고: 이 PoC가 작동하는 데 패치는 필요하지 않습니다 (마지막 PoC에 500ms mdelay가 필요했기 때문에 여기에 적어둡니다 😅).
이 PoC는 저에게 항상 100회 재시도 이내에 트리거되었습니다 (실제로 60회를 넘긴 적이 없습니다). 제 생각에 몇몇 부분에서 신뢰성을 개선할 수 있지만, 그것은 나중에 작업할 예정입니다.
profiler_patch.diff 파일에는 handle_posix_cpu_timers()에 일부 프로파일링 코드를 적용하는 패치가 포함되어 있습니다. 이는 여기의 firing 목록 반복에 사용된 실행 시간을 출력하므로 경쟁 조건 창(race window)을 확장하는 방법을 파악하는 데 유용합니다.
제공된 Makefile로 컴파일하고 /poc으로 실행하기만 하면 됩니다.
프로파일러를 실행하려면 PoC와 동일한 방식으로 컴파일하세요.
질문이 있으면 Twitter나 다른 곳에서 연락 주세요.