🇰🇷 한글 설명
Linux 커널 nbd 드라이버의 nbd_genl_connect() 오류 경로에서 nbd_start_device() 호출 이후 장치를 올바르게 중지하지 않아, 설정(config)이 해제된 뒤에도 recv_work가 이를 사용하는 use-after-free 취약점입니다. 패치는 nbd_start_device()를 백엔드 파일 생성 이후로 옮기는 방식으로 이를 해결합니다.
💡 쉬운 설명
네트워크 블록 장치(NBD) 연결을 설정하다 오류가 나면, 이미 해제된 메모리를 다시 사용하게 되는 결함입니다. 이로 인해 시스템이 불안정해지거나 충돌할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
nbd: fix uaf in nbd_genl_connect() error path
There is a use-after-free issue in nbd:
block nbd6: Receive control failed (result -104)
block nbd6: shutting down sockets
==================================================================
BUG: KASAN: slab-use-after-free in recv_work+0x694/0xa80 drivers/block/nbd.c:1022
Write of size 4 at addr ffff8880295de478 by task kworker/u33:0/67
CPU: 2 UID: 0 PID: 67 Comm: kworker/u33:0 Not tainted 6.15.0-rc5-syzkaller-00123-g2c89c1b655c0 #0 PREEMPT(full)
Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-debian-1.16.3-2~bpo12+1 04/01/2014
Workqueue: nbd6-recv recv_work
Call Trace:
<TASK>
__dump_stack lib/dump_stack.c:94 [inline]
dump_stack_lvl+0x116/0x1f0 lib/dump_stack.c:120
print_address_description mm/kasan/report.c:408 [inline]
print_report+0xc3/0x670 mm/kasan/report.c:521
kasan_report+0xe0/0x110 mm/kasan/report.c:634
check_region_inline mm/kasan/generic.c:183 [inline]
kasan_check_range+0xef/0x1a0 mm/kasan/generic.c:189
instrument_atomic_read_write include/linux/instrumented.h:96 [inline]
atomic_dec include/linux/atomic/atomic-instrumented.h:592 [inline]
recv_work+0x694/0xa80 drivers/block/nbd.c:1022
process_one_work+0x9cc/0x1b70 kernel/workqueue.c:3238
process_scheduled_works kernel/workqueue.c:3319 [inline]
worker_thread+0x6c8/0xf10 kernel/workqueue.c:3400
kthread+0x3c2/0x780 kernel/kthread.c:464
ret_from_fork+0x45/0x80 arch/x86/kernel/process.c:153
ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:245
</TASK>
nbd_genl_connect() does not properly stop the device on certain
error paths after nbd_start_device() has been called. This causes
the error path to put nbd->config while recv_work continue to use
the config after putting it, leading to use-after-free in recv_work.
This patch moves nbd_start_device() after the backend file creation.
📍 영향받는 시스템
패치 이전의 Linux 커널(nbd 드라이버 포함 빌드) 사용 시스템
⚔️ 공격 벡터
nbd 장치 연결 과정에서 오류를 유발해 해제된 메모리 접근을 일으키는 방식(로컬 권한이 필요한 것으로 추정)
🛡️ 대응 방법
배포판이 제공하는 수정된 Linux 커널 보안 업데이트를 적용하고 재부팅하십시오.
🔧 검증 코드
출력된 커널 버전을 배포판 보안 공지의 수정 버전(패치 포함 빌드)과 비교하고, 해당 버전보다 낮거나 업데이트가 적용되지 않았다면 취약할 수 있습니다.