Bad Epoll (CVE-2026-46242)
(github.com/J-jaeyoung)- 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을 놓친 정확한 이유는 알 수 없음
- Mythos가 같은 작은
- Bad Epoll 탐지가 어려웠을 수 있는 요인
- 경쟁 창이 약 6개 명령어에 불과해, 취약 코드만 보고 정확한 스레드 인터리빙을 상상하기 어려움
- CVE-2026-43074 수정 이후 Bad Epoll의 UAF는 보통 KASAN을 트리거하지 않음
- KASAN 신호가 없으면 Mythos가 실제 버그로 보고할 충분한 확신을 갖지 못했을 수 있음
- 수정도 쉽지 않았음
- 유지보수자의 첫 패치는 문제를 완전히 고치지 못함
- 올바른 패치는 최초 보고 후 두 달 뒤에 mainline에 들어감
공격 흐름
- 두 개의
epollclose 경로가 동시에 실행되며 충돌함- 한 경로가 객체를 해제하는 동안 다른 경로가 그 객체에 계속 쓰면서 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% reliablecos-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” 시리즈를 따름
- 이전 사례로 Bad Binder, Bad IO_uring, Bad Spin이 있음
- 이 페이지는 짧은 버전이며, 전체 root-cause 분석과 익스플로잇 문서, 코드는 별도 링크로 제공됨
댓글과 토론
Lobste.rs 의견들
-
이 취약점이 Chrome 샌드박스에서 도달 가능하다는 건 정말 큰일인데, kCTF로 보고됐고 보상이 $71k에 그쳤다는 점이 좀 놀라움
-
Bryan Cantrill이 또 맞았네
- 인정하긴 좀 민망하지만, 솔직히 나도 첫 생각이 같았음
- 궁금함. 그가 뭘 맞혔다는 건지 맥락을 모르겠음
- 가능하면 맥락을 좀 알려주면 좋겠음
-
겉보기엔 비어 보이는 저장소에 속지 말 것. 익스플로잇은 README 아래쪽에 링크돼 있음
아직 테스트해보진 않았고, 완화책은 없음. 작성자들은 Android 루팅도 가능하다고 주장하니, Android 생태계를 생각하면 내 제조사가 한 달쯤 뒤에나 패치를 줄 것 같음. 게다가 Chrome 렌더러 샌드박스에서도 동작함- 2023년에 Android 폰을 샀는데 마지막 커널 업데이트가 2024년 중반이었음. 이 버그가 그 시기 것이라면, 패치를 받는 쪽이 오히려 드문 축일 수 있음
-
이거 Android에서도 동작함?
- 두 번째 문장에 적혀 있잖아
-
이게 어떻게 발견됐는지 정보가 있나? Mythos는 놓쳤다는데, 다른 대형 언어 모델 도움으로 찾은 건지 아니면 사람이 검토해서 찾은 건지 궁금함
그렇다면 왜 이 부분을 들여다봤는지도 궁금함 -
“많은 Linux 배포판은 v6.4 이상 기반 커널을 쓰고 아직 수정 사항을 백포트하지 않았다면 영향을 받을 수 있음. 위 수정 커밋의 백포트 여부는 배포판의 커널 보안 업데이트를 확인할 것. 오래된 v6.1 기반 커널은 버그가 v6.4에서 도입됐기 때문에 영향받지 않음.”
아쉽네. 폰 루팅에 좋은 방법이 되길 바랐는데, 너무 최신이라 특별히 유용하진 않을 듯함. 내 폰은 5.15임