🇰🇷 한글 설명
Linux 커널의 Bluetooth bpa10x 드라이버에서 bpa10x_setup() 함수가 응답 데이터의 길이를 확인하지 않고 revision 문자열을 읽어 발생하는 OOB(Out-of-Bounds) Read 취약점입니다. 이로 인해 데이터 경계를 벗어난 인접 슬랩 메모리가 커널 로그 및 debugfs 파일에 노출될 수 있습니다.
💡 쉬운 설명
블루투스 장치가 잘못된 형식의 짧은 응답을 보낼 때, 컴퓨터가 메모리의 허용된 범위를 넘어 다른 정보를 읽어버리는 문제입니다. 이 과정에서 시스템 내부의 민감한 정보가 로그 파일에 기록되어 유출될 위험이 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
Bluetooth: bpa10x: avoid OOB read of revision string in bpa10x_setup()
bpa10x_setup() sends the vendor command 0xfc0e and passes the response
to bt_dev_info() and hci_set_fw_info() as a "%s" string starting at
skb->data + 1, without checking the length:
bt_dev_info(hdev, "%s", (char *)(skb->data + 1));
hci_set_fw_info(hdev, "%s", skb->data + 1);
A device that returns a one-byte response (status only) leaves
skb->data + 1 past the end of the data, and the %s walk reads adjacent
slab memory until it meets a NUL. The same happens when the payload is
not NUL-terminated within skb->len. The out-of-bounds bytes end up in
the kernel log and the firmware-info debugfs file.
Print the revision string with a bounded "%.*s" limited to skb->len - 1
instead. This keeps the string readable for well-behaved devices while
never reading past the received data, and does not fail setup, so a
device returning a short or unterminated response keeps working.
📍 영향받는 시스템
Linux kernel (Bluetooth bpa10x driver 포함 버전)
⚔️ 공격 벡터
조작된 응답을 보내는 악의적인 블루투스 장치를 통한 메모리 정보 유출
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 문자열 읽기 범위를 제한해야 합니다.
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 수정된 패치 버전 이후인지 확인합니다.