🇰🇷 한글 설명
Linux 커널의 Bluetooth EIR 처리 과정에서 eir_get_service_data() 함수가 데이터 길이를 잘못 계산하여 발생하는 Out-of-Bounds(OOB) Read 취약점입니다. 잘못된 길이 계산으로 인해 버퍼 범위를 벗어난 메모리를 읽게 되며, 이는 ISO 브로드캐스트 싱크 환경에서 사용자 공간의 메모리 정보가 유출될 수 있는 위험을 초래합니다.
💡 쉬운 설명
블루투스 신호를 처리할 때 데이터의 길이를 잘못 계산하여, 허용된 범위를 넘어선 컴퓨터 내부의 민감한 정보를 몰래 읽어갈 수 있는 결함입니다. 공격자가 특수하게 조작된 블루투스 신호를 보내면 시스템의 중요한 데이터가 유출될 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
Bluetooth: eir: Fix OOB read in eir_get_service_data()
eir_get_service_data() walks the advertising data for a Service Data
field with a matching UUID. On a mismatch it advances:
eir += dlen;
eir_len -= dlen;
eir_get_data() reports dlen as the field's data length, but the field
spans dlen + 2 bytes once its length and type bytes count, and more
when non-Service-Data fields were skipped to reach it. The pointer
lands correctly on the next field. eir_len does not, and the shortfall
compounds across fields until eir_get_data() reads the length and type
bytes of a "field" past the end of the buffer.
For an ISO broadcast sink that buffer is hcon->le_per_adv_data[], filled
from the periodic advertising reports of a remote broadcaster. A PA
payload packed with mismatching Service Data fields walks off the array
into the rest of struct hci_conn. A drifted field that matches the BAA
UUID puts those bytes in iso_pi(sk)->base, where user space reads them
back with getsockopt(BT_ISO_BASE).
Recompute eir_len from the end of the buffer each iteration.
📍 영향받는 시스템
Linux Kernel (Bluetooth EIR/ISO Broadcast 관련 모듈 사용 시스템)
⚔️ 공격 벡터
조작된 Service Data 필드를 포함한 주기적 광고(Periodic Advertising) 페이로드를 전송하여 메모리 읽기 유도
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 eir_len 재계산 로직 적용
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 수정된 패치 버전 이후인지 확인하십시오.