
더게이트
동아제약, 조르단 신제품 ‘해피스마일’ 출시

위키트리

리눅스 커널의 핵심 기능인 에폴(epoll) 서브시스템에서 발견된 새 취약점이 서버부터 안드로이드 기기까지 위협하고 있다. CVE-2026-46242로 지정된 이 결함에는 '배드 에폴(Bad Epoll)'이라는 이름이 붙었다. 권한이 없는 일반 사용자도 이 취약점을 악용하면 최고 권한인 루트(root)를 얻을 수 있다. 공개된 익스플로잇(공격 코드)은 시연 대상 기기에서 약 99%의 확률로 루트 권한 탈취에 성공한다. 더 눈길을 끄는 대목은 이 취약점이 숨어 있던 코드 영역을 앤트로픽의 AI 모델 미토스가 이미 감사했는데도 놓쳤다는 점이다.
배드 에폴은 use-after-free(UAF, 해제된 메모리 재사용) 취약점이다. 문제의 지점은 에폴 파일 디스크립터(FD)를 닫을 때 정리 작업을 수행하는 ep_remove() 함수다. 두 개의 에폴 FD가 서로를 감시하도록 설정된 뒤 거의 동시에 닫히면 경쟁 조건(race condition)이 열린다.
ep_remove()는 file->f_lock이라는 락(lock) 아래에서 파일의 f_ep 포인터를 비우면서도, hlist_del_rcu()와 spin_unlock() 호출 구간에서는 해당 파일 객체를 계속 사용한다. 이 순간 다른 스레드에서 실행되는 __fput() 호출이 일시적으로 NULL 값을 관찰하면 eventpoll_release_file() 처리를 건너뛰고 곧바로 f_op->release로 넘어간다. 그 결과 아직 사용 중인 eventpoll 구조체가 먼저 해제되며 커널 메모리가 손상된다.
여기에 더해 리눅스의 struct file은 SLAB_TYPESAFE_BY_RCU 방식으로 관리돼, 해제된 메모리 슬롯이 alloc_empty_file()에 의해 재활용될 수 있다. 공격자는 이를 이용해 원래와 다른 슬랩 캐시(slab cache)를 대상으로 kmem_cache_free()가 호출되도록 유도할 수 있다.

에폴은 리눅스가 대량의 파일 디스크립터·소켓·파이프를 동시에 감시할 때 CPU 자원을 낭비하지 않도록 해주는 핵심 입출력 이벤트 알림 메커니즘이다. 현대 리눅스 네트워크 서비스 대부분과 모든 웹 브라우저, 안드로이드 애플리케이션이 이 기능에 의존한다.
문제는 취소 가능한 커널 모듈과 달리 에폴은 운영체제를 망가뜨리지 않고는 끌 수 없는 핵심 구성 요소라는 점이다. 관리자가 임시로 모듈을 언로드해 패치 전까지 시간을 버는 방식의 우회책이 배드 에폴에는 통하지 않는다. 근본적인 해결책은 커널 패치뿐이다.
이런 특성 때문에 배드 에폴은 이전에 안드로이드에서 확인된 카피 페일(Copy Fail) 같은 선택적 모듈 취약점보다 구조적으로 더 위험하다는 평가가 나온다. 안드로이드에서 루트 권한 탈취가 가능한 이유도 에폴이 비활성화하거나 언로드할 수 없는 필수 구성 요소이기 때문이다. 취약점은 크롬 브라우저의 렌더러 샌드박스(renderer sandbox) 내부에서도 도달 가능한 것으로 확인됐다. 이는 렌더러 익스플로잇과 배드 에폴을 연계해 완전한 커널 코드 실행까지 이어질 가능성을 시사한다.
배드 에폴이 숨어 있던 약 2,500줄 분량의 에폴 코드 경로는 2023년 4월에 반영된 단 하나의 커밋에서 시작됐다. 이 커밋은 같은 코드 경로에 서로 다른 두 개의 경쟁 조건을 동시에 심어놓았다. 그중 하나인 CVE-2026-43074는 앤트로픽의 AI 모델 미토스가 발견했다. 미토스는 앤트로픽이 '프로젝트 글래스윙(Project Glasswing)'이라는 이름으로 운용 중인 프런티어 AI 모델이다.
그러나 미토스는 같은 코드에 숨어 있던 두 번째 결함, 즉 배드 에폴은 놓쳤다. 경쟁 조건이 열리는 시간 폭이 명령어 약 6개 분량으로 극히 좁고, 커널의 대표적 메모리 오류 탐지 도구인 KASAN도 거의 트리거하지 않아 실행 흔적을 거의 남기지 않기 때문으로 추정된다.
이 버그를 실제로 찾아내고 무기화한 것은 서울대학교 컴프섹랩(CompSec Lab) 소속 박사과정 연구자 정재영(Jaeyoung Chung)이다. 그는 리눅스·안드로이드 커널의 동시성(concurrency) 버그를 연구해왔다. 그가 만든 익스플로잇은 4개의 에폴 객체를 두 쌍으로 묶어 사용한다. 두 쌍이 반복적으로 경쟁 조건을 유발하는 동안 나머지는 공격 대상 역할을 한다. 성공할 때까지 시도를 반복하면서도 커널을 크래시(비정상 종료)시키지 않는 방식이어서, 취약한 기기에서 약 99%의 확률로 루트 권한 탈취에 성공한다.
경쟁 조건이 성공하면 익스플로잇은 8바이트 분량의 손상된 쓰기를 파일 객체 제어권으로 전환한다. 이후 /proc/self/fdinfo를 통해 임의의 커널 메모리를 읽어내고, 리턴 오리엔티드 프로그래밍(ROP, Return-Oriented Programming) 체인을 구성해 루트 셸을 실행시킨다. 정재영 연구자는 이 결과를 구글의 커널CTF(kernelCTF) 프로그램에 제로데이로 제출했다. 커널CTF는 실제 동작하는 리눅스 커널 익스플로잇에 71,337달러 이상을 지급하는 포상 프로그램이다.
배드 에폴을 고치는 패치는 4월 24일(현지시각) 리눅스 커널 메인라인에 반영됐다. 하지만 다수의 리눅스 배포판은 아직 이 패치를 백포트(구버전에 반영)하지 않은 상태다. 패치가 반영된 뒤 별다른 공지 없이 70일이 지난 뒤에야 공개 기술 문서가 나왔다.
수정 과정도 매끄럽지 않았다. 커널 유지보수팀의 첫 패치 시도는 문제를 완전히 해결하지 못했고, 올바른 수정이 반영되기까지는 최초 공개 이후 거의 두 달이 걸렸다. 배드 에폴이 처음 심어진 지 거의 3년 만에야 발견됐다는 점도 이 취약점이 얼마나 은밀했는지를 보여준다. 영향을 받는 커널 버전은 v6.4 이상으로 확인됐다.
리눅스 서버와 안드로이드 기기를 운용하는 조직이라면 해당 버전 이상을 점검하고 배포판 업데이트가 제공되는 즉시 적용할 필요가 있다. 근본적 우회책이 없는 커널 핵심 기능의 결함이라는 점에서, 이번 사례는 프런티어 AI를 활용한 코드 감사가 아직 완전하지 않다는 사실도 함께 보여준다.

관심 없음
{카테고리}에 관심 없음