
CVE-2026-46242에 대한 Linux 커널 권한 상승 익스플로잇으로, epoll의 경쟁 조건(race-condition) use-after-free 취약점을 악용하며 데스크톱, 서버 및 Android 기기에서 99% 신뢰도로 root 권한을 획득합니다.

Google kernelCTF에서 비특권 프로세스가 root로 권한 상승하는 모습.
Bad Epoll (CVE-2026-46242)은 Linux 커널의 epoll 서브시스템에서 발생하는 경쟁 조건 기반 use-after-free입니다. 이 버그를 이용하면 비특권 프로세스가 Linux 데스크톱과 서버뿐만 아니라 Android 기기에서도 root가 될 수 있습니다.
Bad Epoll은 Jaeyoung Chung에 의해 Google kernelCTF에 0-day로 제보 및 익스플로잇되었으며, 이는 Linux 커널 익스플로잇에 $71,337+의 상금을 지급합니다. Bad Epoll 제보는 $92,337의 상금을 받았습니다.
[!NOTE] Anthropic의 AI인 Mythos는 동일한 epoll 코드에서 또 다른 경쟁 조건 버그를 발견했지만 Bad Epoll은 놓쳤습니다.
Android를 root할 수 있는 희귀한 버그. 대부분의 Linux 권한 상승 버그는 Android를 전혀 root할 수 없습니다. 예를 들어 Copy Fail과 그 변종들은 Android가 절대 로드하지 않는 모듈을 필요로 합니다. Google의 kernelCTF에서 익스플로잇된 약 130개의 취약점 중 Android를 root할 수 있는 후보는 약 10개에 불과합니다. Bad Epoll은 그중 하나입니다.
킬 스위치가 없음. Copy Fail과 그 변종들은 취약한 모듈을 언로드하여 무력화할 수 있지만, epoll에는 그런 옵션이 없습니다. epoll은 운영체제, 네트워크 서비스, 브라우저가 모두 의존하는 핵심 커널 기능입니다. 이를 고치는 유일한 방법은 패치를 적용하는 것입니다.
경쟁 윈도우는 매우 작지만, 공격은 99% 신뢰성 있음. 이 버그의 경쟁 윈도우는 약 6개 명령어 폭에 불과하며, 일반적인 시도로는 거의 도달하지 못합니다. 익스플로잇은 그 윈도우를 넓히고 커널을 절대 크래시시키지 않는 재시도 루프를 실행합니다. 그 결과 아래 공격 개요에서 설명하듯 99% 신뢰성 있는 익스플로잇이 됩니다.
2023년의 단일 커밋이 전체 약 2,500줄에 불과한 epoll 코드에 두 개의 별개 경쟁 조건을 도입했습니다. 둘 다 권한 상승으로 이어질 수 있는 치명적인 버그로 밝혀졌습니다.
첫 번째는 Anthropic의 Mythos가 발견하여 CVE-2026-43074로 제보되었으며, 자세한 내용은 Anthropic의 공개 보고서, ANT-2026-CM0TCREP에 있습니다. 이 결과 자체만으로도 인상적인데, 커널 경쟁 조건 버그는 발견하기 어렵기로 알려져 있기 때문입니다. 이는 최전선 AI 모델이 경쟁 조건 버그를 찾아낼 수 있는 능력을 보여주었습니다. 이후 독립 연구자가 kernelCTF에 1-day 익스플로잇을 제출했습니다.
다른 경쟁 조건이 바로 Mythos가 놓친 Bad Epoll입니다. Mythos가 이 작은 epoll 코드 경로에서 첫 번째 버그를 발견한 점을 고려하면, 같은 영역을 상당한 깊이로 조사했을 가능성이 높습니다. Mythos가 Bad Epoll을 놓친 정확한 이유는 알 수 없지만, 두 가지 요인이 발견을 어렵게 만들었을 것입니다.
경쟁 윈도우가 매우 작음. 약 6개 명령어 폭에 불과하여, 취약한 코드를 보고 있어도 정확한 스레드 인터리빙을 상상하기 어렵습니다.
런타임 증거가 거의 없었음. CVE-2026-43074가 수정된 후, Bad Epoll의 use-after-free는 커널의 주요 메모리 오류 탐지기인 KASAN을 보통 트리거하지 않습니다. 그 신호가 없으면 Mythos는 이를 실제 버그로 보고할 충분한 확신을 갖지 못했을 수 있습니다.
Bad Epoll은 수정하기도 어려웠습니다. 메인테이너의 첫 패치는 문제를 완전히 해결하지 못했고, 올바른 패치는 버그가 처음 제보된 지 두 달 후에야 반영되었습니다. 보통 보안 문제를 신속하게 처리하는 커널치고는 긴 시간입니다.
전체적으로 Bad Epoll은 경쟁 조건이 모든 단계에서 얼마나 어려운지를 보여줍니다. 최전선 모델에게도 발견하기 어렵고, 올바르게 수정하기 어려우며, 다음 섹션에서 보듯 신뢰성 있게 익스플로잇하기도 어렵습니다. 또한 최전선 AI 모델이 존재하는 상황에서도 여전히 탐구할 가치가 있는 취약점 연구 방향을 시사합니다. 바로 좁은 타이밍 조건과 약한 증거 뒤에 숨은 실제 보안 영향을 밝혀내는 것입니다.
[!NOTE] 독립 연구자 Qi Tang과 Junxi Qian도 Anthropic과 같은 날인 2026년 3월 30일에 CVE-2026-43074를 Linux 커널 팀에 제보했습니다. 그들의 이름은 업스트림 수정의 크레딧에서 실수로 누락되었습니다. 이 독립적인 제보들을 지적해 준 Guidong Han에게 감사드립니다. 세 연구자는 이후 epoll에서 또 다른 경쟁 조건 use-after-free를 발견했습니다.
호기심 많은 분들을 위해 공격의 개략적인 개요를 소개합니다.
연결된 두 epoll 객체. 둘을 동시에 닫으면 경쟁 조건이 발생합니다.
epoll의 두 close 경로가 동시에 실행되며 충돌합니다. 하나가 객체를 해제하는 동안 다른 하나가 여전히 그 객체에 쓰고 있으며, 이것이 use-after-free (UAF)입니다.
경쟁 윈도우와 익스플로잇이 이를 유도하는 방법.
익스플로잇은 네 개의 epoll 객체를 두 쌍으로 묶어 사용합니다. 한 쌍은 경쟁 조건을 트리거하고, 다른 한 쌍은 희생자가 됩니다. 그런 다음 익스플로잇은 8바이트 UAF 쓰기를 file 객체에 대한 UAF로 전환하고, cross-cache 공격을 사용하여 파일의 내용을 완전히 제어합니다.
버그를 /proc/self/fdinfo를 통한 임의 커널 메모리 읽기로 전환.
그 제어를 바탕으로 익스플로잇은 /proc/self/fdinfo를 통해 커널 메모리의 임의 읽기를 얻습니다. 마지막으로 제어 흐름을 탈취하고 ROP 체인을 실행하여 root 셸을 획득합니다.
더 자세한 내용은 전체 익스플로잇 writeup과 코드에서 확인할 수 있습니다.
epoll은 비활성화할 수 없으므로 Bad Epoll에는 간단한 우회 방법이 없습니다. 유일한 해결책은 패치를 적용하는 것입니다.
a6dc643c6931을 적용하거나,
사용 가능해지면 배포판의 백포트를 적용하십시오.Bad Epoll은
58c9b016e128 (2023-04-08)에
도입되었고
a6dc643c6931 (2026-04-24)에
수정되었습니다.
많은 Linux 배포판은 v6.4 이상 기반 커널을 사용하면서 위 수정 커밋을 아직 백포트하지 않았다면 영향을 받을 수 있습니다. 배포판의 커널 보안 업데이트에서 위 수정 커밋의 백포트를 확인하십시오. 더 오래된 v6.1 기반 커널은 버그가 v6.4에서 도입되었으므로 영향을 받지 않습니다.
현재 익스플로잇은 다음 Google kernelCTF 타깃용으로 작성되었습니다.
lts-6.12.67 (LTS), 99% 신뢰성cos-121-18867.294.100 (COS), 98% 신뢰성Android 익스플로잇은 아직 진행 중입니다.
| 날짜 | 사건 |
|---|---|
| 2023-04-08 | 버그가 epoll에 도입됨 (커밋 58c9b016e128). |
| 2026-02-17 | [email protected]에 버그를 제보함. |
| 2026-02-17 | 메인테이너가 패치 프로토타입을 제안했으나 올바른 수정이 아니었고 논의가 중단됨. |
| 2026-03-30 | CVE-2026-43074가 Anthropic과 독립 연구자 Qi Tang, Junxi Qian에 의해 Linux 커널 팀에 제보됨. |
| 2026-04-02 | CVE-2026-43074의 수정이 메인라인에 반영됨. |
| 2026-04-22 | 남은 문제를 다시 제보함. |
| 2026-04-24 | 이 버그의 수정이 메인라인에 반영됨 (커밋 a6dc643c6931). |
이 이름은 Android를 root하는 커널 버그들의 "Bad" 시리즈를 따르며, 이전 항목으로는 Bad Binder, Bad IO_uring, Bad Spin이 있습니다. Bad Epoll은 그 epoll 버전입니다.
이 페이지는 요약 버전입니다. 전체 근본 원인 분석, 익스플로잇 writeup, 익스플로잇 코드는 다음 링크에서 확인할 수 있습니다.