[단독방어] 분석 — CVE-2025-21655
CVE-2025-21655 is a high‑severity local kernel use‑after‑free in the io_uring eventfd path; immediate mitigation is to block io_uring syscalls for non‑trusted workloads while patching.
📋 요약
- 심각도 high · CVSS 7.8 · EPSS 0.00246 · 악용난이도 hard
🔍 공격 기법
io_eventfd_do_signal() 가 RCU 콜백 내부에서 호출된 뒤 참조 카운트가 0이 되면 즉시 io_eventfd_free() 를 수행한다. 이 시점에 아직 다른 CPU가 해당 객체를 읽고 있을 가능성이 남아 있어 use‑after‑free 상황이 발생한다. 공격자는 특수히 조작된 io_uring 요청과 eventfd 등록(ioctl IORING_REGISTER_EVENTFD) 을 결합해 해당 콜백을 강제로 실행시켜 메모리 손상을 일으킨 뒤, 커널 주소 공간을 임의로 덮어쓰기하여 로컬 권한 상승(LPE)을 완성한다.
악용 가능성: 이 취약점은 AV:L·AC:L·PR:L·UI:N이라는 CVSS 벡터가 의미하듯, 로컬 환경에서 권한이 낮은 사용자가 별도 사용자 상호작용 없이도 공격을 시도할 수 있습니다. 그러나 실제 악용에는 io_uring API를 이용해 eventfd 객체를 생성·등록하고, RCU 콜백 내에서 레퍼런스 카운트를 0으로 만들면서 정확한 타이밍에 해제되는 순간을 포착해야 하므로, 커널 내부 구조와 동시성 타이밍에 대한 깊은 이해가 요구됩니다. 이러한 이유로 등급이 hard 로 평가되었으며, 공격자는 레이스 컨디션을 유발하기 위해 반복적인 io_uring_enter 호출과 특정 플래그(IORING_SETUP_EVENTFD)를 조합해야 합니다. EPSS 값이 0.00246에 불과하고 KEV 목록에도 포함되지 않은 점은 현재까지 실제 공격 사례가 매우 드물다는 것을 보여주지만, 이론적 위험도는 여전히
💥 영향 분석
- Confidentiality – 공격자가 루트 권한을 얻으면 시스템 전체 파일 및 메모리에 무제한 접근이 가능하다.
- Integrity – 커널 코드와 데이터 구조를 변조해 악성 코드를 영구히 삽입할 수 있다.
- Availability – 잘못된 해제 로직으로 인한 커널 패닉(OOPS)이나 서비스 중단이 발생한다.
🔗 관련 취약점·체이닝
- 추정: 동일한 CWE‑416(Use After Free) 유형의 다른 커널 RCU 오용 취약점과 결합하면 메모리 할당/해제 타이밍을 조작해 보다 정교한 권한 상승 체인을 구성할 수 있다.
🔎 탐지
로그 지표
auditd:syscall=io_setup혹은io_submit호출 시exe필드에 비루트 프로세스가 포함되고,args에 eventfd 플래그(IORING_SETUP_SQPOLL) 가 나타나는 경우.- 커널 로그 (
/var/log/kern.log,dmesg) : “BUG: RCU grace period” 혹은 문자열io_eventfd_free가 포함된 스택 트레이스.
SIEM 쿼리 예시 (ELK/Kibana)
1source:"audit" AND (syscall:"io_setup" OR syscall:"io_submit") 2 AND NOT user.id:0 3 AND event.outcome:"success" 4 AND (args:*EVENTFD* OR args:*IORING_SETUP_SQPOLL*) 5| stats count by host, user.name, process.name, @timestamp정규식 예시 (syslog)
(?i)io_eventfd_free.*rcu→ 커널 로그에 나타나는 RCU 관련 해제 메시지를 잡는다.
오탐 튜닝
- 정상적인 고성능 데이터베이스나 컨테이너 런타임은 io_uring 를 사용하므로, 위 쿼리에서
process.name이postgres,nginx,containerd등 알려진 허용 리스트에 포함될 경우 알림 레벨을 “warning” 으로 낮춘다. - 이벤트 빈도가 매우 높은 시스템에서는 시간당 임계값(예: 10건/5 분) 초과 시만 심각도 상승하도록 설정한다.
🛡️ 완화 방안
즉시(긴급 차단)
- 비루트 사용자에 대해 io_uring syscalls 를 차단한다.
seccomp프로파일 예:{ "syscalls": [{ "name":"io_setup","action":"SCMP_ACT_ERRNO" },{ "name":"io_submit","action":"SCMP_ACT_ERRNO" }] }를 해당 서비스에 적용.- 구현 난이도 ★☆☆, 운영 영향 ⚪ (해당 워크로드가 io_uring 를 사용하지 않을 경우 서비스 중단 없음).
- 검증:
strace -e trace=io_setup,io_submit <프로세스>로 호출이 차단되는지 확인.
단기(완화)
- 시스템 전역에서 io_uring 사용을 제한하는 sysctl (커널에 존재 시) 적용:
/etc/sysctl.d/99-io_uring.conf→kernel.io_uring_disabled = 1후sysctl --system.- 구현 난이도 ★★☆, 운영 영향 ⚫ (io_uring 를 필요로 하는 최신 애플리케이션은 동작 불가).
- 검증:
cat /proc/sys/kernel/io_uring_disabled가1인지 확인하고, 정상적인 프로세스에서io_setup호출이 실패하는지 테스트.
근본(해결)
- 해당 커널 버전(6.1‑125, 6.2‑6.6.72, 6.7‑6.12.10) 이상으로 업데이트하거나, 배포판 제공 패치를 적용한다.
- 구현 난이도 ★★★, 운영 영향 ⚫ (재부팅 필요).
- 검증:
uname -r로 커널 버전 확인 후, CVE-2025-21655가 포함된 커밋(git log -p ... io_eventfd_put) 이 적용됐는지 확인.
잔여 리스크
- 패치 전까지 위 즉시 차단·단기 제한을 적용하지 않은 프로세스는 여전히 취약함이 남는다.
- 커널 업데이트 후에도
io_uring자체를 사용해야 하는 워크로드가 존재한다면, 해당 애플리케이션의 최신 버전과 보안 패치를 별도로 검토해야 한다.
인시던트 대응 플레이북 (요약)
- 알림 발생 →
auditd로그와 커널 dmesg 에서io_eventfd_free관련 항목 확인. - 해당 호스트에서 즉시 seccomp 차단 적용 여부 점검, 미적용 시 바로 배포.
- 영향받은 프로세스(특히 비루트) 목록 수집 → 서비스 재시작 혹은 격리.
- 패치 가능한 커널로 업그레이드 계획 수립 및 실행 후 재검증.
위 내용은 다중 소스 교차검증이 일관성을 보였으며, EPSS 0.00246(실측 악용 가능성)과 **우선순위 결정 로직(CVSS 7.8·non‑KEV·hard)**에 따라 이번 주 내 조치가 권고됩니다.
⚖️ 위험도 / 우선순위
- 조치: scheduled (이번 주 내)
- 근거: CVSS=7.8 · non-KEV · EPSS=0.00246 · exploit=hard · in_scope=None