🇰🇷 한글 설명
Linux 커널의 Belkin USB 시리얼 드라이버에서 인터럽트 상태 데이터의 길이를 적절히 검증하지 않아 발생하는 취약점입니다. 짧은 인터럽트 패킷이 수신될 경우, 드라이버가 정해진 크기보다 작은 데이터를 읽으려 시도하여 경계 외 읽기(Out-of-bounds read)가 발생할 수 있습니다.
💡 쉬운 설명
Belkin USB 장치를 사용할 때, 장치가 보내는 데이터의 길이가 예상보다 짧으면 컴퓨터 메모리의 잘못된 부분을 읽어 오류가 발생할 수 있습니다. 이로 인해 시스템이 불안정해지거나 예상치 못한 동작을 할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
USB: serial: belkin_sa: validate interrupt status length
The Belkin interrupt callback treats interrupt data as a four-byte
status report and reads LSR/MSR fields at offsets 2 and 3. The
interrupt-in buffer length is derived from endpoint wMaxPacketSize, and
short interrupt transfers may complete successfully with a smaller
actual_length.
Check the completed interrupt packet length before parsing status
fields so short interrupt endpoints and short successful packets are
ignored instead of causing out-of-bounds or stale status-byte reads.
KASAN report as below:
BUG: KASAN: slab-out-of-bounds in belkin_sa_read_int_callback()
Read of size 1
Call trace:
belkin_sa_read_int_callback() (drivers/usb/serial/belkin_sa.c:202)
__usb_hcd_giveback_urb() (drivers/usb/core/hcd.c:1630)
dummy_timer() (?:?)
📍 영향받는 시스템
Belkin USB 시리얼 드라이버(belkin_sa)를 사용하는 Linux 커널 버전
⚔️ 공격 벡터
취약한 USB 장치를 통해 조작된 짧은 길이의 인터럽트 패킷을 전송하여 발생
🛡️ 대응 방법
인터럽트 패킷의 길이를 검증하는 로직이 포함된 최신 Linux 커널로 업데이트
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 패치된 버전인지 배포판 보안 공지를 통해 확인