[단독공격] 분석 — CVE-2024-53170
A local use‑after‑free in the Linux blk_mq block layer can be triggered by low‑privileged users to corrupt kernel memory, so patched kernels must be deployed without delay.
📋 요약
- 심각도 high · CVSS 7.8 · EPSS 0.0024 · 악용난이도 hard
🔍 공격 기법
-
공격 표면
blk_mq_destroy_queue()가 호출될 때tags->rqs[]에 남아 있는 플러시 요청을 해제하지 않는 흐름.del_gendisk()로QUEUE_FLAG_INIT_DONE가 클리어되는 시점과blk_queue_init_done()검사 사이의 상태 불일치가 핵심.- 대상 디바이스: SCSI·virtio 등 blk_mq 를 사용하는 블록 디바이스(예:
/dev/loop*,/dev/sd*).
-
트리거 조건 (AV:L / AC:L / PR:L / UI:N)
- 커널 버전이
6cfeadb… ≤ x < 1921fe7d…혹은 5.19 이상이며, 해당 패치가 적용되지 않은 상태(다중 소스에서 일관성이 확인됨). - 로컬 사용자에게 블록 디바이스 생성·삭제 권한이 있어
del_gendisk()를 실행할 수 있음 (PR:L). - 연속적인 디스크 초기화·해제 작업을 통해
blk_mq_destroy_queue()가 플러시 RQ 를 비우지 못하도록 타이밍을 맞춤 (AC:L).
- 커널 버전이
-
공격 단계
- 정찰 –
/proc/version,uname -r로 커널 버전 확인;lsblk,dmesg로 blk_mq 사용 여부 파악. - 초기 접근 –
losetup -f /path/to/file등으로 루프 디바이스 생성 후,ioctl(BLKFLUSH)혹은 파일 시스템 레이어에서fsync/sync호출로 플러시 요청을 대기 상태로 만든다. - 플래그 조작 – 바로 뒤에
del_gendisk /dev/loopX를 수행해 디스크를 해제하면서QUEUE_FLAG_INIT_DONE가 클리어되도록 함. - UAF 트리거 –
blk_mq_destroy_queue()가 실행될 때 아직 해제되지 않은 플러시 요청 구조체가blk_mq_find_and_get_req()에서 dereference 되어 KASAN 로그에 “slab‑use‑after‑free” 가 기록된다. - 후속 활용 – 메모리 재할당이 가능한 시점에 동일 크기의 객체(예: 다른
struct request혹은 커널 내부 구조) 를 할당해, 해제된 구조체의 함수 포인터를 공격자가 제어한 주소로 덮어쓰면 커널 코드 실행 가능(※ 실제 활용 여부는 추가 연구 필요).
- 정찰 –
-
난이도 – 정확한 타이밍과 디스크 큐 조작이 요구되므로 EPSS 0.0024 로 “hard” 수준으로 평가됨. 다만 로컬 권한만 있으면 트리거 자체는 가능하다는 점에서 AV:L, PR:L, UI:N 벡터와 일치한다.
악용 가능성: 이 취약은 AV:L·AC:L·PR:L·UI:N 벡터에 따라 “로컬 환경에서 낮은 권한(일반 사용자)만 있으면 복잡한 사전 준비 없이 바로 이용 가능”하다는 전제조건을 의미합니다. 실제 공격은 블록 서브시스템의 blk_mq_find_and_get_req 함수가 I/O 플러시 요청을 처리할 때, del_gendisk 후에 QUEUE_FLAG_INIT_DONE 플래그가 해제되는 흐름을 강제로 재현하면 발생하는데, 이는 디스크 삭제·재등록 작업을 수행할 수 있는 사용자 수준 프로세스만으로도 트리거됩니다. 공격 표면은 커널 내부 blk‑mq 태깅 구조와 flush rq 배열이며, 해당 배열에 접근되는 모든 블록 I/O 경로(예: /dev/sdX 디바이스 파일을 통한 read/write)에서 악용이 가능합니다. EPSS 0.0024라는 수치는 현재까지 실제 공격 사례가 드물지만 완전히 무시할 수준은 아니며, KEV에 등재되지 않은 점은 아직 공개된 익스플로잇이 없다는 의미이지만 이론적으로 로컬 권한 상승을 충분히 달성할 수 있음을 시사합니다. 따라서 난이도는 “hard”로 평가되지만, 로컬 접근 권한만 확보하면 복잡도·조건이 낮아 실전에서 충분히 활용될 가능성이 존재합니다.
💥 영향 분석
- 커널 메모리 손상 → 임의 코드 실행 또는 시스템 크래시(DoS).
- 성공 시 공격자는 루트 권한을 획득해 전체 시스템 기밀·무결성·가용성을 장악할 수 있음.
🔗 관련 취약점·체이닝
- CWE‑416 (Use‑After‑Free) 유형, 블록 레이어 메모리 관리 결함.
- 추정: 동일 커널 버전에서 보고된 다른
blk_mq관련 UAF(CVE‑2023‑xxxx 등)와 연계하면 재사용 패턴을 예측해 RCE 성공 확률이 상승할 수 있음. - 추정:
CONFIG_DEBUG_KMEMLEAK비활성화 시 메모리 재배치가 예측 가능해져, NVMe 초기화 버그와 결합하면 권한 상승 경로가 단축될 가능성이 존재함.
🔎 탐지
- KASAN 또는 Oops 로그에
BUG: KASAN: slab-use-after-free in blk_mq_find_and_get_req와 함께 주소가 출력되는 경우. - 비정상적인
kworker/1:*스레드가blk_mq_timeout_work를 수행하는 순간을 auditd/syslog 로 기록하고 알림 생성. /proc/kallsyms에서blk_mq_destroy_queue호출 빈도 급증 시 모니터링 경보.
🛡️ 완화 방안
- 패치 적용 – 커밋
aec89dc5d421이후 수정이 포함된 최신 커널(6.6.x‑stable 이상)으로 즉시 업데이트. - 임시 보호 –
CONFIG_DEBUG_SLAB,KASAN을 활성화해 UAF 발생 시 시스템을 중단하고 로그를 남김. - 권한 제한 – 일반 사용자에게
/dev/loop*,/dev/sd*등 블록 디바이스 생성·삭제 권한을 부여하지 않도록 SELinux/AppArmor 정책 강화. - 모니터링 – 위 탐지 지표를 기반으로 실시간 알림 체계 구축 및 로그 분석 자동화.
⚖️ 위험도 / 우선순위
- 조치: scheduled (이번 주 내)
- 근거: CVSS=7.8 · non-KEV · EPSS=0.0024 · exploit=hard · in_scope=None