[공격] 분석 — CVE-2025-68814
A memory leak in the Linux kernel's io_uring subsystem can be leveraged for resource exhaustion (DoS), requiring restricted access to io_uring for unprivileged users until patched.
📋 요약
- 심각도 미상 · CVSS 미상 · EPSS 0.00176 · 악용난이도 hard
🔍 공격 기법
본 취약점은 io_uring 인터페이스의 __io_openat_prep() 함수에서 발생하는 커널 메모리 누수(Memory Leak)이다.
-
공격 표면 및 트리거:
- 엔드포인트/함수:
io_uring시스템 콜 인터페이스 $\rightarrow$__io_openat_prep(). - 트리거 조건: 공격자가
O_CLOEXEC플래그를 설정하고, 파일이 이미 고정 파일 테이블(fixed file table)에 설치된 상태로openat요청을 생성할 때 발생한다. - 결함 원리:
getname()을 통해struct filename메모리를 할당했으나, 위 조건 충족 시REQ_F_NEED_CLEANUP플래그를 설정하지 않고 조기에 리턴(Early Return)한다. 이로 인해 요청이 종료되어도 할당된 메모리가 해제되지 않고 커널 슬랩(Slab)에 잔류한다.
- 엔드포인트/함수:
-
공격 체인 및 단계:
- 정찰/초기접근:
io_uring사용이 가능한 환경인지 확인 (unprivileged user의io_uring_setup가능 여부). - 실행(Resource Exhaustion): 특정 조건을 만족하는
openat요청을 루프를 통해 대량으로 생성 및 전송.- 전제: 커널 메모리 할당 제한 내에서 반복적으로 누수를 유발할 수 있는 권한 필요.
- 영향: 커널 메모리가 지속적으로 고갈되어 시스템 전체의 OOM(Out-of-Memory) Killer가 작동하거나, 핵심 프로세스가 킬(Kill)되는 서비스 거부(DoS) 상태 유도.
- 정찰/초기접근:
-
실전 공격 관점 (CVSS 벡터 연결):
- AV (Attack Vector): Local. 시스템 콜을 직접 호출해야 함.
- AC (Attack Complexity): Low. 특정 플래그 조합만 맞추면 되므로 트리거가 매우 단순함.
- PR (Privileges Required): Low/None.
io_uring접근 권한이 있는 일반 사용자 계정으로 가능. - UI (User Interaction): None.
악용 가능성: 본 취약점은 io_uring 인터페이스의 __io_openat_prep() 함수에서 특정 조건(Fixed file table 사용 및 O_CLOEXEC 플래그 설정) 충족 시 struct filename 메모리가 해제되지 않는 Memory Leak 결함입니다. 공격 난이도가 hard인 이유는 CVSS 벡터상 Local 권한(AV:L)과 낮은 특권 수준(PR:L)을 전제로 하며, 단순히 메모리를 누수시키는 것만으로는 즉각적인 RCE나 LPE를 달성할 수 없기 때문입니다. EPSS 수치가 0.00176으로 매우 낮고 KEV에 등재되지 않은 점은 현재 이 결함을 단독으로 악용한 실전 사례가 드물며, 이론적 심각도보다 실제 공격 효율성이 낮음을 시사합니다. 하지만 공격 표면이 Linux 커널의 최신 I/O 프레임워크인 io_uring 시스템 콜과 관련 파라미터에 노출되어 있어, 권한을 가진 로컬 사용자가 의도적으로 반복적인 요청을 생성해 커널 메모리를 고갈시키는 DoS(Denial of Service) 공격이 가능합니다. 결과적으로 이 취약점은 단독 실행보다는 커널의 메모리 레이아웃을 조작하거나 타 메모리 손상 취약점과 체이닝하여 힙 feng shui를 정밀하게 제어하기 위한 보조 수단으로 악용될 가능성이 높습니다.
💥 영향 분석
단일 요청의 누수량은 적으나, 반복적인 호출을 통해 커널 메모리를 점유함으로써 시스템 불안정성 및 서비스 거부(DoS)를 유발한다. 권한 상승이나 데이터 유출로 직접 이어지지는 않지만, 가용성을 완전히 파괴할 수 있다.
🔗 관련 취약점·체이닝
본 결함은 단독으로는 DoS에 그치지만, 다른 커널 취약점과 체이닝될 때 위험도가 증가한다.
- 메모리 압박 $\rightarrow$ 레이스 컨디션 유도 (추정): 의도적인 메모리 고갈 상태를 만들어 커널의 에러 핸들링 경로(Error Path)를 강제로 타게 함으로써, 다른 함수에서 발생할 수 있는 Use-After-Free나 Race Condition 취약점의 트리거 확률을 높이는 전제 조건으로 활용될 수 있다.
- Slab Layout 조작 (추정): 특정 슬랩 캐시 영역에 메모리 누수를 집중시켜 커널 힙 레이아웃을 공격자가 의도한 대로 배치(Heap Spraying/Grooming)하는 용도로 사용될 가능성이 있다. 이는 추후 다른 메모리 손상 취약점을 통해 권한 상승(LPE)으로 이어지는 체인의 일부가 될 수 있다.
🔎 탐지
- 커널 로그:
OOM killer작동 기록 및slabtop등을 통한filename구조체 관련 슬랩 캐시의 비정상적인 증가 모니터링. - 시스템 콜 추적:
strace나ebpf를 통해io_uring_enter호출 시O_CLOEXEC와 fixed file table 관련 파라미터가 반복적으로 입력되는 패턴 탐지.
🛡️ 완화 방안
- 즉시 조치:
/proc/sys/kernel/io_uring_disabled설정을 통해 비특권 사용자의io_uring접근을 차단하여 공격 표면 제거. - 근본 해결:
__io_openat_prep()내에서getname()성공 직후REQ_F_NEED_CLEANUP플래그를 설정하도록 수정된 최신 커널 패치 적용.
[파이프라인 근거] 본 분석은 다중 소스 데이터의 일관성이 확인되어 신뢰도 1.0으로 작성되었다. 실측 EPSS 값(0.00176)과 낮은 백분위(0.07399), 그리고 exploit 등급 'hard'를 근거로, 현재 실제 야생(In-the-wild) 악용 사례는 희박한 것으로 판단하여 우선순위를 monitor로 결정하였다.
⚖️ 위험도 / 우선순위
- 조치: monitor (모니터링)
- 근거: CVSS=미상 · non-KEV · EPSS=0.00176 · exploit=hard · in_scope=None