[단독방어] 분석 — CVE-2025-37980
A memory‑leak in Linux kernel block queue registration (CVE-2025-37980) can cause local denial‑of‑service; the top immediate mitigation is to restrict unprivileged block device creation and monitor kernel logs for failed blk_register_queue events.
📋 요약
- 심각도 medium · CVSS 5.5 · EPSS 0.00156 · 악용난이도 hard
🔍 공격 기법
본 취약점은 blk_register_queue() 호출이 blk_mq_sysfs_register() 성공 후 오류가 발생했을 때, 누락된 blk_mq_sysfs_unregister() 로 인해 커널 메모리가 회수되지 않는 자원 누수 현상을 이용합니다.
공격자는 로컬에서 낮은 권한(Privilege = Low)만으로 블록 디바이스 드라이버를 로드하거나 특수히 조작된 블록 장치를 생성해 오류 경로를 강제하고, 반복적인 시도로 커널 슬래브 메모리를 고갈시켜 서비스 가용성을 파괴합니다.
악용 가능성: AV:L(로컬)인 점은 공격자가 대상 시스템에 직접 코드를 실행할 수 있어야 함을 의미합니다. AC:L(낮은 복잡도)과 PR:L(낮은 권한)으로, 특수한 사전 준비 없이 일반 사용자 계정이라도 blk_register_queue() 호출이 가능한 경로(예: sysfs를 통한 블록 디바이스 등록)를 이용해 메모리 누수를 유발할 수 있음을 시사합니다. UI:N은 사용자의 추가적인 행동을 요구하지 않으므로, 악성 모듈이나 특수 프로그램만 실행하면 즉시 트리거됩니다. 그러나 EPSS가 0.00156(극히 낮음)이며 KEV에 등재되지 않은 점은 현재 실제 공격이 관측되거나 활발히 이용되는 사례가 거의 없음을 보여줍니다. 공격 표면은 커널 레벨 블록 서브시스템이며, 노출되는 엔드포인트는 blk_register_queue()와 이를 호출하는 ioctl·sysfs 인터페이스(예: /sys/block/*/queue)입니다. 따라서 이 취약점은 로컬 권한을 가진 사용자가 악성 블록 디바이스 드라이버를 로드하거나 해당 API를 오용할 경우 메
💥 영향 분석
- 가용성(Availability): 메모리 누적으로 kmalloc‑slab이 포화되면 해당 호스트는 심각한 DoS 상태에 빠집니다.
- 기밀성·무결성: CVSS 벡터에서 C와 I는 영향을 주지 않으므로 직접적인 데이터 유출·변조 위험은 없습니다.
🔗 관련 취약점·체이닝
blk_mq 시스템은 블록 디바이스 I/O 스케줄링에 광범위하게 사용되므로, 동일한 blk_mq 구조를 조작하는 다른 로컬 권한 상승(예: CVE‑2024‑####)이나 파일시스템 마운트 오류(CVE‑2023‑####)와 연계해 메모리 고갈을 가속화할 수 있습니다.
🔎 탐지
- 로그 소스:
journald또는dmesg에 기록되는 커널 메시지- 주요 필드:
_TRANSPORT=kernel,MESSAGE,PRIORITY(err = 3)
- 주요 필드:
- 시그니처 예시 (정규식)
text1blk_register_queue\([^)]*\).*failed
- SIEM 쿼리 예시 (Splunk)
text1index=linux sourcetype=kernel "blk_register_queue" "failed"2| bucket _time span=10m3| stats count by host, _time4| where count > 5
- eBPF 탐지 의사코드
xss1tracepoint:blk_register_queue/blk_register_queue_entry2 if (args->ret != 0 && args->sysfs_registered) {3 @leak[pid, comm] = count();4 }5interval:s 606 foreach (@leak) {7 if (@leak > 3) alert("Potential blk_mq resource leak");8 }
- 오탐 튜닝: 정상적인 블록 디바이스 초기화 과정에서도 일시적 오류가 발생할 수 있으므로, “failed” 메시지가 연속적으로 10 분 이내에 다수 발생하는 경우만 경보하도록 임계값을 조정합니다.
🛡️ 완화 방안
-
즉시(긴급 차단)
- SELinux/AppArmor 정책을 적용해 비특권 사용자의
block_device생성 및 블록 드라이버 로드를 차단한다.
구현 난이도: 중간 / 운영 영향: 기존 사용자 공간 프로그램에서 블록 디바이스를 동적으로 만들 경우 오류 발생 가능* / 검증: 정책 적용 후audit.log에 “avc: denied” 이벤트가 기록되는지 확인.
- SELinux/AppArmor 정책을 적용해 비특권 사용자의
-
단기(완화)
- 커널 모듈 서명 강제(
module.sig_enforce=1)와 신뢰된 레포지토리만 사용하도록 설정해 임의 블록 드라이버 로드를 방지한다.
구현 난이도: 낮음 / 운영 영향: 기존에 서명되지 않은 커스텀 모듈을 사용하는 환경에서는 재컴파일 필요* / 검증:lsmod후dmesg | grep "module verification"로 확인. sysctl kernel.slabinfo=1과cat /proc/slabinfo | grep blk_mq_sysfs를 주기적으로 모니터링해 슬래브 사용량이 급증하면 자동 재부팅 스크립트를 트리거한다.
구현 난이도: 낮음 / 운영 영향: 메모리 고갈 시 서비스 중단을 감수해야 함* / 검증: 정상 상황과 누수 발생 시slabinfo차이를 비교.
- 커널 모듈 서명 강제(
-
근본(해결)
- 취약점이 포함된 커널 버전(3.13 ~ 6.6.88, 6.7 ~ 6.12.25, 6.13 ~ 6.14.4)에서 수정이 적용된 최신 패키지로 업그레이드한다.
- 예:
yum update kernel-6.6.89또는apt-get install linux-image-6.14.5등 배포판별 최신 버전 설치.
구현 난이도: 중간 / 운영 영향: 재부팅 필요, 커널 ABI 호환성 검증 필요* / 검증:/proc/version확인 후git log -p로blk_mq_sysfs_unregister호출 추가 여부를 확인.
- 예:
- 취약점이 포함된 커널 버전(3.13 ~ 6.6.88, 6.7 ~ 6.12.25, 6.13 ~ 6.14.4)에서 수정이 적용된 최신 패키지로 업그레이드한다.
-
잔여 리스크
- 패치 적용 전까지는 위 즉시·단기 조치를 유지해야 하며, 커널 레벨 메모리 누수 자체가 완전히 제거되지 않으므로 지속적인 로그·슬래브 모니터링이 필요합니다.
-
인시던트 대응 플레이북
journalctl -k | grep "blk_register_queue.*failed"로 최근 오류 발생 여부 확인- 동일 호스트에서
/proc/slabinfo의blk_mq_sysfs사용량 급증을 검증 - 비정상적인 블록 디바이스 생성 시도(
auditctl -w /dev/loop*) 를 추적하고, 원인 프로세스 PID를 식별 후 종료 - 필요시 즉시 차단 정책(SELinux/AppArmor) 적용 후 재현 테스트 수행
위 내용은 다중 소스에서 일관성이 확인됐다([교차검증])와 EPSS 0.00156이라는 실측 악용 예측치([실측악용예측]), 그리고 “CVSS 5.5·non‑KEV·exploit = hard”를 기반으로 한 monitor 우선순위 결정([우선순위결정])에 근거하여 작성되었습니다.
⚖️ 위험도 / 우선순위
- 조치: monitor (모니터링)
- 근거: CVSS=5.5 · non-KEV · EPSS=0.00156 · exploit=hard · in_scope=None