🇰🇷 한글 설명
Linux kernel의 hv_netvsc 드라이버에서 Hyper-V 가상 함수(VF) NIC의 네임스페이스 이동 중 발생하는 NULL 포인터 역참조 취약점입니다. 네임스페이스 삭제 시 netvsc NIC이 기본 네임스페이스로 복원되면서 default_device_exit_net()의 for_each_netdev_safe 루프가 리스트 끝을 감지하지 못해 커널 패닉이 발생합니다.
💡 쉬운 설명
Hyper-V에서 실행되는 Linux 시스템의 네트워크 드라이버가 특정 상황에서 충돌하여 시스템을 멈추게 하는 문제입니다. 네트워크 네임스페이스(가상 격리 환경)를 삭제할 때 네트워크 장치 목록 처리 중 오류가 발생하는 것이 원인입니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
hv_netvsc: Fix panic during namespace deletion with VF
The existing code move the VF NIC to new namespace when NETDEV_REGISTER is
received on netvsc NIC. During deletion of the namespace,
default_device_exit_batch() >> default_device_exit_net() is called. When
netvsc NIC is moved back and registered to the default namespace, it
automatically brings VF NIC back to the default namespace. This will cause
the default_device_exit_net() >> for_each_netdev_safe loop unable to detect
the list end, and hit NULL ptr:
[ 231.449420] mana 7870:00:00.0 enP30832s1: Moved VF to namespace with: eth0
[ 231.449656] BUG: kernel NULL pointer dereference, address: 0000000000000010
[ 231.450246] #PF: supervisor read access in kernel mode
[ 231.450579] #PF: error_code(0x0000) - not-present page
[ 231.450916] PGD 17b8a8067 P4D 0
[ 231.451163] Oops: Oops: 0000 [#1] SMP NOPTI
[ 231.451450] CPU: 82 UID: 0 PID: 1394 Comm: kworker/u768:1 Not tainted 6.16.0-rc4+ #3 VOLUNTARY
[ 231.452042] Hardware name: Microsoft Corporation Virtual Machine/Virtual Machine, BIOS Hyper-V UEFI Release v4.1 11/21/2024
[ 231.452692] Workqueue: netns cleanup_net
[ 231.452947] RIP: 0010:default_device_exit_batch+0x16c/0x3f0
[ 231.453326] Code: c0 0c f5 b3 e8 d5 db fe ff 48 85 c0 74 15 48 c7 c2 f8 fd ca b2 be 10 00 00 00 48 8d 7d c0 e8 7b 77 25 00 49 8b 86 28 01 00 00 <48> 8b 50 10 4c 8b 2a 4c 8d 62 f0 49 83 ed 10 4c 39 e0 0f 84 d6 00
[ 231.454294] RSP: 0018:ff75fc7c9bf9fd00 EFLAGS: 00010246
[ 231.454610] RAX: 0000000000000000 RBX: 0000000000000002 RCX: 61c8864680b583eb
[ 231.455094] RDX: ff1fa9f71462d800 RSI: ff75fc7c9bf9fd38 RDI: 0000000030766564
[ 231.455686] RBP: ff75fc7c9bf9fd78 R08: 0000000000000000 R09: 0000000000000000
[ 231.456126] R10: 0000000000000001 R11: 0000000000000004 R12: ff1fa9f70088e340
[ 231.456621] R13: ff1fa9f70088e340 R14: ffffffffb3f50c20 R15: ff1fa9f7103e6340
[ 231.457161] FS: 0000000000000000(0000) GS:ff1faa6783a08000(0000) knlGS:0000000000000000
[ 231.457707] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ 231.458031] CR2: 0000000000000010 CR3: 0000000179ab2006 CR4: 0000000000b73ef0
[ 231.458434] Call Trace:
[ 231.458600] <TASK>
[ 231.458777] ops_undo_list+0x100/0x220
[ 231.459015] cleanup_net+0x1b8/0x300
[ 231.459285] process_one_work+0x184/0x340
To fix it, move the ns change to a workqueue, and take rtnl_lock to avoid
changing the netdev list when default_device_exit_net() is using it.
📍 영향받는 시스템
Linux kernel 6.16.0-rc4 이전 버전 (Hyper-V 하이퍼바이저에서 실행되는 시스템, 특히 MANA 드라이버 사용)
⚔️ 공격 벡터
로컬 권한자가 네트워크 네임스페이스 삭제 작업을 수행하여 커널 패닉 유발 (DoS)
🛡️ 대응 방법
Linux kernel을 6.16.0-rc4 이후 버전으로 업그레이드하거나 hv_netvsc 드라이버의 네임스페이스 변경 로직에 rtnl_lock을 적용한 패치 적용
🔧 검증 코드
현재 커널 버전이 6.10~6.16.0-rc4 범위에 있으면 취약, 그 외는 패치됨 또는 다른 버전. Hyper-V 환경인지 확인하려면: dmesg | grep -i 'hyper-v' 명령 실행
uname -r | grep -E '^6\.(1[0-5]|16\.0-rc[0-4])' && echo 'Vulnerable' || echo 'Patched/Different kernel'
📊 CVSS Vector String
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
💻 영향받는 소프트웨어
Linux Kernel
Microsoft Access