🇰🇷 한글 설명
Linux 커널의 USB sisusbvga 드라이버가 사용하는 엔드포인트의 존재 여부와 타입을 검증하지 않아 발생하는 취약점입니다. 악성 또는 비정상 USB 장치가 연결되면 잘못된 URB 전송으로 커널 경고(WARNING)가 발생할 수 있으며, 이는 syzbot 퍼저에 의해 발견되었습니다. 엔드포인트 검증 로직을 추가하여 해결되었습니다.
💡 쉬운 설명
리눅스 커널의 특정 USB 그래픽 드라이버가 장치의 통신 경로를 제대로 확인하지 않는 문제입니다. 비정상적인 USB 장치가 연결되면 시스템에 경고나 오작동이 발생할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
USB: sisusbvga: Add endpoint checks
The syzbot fuzzer was able to provoke a WARNING from the sisusbvga driver:
------------[ cut here ]------------
usb 1-1: BOGUS urb xfer, pipe 3 != type 1
WARNING: CPU: 1 PID: 26 at drivers/usb/core/urb.c:504 usb_submit_urb+0xed6/0x1880 drivers/usb/core/urb.c:504
Modules linked in:
CPU: 1 PID: 26 Comm: kworker/1:1 Not tainted 6.2.0-rc5-syzkaller-00199-g5af6ce704936 #0
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/12/2023
Workqueue: usb_hub_wq hub_event
RIP: 0010:usb_submit_urb+0xed6/0x1880 drivers/usb/core/urb.c:504
Code: 7c 24 18 e8 6c 50 80 fb 48 8b 7c 24 18 e8 62 1a 01 ff 41 89 d8 44 89 e1 4c 89 ea 48 89 c6 48 c7 c7 60 b1 fa 8a e8 84 b0 be 03 <0f> 0b e9 58 f8 ff ff e8 3e 50 80 fb 48 81 c5 c0 05 00 00 e9 84 f7
RSP: 0018:ffffc90000a1ed18 EFLAGS: 00010282
RAX: 0000000000000000 RBX: 0000000000000001 RCX: 0000000000000000
RDX: ffff888012783a80 RSI: ffffffff816680ec RDI: fffff52000143d95
RBP: ffff888079020000 R08: 0000000000000005 R09: 0000000000000000
R10: 0000000080000000 R11: 0000000000000000 R12: 0000000000000003
R13: ffff888017d33370 R14: 0000000000000003 R15: ffff888021213600
FS: 0000000000000000(0000) GS:ffff8880b9900000(0000) knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 00005592753a60b0 CR3: 0000000022899000 CR4: 00000000003506e0
DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
Call Trace:
<TASK>
sisusb_bulkout_msg drivers/usb/misc/sisusbvga/sisusbvga.c:224 [inline]
sisusb_send_bulk_msg.constprop.0+0x904/0x1230 drivers/usb/misc/sisusbvga/sisusbvga.c:379
sisusb_send_bridge_packet drivers/usb/misc/sisusbvga/sisusbvga.c:567 [inline]
sisusb_do_init_gfxdevice drivers/usb/misc/sisusbvga/sisusbvga.c:2077 [inline]
sisusb_init_gfxdevice+0x87b/0x4000 drivers/usb/misc/sisusbvga/sisusbvga.c:2177
sisusb_probe+0x9cd/0xbe2 drivers/usb/misc/sisusbvga/sisusbvga.c:2869
...
The problem was caused by the fact that the driver does not check
whether the endpoints it uses are actually present and have the
appropriate types. This can be fixed by adding a simple check of
the endpoints.
📍 영향받는 시스템
sisusbvga 드라이버를 포함한 Linux 커널 (수정 이전 버전, 6.2-rc5 기준 확인)
⚔️ 공격 벡터
물리적으로 접근하여 비정상적인 USB 장치를 연결하거나, 조작된 USB 장치를 통해 커널 드라이버의 잘못된 전송 경로를 유도
🛡️ 대응 방법
Linux 커널을 엔드포인트 검증 패치가 포함된 최신 안정 버전으로 업데이트
🔧 검증 코드
커널 버전이 패치된 버전 이상인지 확인하고, sisusbvga 모듈이 로드되지 않았다면 해당 취약점의 영향을 받지 않는 상태입니다.
uname -r && (lsmod | grep sisusb || echo 'sisusbvga module not loaded')