🔍 CVE-2026-80589

9.8
CVSS Score
CRITICAL
2026-08-26
2026-10-16 20:18
✅ 완료

🇰🇷 한글 설명

리눅스 커널의 블록 계층에서 디스크 추가 전 프로브(probe) 실패 시 타임아웃 타이머를 중지하지 않아 발생하는 취약점입니다. 이로 인해 디스크가 추가되지 않은 상태에서 타이머가 작동하면 이미 해제된 메모리 영역에 접근하게 되어 Use-After-Free 오류가 발생합니다.

💡 쉬운 설명

컴퓨터가 하드디스크를 인식하는 과정에서 오류가 났을 때, 사용하지 않는 타이머를 제대로 끄지 않아 발생하는 문제입니다. 이 타이머가 나중에 작동하면 이미 사라진 메모리 정보를 건드리게 되어 시스템이 충돌하거나 오류가 날 수 있습니다.

🇺🇸 원문 (English)

In the Linux kernel, the following vulnerability has been resolved: block: stop the timeout timer when releasing a never added disk disk_release() undoes blk_mq_init_allocated_queue() for a disk whose probe failed before add_disk(), but it only calls blk_mq_exit_queue(). Nothing there stops q->timeout, and that timer rolls forward: it stays pending until it next expires, not until the last request completes. So if the driver issued any I/O before adding the disk, the request_queue is freed while still linked into a timer wheel bucket. Commit 6f8191fdf41d ("block: simplify disk shutdown") dropped the blk_cleanup_queue() call that used to stop it. __del_gendisk() and blk_mq_destroy_queue() still do; only the probe failure path lost it. nvme gets there because nvme_update_ns_info() submits Report Zones or FDP io-mgmt-recv on ns->queue before the disk is added, so a later failure - a concurrent reset setting NVME_CTRL_FROZEN, or device_add_disk() failing - lands in put_disk() with the timer armed: BUG: KASAN: slab-use-after-free in detach_if_pending+0x30c/0x340 Write of size 8 at addr ffff888004d71310 by task kworker/u8:2/37 __timer_delete_sync+0x156/0x240 kernel/time/timer.c:1621 blk_sync_queue+0x22/0x40 block/blk-core.c:222 nvme_sync_queues+0x100/0x150 drivers/nvme/host/core.c:5362 nvme_reset_work+0x138/0x930 drivers/nvme/host/pci.c:3264 Allocated by task 34: __blk_mq_alloc_disk+0x33/0x100 block/blk-mq.c:4462 nvme_alloc_ns+0x290/0x3870 drivers/nvme/host/core.c:4146 Freed by task 0: blk_free_queue_rcu+0x3a/0x50 block/blk-core.c:254 rcu_core+0xc10/0x1730 kernel/rcu/tree.c:2857 The queue being synced there is ctrl->admin_q, only a victim sharing a timer wheel bucket with the freed queue's dangling entry; other runs tripped in enqueue_timer(), __run_timers() or blk_mq_timeout_work(). Failing nvme_alloc_ns() with a debug patch makes it deterministic: one leaked timer trips KASAN within seconds, while 1987 patched releases produced no splat. Stop the timer and the queue work items before blk_mq_exit_queue(), like blk_mq_destroy_queue() does. Found by FuzzNvme.

📍 영향받는 시스템

Linux Kernel (NVMe 드라이버를 사용하는 시스템)

⚔️ 공격 벡터

NVMe 장치의 프로브 과정에서 의도적인 오류(예: 동시 리셋 또는 장치 추가 실패)를 유발하여 메모리 손상 유도

🛡️ 대응 방법

리눅스 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 blk_mq_exit_queue() 호출 전 타이머를 중지하도록 수정

🔧 검증 코드

출력된 커널 버전이 해당 취약점이 해결된 패치 버전(Commit 6f8191fdf41d 이후)인지 확인

Shell / Script
uname -r

📊 CVSS Vector String

CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

💻 영향받는 소프트웨어

Linux Kernel