Bad Epoll (CVE-2026-46242)
3 hours ago
2
- Linux 커널 epoll 서브시스템의 경쟁 조건 UAF 취약점으로, 비권한 프로세스가 Linux 데스크톱·서버뿐 아니라 Android 기기에서도 root 권한을 얻을 수 있음
- 이 취약점은 Jaeyoung Chung이 Google kernelCTF에 0-day로 제출해 보고·익스플로잇했으며, kernelCTF는 Linux 커널 익스플로잇에 $71,337+ 보상을 제공함
- Anthropic의 AI Mythos는 같은 epoll 코드에서 다른 경쟁 조건 버그인 CVE-2026-43074를 찾았지만, Bad Epoll은 놓쳤음
- epoll은 운영체제, 네트워크 서비스, 브라우저가 의존하는 코어 커널 기능이라 비활성화할 수 없고, 단순 우회책 없이 패치 적용만이 해결책임
- 취약점은 2023-04-08 커밋 58c9b016e128에서 도입되고 2026-04-24 커밋 a6dc643c6931로 수정됐으며, v6.4 이상 기반 커널 중 수정 백포트가 없는 배포판이 영향받을 수 있음
Bad Epoll의 성격과 심각도
- Bad Epoll은 Linux 커널 epoll 서브시스템의 경쟁 조건 use-after-free(UAF) 취약점이며, 식별자는 CVE-2026-46242임
- 비권한 프로세스가 root 권한을 얻을 수 있으며, Linux 데스크톱·서버뿐 아니라 Android 기기에도 영향을 줄 수 있음
- Google kernelCTF에 0-day로 제출됐고, Jaeyoung Chung이 보고 및 익스플로잇함
- kernelCTF는 Linux 커널 익스플로잇에 $71,337+ 보상을 제공함
왜 위험한가
- Android root 가능성이 드문 Linux 권한 상승 버그임
- 많은 Linux 권한 상승 취약점은 Android가 로드하지 않는 모듈을 필요로 해 Android root로 이어지지 않음
- Google kernelCTF에서 익스플로잇된 약 130개 취약점 중 Android root 후보는 약 10개이며, Bad Epoll이 그중 하나임
- Chrome renderer sandbox 안에서도 트리거될 수 있음
- 이 샌드박스는 거의 모든 다른 커널 버그를 막음
- renderer 익스플로잇과 Bad Epoll을 체인하면 Project Zero가 MSG_OOB로 보인 사례와 같은 커널 코드 실행 영향에 이를 수 있음
- epoll에는 kill-switch가 없음
- Copy Fail 계열은 취약 모듈을 언로드해 무력화할 수 있음
- epoll은 운영체제, 네트워크 서비스, 브라우저가 의존하는 코어 기능이라 비활성화할 수 없음
- 해결 방법은 패치 적용뿐임
- 경쟁 창은 약 6개 명령어 수준으로 매우 작음
- 일반적인 시도는 거의 맞지 않음
- 익스플로잇은 경쟁 창을 넓히고 커널을 크래시하지 않는 재시도 루프를 실행함
- 결과적으로 kernelCTF 대상에서 99% 수준의 신뢰도를 보임
Mythos가 놓친 버그
- 2023년 단일 커밋 58c9b016e128이 약 2,500줄 규모의 epoll 코드에 두 개의 별도 경쟁 조건을 도입함
- Anthropic의 Mythos는 그중 하나를 찾아 CVE-2026-43074로 보고함
- 해당 결과는 커널 경쟁 조건 버그 탐지가 어렵다는 점에서 의미 있는 사례임
- 이후 독립 연구자가 이 취약점의 1-day 익스플로잇을 kernelCTF에 제출함
- 다른 경쟁 조건이 Bad Epoll이며, Mythos는 이를 놓침
- Mythos가 같은 작은 epoll 코드 경로에서 첫 번째 버그를 찾았기 때문에, 같은 영역을 의미 있게 조사했을 가능성이 있음
- Bad Epoll을 놓친 정확한 이유는 알 수 없음
- Bad Epoll 탐지가 어려웠을 수 있는 요인
- 경쟁 창이 약 6개 명령어에 불과해, 취약 코드만 보고 정확한 스레드 인터리빙을 상상하기 어려움
- CVE-2026-43074 수정 이후 Bad Epoll의 UAF는 보통 KASAN을 트리거하지 않음
- KASAN 신호가 없으면 Mythos가 실제 버그로 보고할 충분한 확신을 갖지 못했을 수 있음
- 수정도 쉽지 않았음
- 유지보수자의 첫 패치는 문제를 완전히 고치지 못함
- 올바른 패치는 최초 보고 후 두 달 뒤에 mainline에 들어감
공격 흐름
- 두 개의 epoll close 경로가 동시에 실행되며 충돌함
- 한 경로가 객체를 해제하는 동안 다른 경로가 그 객체에 계속 쓰면서 UAF가 발생함
- 익스플로잇은 네 개의 epoll 객체를 두 쌍으로 구성함
- 한 쌍은 경쟁 조건을 트리거함
- 다른 한 쌍은 피해 객체가 됨
- 이후 8바이트 UAF write를 file 객체 UAF로 전환함
- cross-cache 공격으로 file 내용 전체를 제어함
- 제어권을 얻은 뒤 /proc/self/fdinfo를 통해 임의 커널 메모리 읽기를 확보함
- 마지막 단계에서 제어 흐름을 하이재킹하고 ROP 체인을 실행해 root shell을 얻음
- 상세 기술 자료
완화와 영향 버전
- epoll은 비활성화할 수 없어 간단한 우회책이 없음
- 해결 방법은 upstream 커밋 a6dc643c6931 또는 배포판 백포트를 적용하는 것임
- 취약점 도입 및 수정 시점
- 도입: [58c9b016e128], 2023-04-08
- 수정: [a6dc643c6931], 2026-04-24
- v6.4 이상 기반 커널을 쓰고 수정 백포트를 아직 적용하지 않은 Linux 배포판이 영향받을 수 있음
- v6.1 기반 오래된 커널은 취약점이 v6.4에서 도입됐기 때문에 영향받지 않음
익스플로잇 대상과 Android 상태
- 현재 익스플로잇은 Google kernelCTF 대상에 맞춰 작성됨
- lts-6.12.67 (LTS): 99% reliable
- cos-121-18867.294.100 (COS): 98% reliable
- Android 익스플로잇은 아직 진행 중임
- Pixel 10, kernel v6.6+: 현재 PoC가 UAF를 트리거하며, 전체 root 익스플로잇이 진행 중임
- Android 익스플로잇과 writeup은 완성 후 공개 예정임
- Pixel 8 및 다른 v6.1 기반 기기는 취약점이 v6.4에서 도입됐기 때문에 영향받지 않음
타임라인
- 2023-04-08: 커밋 58c9b016e128로 epoll에 버그가 도입됨
- 2026-02-17: security@kernel.org에 버그를 보고함
- 2026-02-17: 유지보수자가 패치 프로토타입을 제안했지만 올바른 수정이 아니었고 논의가 멈춤
- 2026-04-02: Mythos가 찾은 CVE-2026-43074 수정이 mainline에 들어감
- 2026-04-22: 남아 있는 문제를 다시 보고함
- 2026-04-24: Bad Epoll 수정 커밋 a6dc643c6931이 mainline에 들어감
이름과 참고 자료
- Bad Epoll이라는 이름은 Android root 가능 커널 버그의 “Bad” 시리즈를 따름
- 이 페이지는 짧은 버전이며, 전체 root-cause 분석과 익스플로잇 문서, 코드는 별도 링크로 제공됨
-
Homepage
-
Tech blog
- Bad Epoll (CVE-2026-46242)