Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
chronomaly — CVE-2025-38352에 대한 Android 커널 익스플로잇, 이전에 실제 환경에서 악용됨. 취약한 x86_64 Linux 커널 v5.10.x를 대상으로 합니다. | Kitploit
도구/GitHubGitHub/farazsth98/chronomaly
Android SecurityVulnerability AnalysisExploitationPapers & ResearchLearning & EducationBinary Exploitation
GitHubfarazsth98/chronomaly

chronomaly

CVE-2025-38352에 대한 Android 커널 익스플로잇, 이전에 실제 환경에서 악용됨. 취약한 x86_64 Linux 커널 v5.10.x를 대상으로 합니다.

저장소 보기
31048118개월 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

Chronomaly

Chronomaly는 CVE-2025-38352를 사용하는 Android/Linux 커널 익스플로잇입니다. 이 익스플로잇은 Linux 커널 v5.10.157용으로 특별히 작성되었지만, 특정 커널 텍스트 오프셋을 필요로 하지 않기 때문에 취약한 모든 v5.10.x 커널에서 작동해야 합니다.

이 취약점에 대해 PoC부터 익스플로잇까지 상세히 다룬 세 부분으로 구성된 블로그 포스트 시리즈를 작성했습니다:

  • 1부 - 실제 환경에서의 Android 커널 취약점 분석 + PoC
  • 2부 - 커널 패치 없이 레이스 윈도우 확장하기
  • 3부 - Chronomaly 발견하기

demo

빌드 설정

이 익스플로잇은 QEMU에서 실행되는 x86_64 Linux 커널 v5.10.157에서만 테스트되었습니다. 친구에게 자신의 Pixel 6a 커널 구성을 보내달라고 요청하여 제 커널 구성의 기반으로 삼았으며, 다음은 이 익스플로잇에 중요한 구성 옵션들입니다(커널CTF 구성을 베이스로 시작했습니다):

  • CONFIG_POSIX_CPU_TIMERS_TASK_WORK=n
  • CONFIG_PREEMPT=y (Full Preemption, no RT)
  • CONFIG_SLAB_MERGE_DEFAULT=n
  • DEBUG_LIST=n
  • BUG_ON_DATA_CORRUPTION=n
  • LIST_HARDENED=n

CONFIG_POSIX_CPU_TIMERS_TASK_WORK를 비활성화하려면 제 첫 번째 블로그 포스트 여기에 설명된 단계를 따를 수 있습니다.

QEMU 실행 스크립트는 qemu.sh 파일을 참조하세요. 테스트에는 4코어와 3GB RAM을 사용했습니다.

변경해야 할 익스플로잇 매개변수

익스플로잇이 CPU 타이머에 의존하기 때문에, 환경에 맞게 변경해야 할 두 가지 매개변수가 있습니다.

CPU_USAGE_THRESHOLD

이 매개변수는 race_func() 내에서 타이머를 발생시키기 위해 CPU 시간을 소비할 때 사용됩니다. 다음과 같이 설정해야 합니다:

  • 타이머가 모든 재시도 시도에서 발생하지 않음 (이는 CPU_USAGE_THRESHOLD가 너무 높아 타이머가 race_func() 스레드가 종료되기 전에 발생함을 의미합니다).
  • 타이머가 가끔씩만 발생함 (이는 때로는 스레드가 종료되기 전에 타이머가 발생하고, 다른 때는 스레드가 종료되는 동안 발생함을 의미합니다).

타이머가 발생하는지 여부를 확인하려면 free_func()의 SIGUSR1 폴링 코드에 printf() 문을 삽입하세요. 메시지가 출력되면 타이머가 발생한 것입니다.

올바르게 설정되면 터미널에 "Parent raced too late / too early" 메시지가 나타나기 시작합니다.

PARENT_SETTIME_DELAY_US

PARENT_SETTIME_DELAY_US. 이 매개변수는 부모 프로세스가 자식 프로세스와 동시에 send_sigqueue() 내의 두 번째 레이스 윈도우를 맞추기 위해 사용됩니다. 익스플로잇을 실행하고 관찰한 후 다음과 같이 수정하세요:

  • "Parent raced too late, readjusting..." 메시지가 너무 자주 나타납니다 – 이 매개변수를 줄이세요.
  • "Parent raced too early, readjusting..." 메시지가 너무 자주 나타납니다 – 이 매개변수를 늘리세요.

이상적으로는 "raced too late"와 "raced too early"가 모두 출력되는 것을 보고 싶을 것이며, 익스플로잇은 1분 이내에 작동합니다. 하나만 다른 것보다 더 자주 발생하는 경우 그에 맞게 조정하세요.

잠재적 개선 사항

제 크로스 캐시 구현에서는 커널이 너무 바쁘지 않고, struct sigqueue 할당이 많지 않다고 가정했습니다. sigqueue_crosscache_preallocs()에 이 부분을 개선하기 위해 필요한 내용을 설명하는 주석을 추가했습니다.

커널이 실제로 바쁘거나, per-cpu/per-node 부분 리스트에 이미 일부 struct sigqueue 슬랩 페이지가 있는 경우, exploit.c의 현재 크로스 캐시 구현은 실패하며, uaf_sigqueue/realloc_sigqueue가 파이프 버퍼 데이터 페이지로 재할당되지 않습니다.

저는 의도적으로 크로스 캐시가 바쁜 커널에서 작동하지 않도록 선택했습니다. 이는 익스플로잇이 오용되는 것을 방지하기 위해서입니다 :)

질문

질문이 있으시면 X/Twitter를 통해 연락 주세요!

도구 다운로드