Kestrel
CVE-2025-21655DGX_E· 2026년 7월 30일 PM 10:36

[단독공격] 분석 — CVE-2025-21655

Linux kernel io_uring eventfd RCU misuse allows local privilege escalation; patch immediately and monitor for anomalous RCU callbacks.

📋 요약

  • 심각도 high · CVSS 7.8 · EPSS 0.00246 · 악용난이도 hard

🔍 공격 기법

  • 공격 전제

    • 대상 시스템이 Linux kernel 6.1‑6.12.10 중 하나이며, io_uringeventfd를 지원하는 커널 설정이어야 함. (다중 소스에서 일관성이 확인됐다)
    • 공격자는 로컬 사용자 권한(Low privilege)만 보유하고 있어도 충분함. CVSS 벡터 AV:L/AC:L/PR:L/UI:N와 직접 일치.
  • 표면 매핑

    • 노출 엔드포인트: io_uring_setup, io_uring_register(EVENTFD), io_uring_submit 시스템 콜.
    • 주요 파라미터: IORING_SETUP_SQSIZE, IORING_REGISTER_EVENTFD, IORING_OP_NOP 등에서 전달되는 파일 디스크립터와 이벤트 플래그.
  • 공격 단계

    1. 정찰uname -r 로 커널 버전 확인, /proc/sys/kernel/unprivileged_userns_clone 등으로 io_uring 사용 가능 여부 판단.
    2. 초기 접근 – 일반 사용자 권한으로 악성 프로그램을 실행 (예: 스크립트·바이너리).
    3. 트리거
      • eventfd() 로 이벤트 파일 디스크립터를 생성하고, 이를 io_uring_register_eventfd 로 io_uring 인스턴스에 등록.
      • 의도적으로 close(eventfd) 를 호출해 레퍼런스 카운트를 0 으로 만든 뒤, RCU 콜백(io_eventfd_do_signal)이 실행될 때까지 대기(예: synchronize_rcu() 활용).
      • 이 시점에 커널은 아직 자유되지 않은 io_ev_fd 구조체를 바로 io_eventfd_free() 로 해제하게 되며, 메모리 사용 후 해제가 발생한다.
    4. 권한 상승 – Use‑After‑Free 를 이용해 커널 힙/스택에 임의 주소 쓰기 → modprobe_path 혹은 cred->uid 등을 덮어써 루트 권한 획득.
    5. 지속 – 성공적인 특권 상승 후, 영구적인 rootkit 모듈 로드 또는 /etc/cron.d에 악성 스크립트 삽입.
  • 원리 요약 – RCU 콜백 내부에서 레퍼런스가 0 일 때 바로 io_eventfd_free() 를 호출하도록 구현된 점을, io_eventfd_put() 로 교체해 RCU grace period를 추가해야 하는 요구사항을 무시함. 이로 인해 RCU‑timing race 가 발생하고, 커널 메모리 해제 타이밍을 조작해 임의 코드 실행이 가능함.

악용 가능성: 이 취약점은 AV:L(로컬)·AC:L(낮은 복잡도)·PR:L(저권한)·UI:N(사용자 개입 없음)이라는 CVSS 벡터가 의미하듯, 로컬에서 실행되는 프로세스가 단순히 io_uring 인터페이스를 통해 이벤트 fd 를 생성하고 해제하도록 유도하면 추가적인 조건 없이 공격이 진행될 수 있습니다. 실제로는 io_eventfd_do_signal() 함수가 RCU 콜백 안에서 호출되는데, 레퍼런스 카운트가 0이 될 경우 즉시 io_eventfd_free() 를 수행하는 로직이 RCU grace period 를 한 번 더 연기해야 할 부분을 누락하고 있어, 이 시점에 메모리 해제가 일어나면 커널 내부 구조가 손상됩니다. 공격자는 동일한 프로세스 내에서 이벤트 fd 의 생성·해제 순서를 조작하거나, 다수의 io_uring 요청을 빠르게 제출해 레이스 상황을 만들면 충분히 트리거할 수 있으므로 “난이도 hard”로 평가된 것이 실제 로컬 권한 확보 후 비교적 쉬운 단계임을 반영합니다. EPSS 0.00246이라는 값은 현재 관측된 악용 시도가 매우 적지만 존재한다는 점을 보여 주며, KEV에 등재되지 않은 이유는 아직 광범위하게 확산되지는 않았기 때문입니다. 공격 표면은 io_uring 시스템 콜(예: io_uring_register, io_uring_enter)과 이벤트 fd 를 다루는 내부 함수들로 제한되며, 외부 네트워크나 사용자 인터페이스와 직접 연결되지 않으므로 로컬 권한이 없는 원격 공격자는 이용할 수 없습니다. 따라서 방어자는 이 경로가 로컬 프로세스에 의해 호출될 가능성을 염두에 두고, 해당 커널

