🇰🇷 한글 설명
Linux 커널의 Bluetooth RFCOMM 프로토콜에서 skb 길이를 검증하지 않아 발생하는 취약점입니다. 프레임 길이가 헤더 크기보다 작을 경우 초기화되지 않은 메모리를 읽는 OOB Read가 발생하며, 길이가 0인 경우 언더플로우로 인해 메모리 범위를 크게 벗어나는 읽기 오류가 발생할 수 있습니다.
💡 쉬운 설명
블루투스 통신을 할 때 데이터의 길이가 너무 짧으면 컴퓨터가 잘못된 메모리 영역을 읽어버리는 문제입니다. 이로 인해 시스템 정보가 유출되거나 프로그램이 비정상적으로 종료될 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
Bluetooth: RFCOMM: validate skb length in rfcomm_recv_frame
rfcomm_recv_frame() casts skb->data to struct rfcomm_hdr and dereferences
hdr->addr and hdr->ctrl without validating skb->len first. A truncated
frame with skb->len less than the minimum header size causes an
out-of-bounds read of uninitialized memory. Additionally, a zero-length
frame causes skb->len-- to underflow to UINT_MAX, making
skb_tail_pointer() read far past the buffer.
Commit 23882b828c3c ("Bluetooth: RFCOMM: validate skb length in MCC
handlers") fixed the same class of missing-length-check bugs in the MCC
sub-handlers, but the top-level rfcomm_recv_frame() was left unfixed.
KMSAN reports:
BUG: KMSAN: uninit-value in rfcomm_run
...
Uninit was created at:
__alloc_skb+0x474/0xb60
vhci_write+0xe9/0x870
Fix this by rejecting frames smaller than sizeof(struct rfcomm_hdr) + 1
(the minimum frame must have a 3-byte header and a 1-byte FCS).
📍 영향받는 시스템
Linux kernel (Bluetooth RFCOMM module 사용 시스템)
⚔️ 공격 벡터
조작된 짧은 길이의 RFCOMM 프레임을 전송하여 메모리 읽기 오류 유도
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트
🔧 검증 코드
현재 실행 중인 커널 버전을 확인하여 해당 취약점이 수정된 패치 버전인지 확인합니다.