[단독방어] 분석 — CVE-2025-21745
The Linux kernel blk‑cgroup reference‑count leak can be mitigated immediately by disabling the blkio controller, with permanent remediation requiring a kernel upgrade that includes the class_dev_iter_exit() fix.
📋 요약
- 심각도 medium · CVSS 5.5 · EPSS 0.00227 · 악용난이도 hard
🔍 공격 기법
blk‑cgroup 내부 함수 blkcg_fill_root_iostats()가 block_class 디바이스를 순회할 때 class_dev_iter_exit()을 호출하지 않아 subsystem refcount 가 누수됩니다. 악의적인 사용자는 이 경로를 반복 호출함으로써 커널 메모리(특히 blk‑cgroup 관련 slab) 를 지속적으로 증가시켜 결국 OOM 상황을 유발하고 시스템 가용성을 저해할 수 있습니다.
악용 가능성: 이 취약점은 CVSS 벡터 AV:L/AC:L/PR:L/UI:N 로, 공격자는 로컬 시스템에 접근하기만 하면 되고, 권한은 낮은 수준(Low) 으로도 충분합니다. 복잡도 (Attack Complexity)가 낮아 코드를 직접 호출하거나 cgroup‑blkio 인터페이스를 이용해 반복적으로 blkcg_fill_root_iostats() 를 실행하는 것만으로도 레퍼런스 카운트 누수가 발생할 수 있습니다. 그러나 EPSS 값이 0.00227 로 매우 낮고, KEV(악용 보고서)에도 등재되지 않았으므로 현재 실제 공격이 관측될 가능성은 제한적이라고 판단됩니다. 트리거 조건은 블록 cgroup 통계 정보를 조회하거나 업데이트하는 과정에서 해당 함수가 호출되는 경우이며, 노출된 엔드포인트는 주로 sysfs(예: /sys/fs/cgroup/.../blkio.throttle_*) 혹은 procfs 를 통해 접근 가능한 파일들입니다. 네트워크 프로토콜이 전혀 관여하지 않으므로 원격 공격 표면은 존재하지 않습니다. exploitation을 위해서는 로컬에서 지속적으로 통계 수집 요청을 반복해 커널 메모리 누수를 유발해야 하는데, 이는 시스템 자원을 장시간 점유할 수 있는 권한이 필요하므로 실전 활용 난이도는 중간 정도로 평가됩니다. 따라서 이 취약점은 로컬 Low‑privilege 조건에서 이론적으로는 쉬우나, 실제 악용 가능성은 EPSS와 KEV 부재가 시사하듯 제한적입니다.
💥 영향 분석
refcount 누수는 직접적인 권한 상승이나 데이터 무결성 훼손은 없지만, 커널 메모리 고갈로 인한 서비스 중단(DoS) 위험이 존재합니다. CVSS 벡터 AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H 로부터 알 수 있듯 영향은 가용성에 국한됩니다.
🔗 관련 취약점·체이닝
blk‑cgroup 의 메모리 관리 결함은 동일 계열의 다른 cgroup 서브시스템(예: memory, cpu) 과 연계될 경우 전체 cgroup 트리에서 자원 할당 오류를 일으킬 수 있습니다. 현재 확인된 직접적인 체인 CVE는 없으며, 일반적인 커널 메모리 누수 취약점(CVE‑2022‑XXXX 등)과 유사한 공격 흐름을 가질 가능성이 있습니다.
🔎 탐지
-
로그 지표
dmesg/kernel.log에서 “blk‑cgroup” 혹은 “refcount leak” 문자열이 포함된 메시지가 기록될 경우./proc/slabinfo의blk_cgslab 항목에서 객체 수가 비정상적으로 급증하는 추세.
-
SIEM 쿼리 예시 (예: Elastic Security)
text1event.module:"kernel" and message:/blk[-_]cgroup.*refcount/또는
text1source.syslog.keyword:"blk-cgroup" and source.syslog.message:*leak* -
정규식 예시
(?i)blk[-_]?cgroup.*(?:refcount|leak) -
오탐 튜닝
- 정상적인 blk‑cgroup 초기화 로그(예: “blk-cgroup initialized”) 은 제외하도록
AND NOT message:*initialized*를 추가. - 급격한 slab 증가 알림은 일정 기간(5 분) 평균값 대비 3σ 이상 초과 시 경보로 제한해 일시적 부하에 의한 오탐을 감소.
- 정상적인 blk‑cgroup 초기화 로그(예: “blk-cgroup initialized”) 은 제외하도록
-
추가 탐지 포인트 (옵션)
- OOM killer 발생 로그와 연계:
event.module:"kernel" and message:/Out of memory/ and message:/blk_cg/
- OOM killer 발생 로그와 연계:
🛡️ 완화 방안
- 조치 : Live‑patch 적용 (kpatch/kgraft)
- 배포된 커널 라이브 패치를 이용해
class_dev_iter_exit()호출을 삽입하는 임시 패치를 적용.
- 배포된 커널 라이브 패치를 이용해
- 난이도 : ★★★ (패키지 관리와 live‑patch 서비스 연동 필요)
- 운영 영향 : 시스템 재부팅 없이 적용 가능하지만, 패치 적용 후 커널 모듈 호환성 검증 필요.
- 검증 :
kpatch list로 활성화 상태 확인, 이후 동일 로그/슬랩 지표가 정상 수준 유지되는지 관찰.
⚖️ 위험도 / 우선순위
- 조치: monitor (모니터링)
- 근거: CVSS=5.5 · non-KEV · EPSS=0.00227 · exploit=hard · in_scope=None