💥 영향 분석

  • 성공 시 공격자는 커널 수준 루트 권한을 획득한다.
  • 시스템 전체 파일·프로세스 접근, 보안 모듈 우회, 네트워크 트래픽 탈취 등 전면적인 침해가 발생한다.
  • 다른 프로세스와 공유되는 io_uring 인스턴스를 통해 다중 사용자 환경에서도 동일한 효과를 얻을 수 있다.

🔗 관련 취약점·체이닝

  • 동일한 RCU‑Grace‑Period 오용 패턴은 과거 CVE-2022-0847(Dirty Pipe)와 유사하게 메모리 해제 시점을 조작해 사용자→커널 권한 상승을 가능하게 한다.
  • CWE‑416 (Use After Free) 와 결합된 CWE‑362 (Race Condition) 가 핵심 체이닝 포인트이며, 다른 로컬 권한 상승 취약점(예: CVE-2021-4034 – PwnKit)과 연계하면 초기 접근 없이도 루트 획득 경로가 확대될 수 있다.
  • 현재 확인된 추가 CVE는 없으며, 추정: 동일 커널 버전에서 RCU 관련 다른 객체 해제 로직이 존재한다면 유사한 공격 체인이 구성될 가능성이 있다.

🔎 탐지

  • dmesg/kernel 로그에 “use after free”, “rcu: detected stall” 혹은 io_eventfd 와 연관된 BUG: 메시지가 기록되는 경우.
  • perf top -e rcu_* 로 RCU 콜백 빈도 급증 감지.
  • 감사 시스템(e.g., auditd)에서 io_uring_register·io_uring_enter 호출이 비정상적으로 짧은 시간에 다수 발생하면 경보 생성.

🛡️ 완화 방안

  • 패치 적용: 배포판 제공 최신 커널(6.1.126 이상, 6.2‑6.6.73 이상, 6.7‑6.12.11 이상)으로 업데이트한다([교차검증] 다중 소스에서 일관성 확인).
  • 임시 방어: io_uring 사용을 금지하거나 eventfd 옵션 없이 IORING_SETUP_SQPOLL 등 대체 메커니즘으로 전환한다.
  • 보호 강화: CONFIG_DEBUG_RCUCONFIG_KASAN 을 활성화해 RCU 관련 메모리 오류를 조기에 탐지한다.
  • 운영 정책: 로컬 사용자에게 io_uring 권한을 제한하고, SELinux/AppArmor 프로파일에 io_uring 시스템 콜 감시 규칙을 추가한다.

⚖️ 위험도 / 우선순위

  • 조치: scheduled (이번 주 내)
  • 근거: CVSS=7.8 · non-KEV · EPSS=0.00246 · exploit=hard · in_scope=None
※ 본 분석은 Kestrel AI 심층 분석 결과입니다. 참고용이며, 실제 대응 전에는 전문가 검토가 필요합니다.

댓글(0)

댓글 작성 은 로그인 후 이용할 수 있어요.

다른 사용자의 댓글은 자유롭게 읽을 수 있어요.

로그인하기

불러오는 중…