🔍 CVE-2026-12236

6.5
CVSS Score
MEDIUM
2026-08-13
2026-10-23 18:10
✅ 완료

🇰🇷 한글 설명

Zephyr Bluetooth 호스트의 GATT 클라이언트 함수 parse_read_std_char_desc()가 원격 GATT 서버로부터 받은 ATT Read By Type Response를 파싱할 때, 엔트리 간격(rsp->len)이 0인지 검증하지 않아 무한 루프가 발생할 수 있습니다. 이로 인해 Bluetooth 호스트 처리 스레드가 멈추는 서비스 거부(DoS) 취약점입니다.

💡 쉬운 설명

블루투스로 연결된 악의적인 기기가 잘못된 응답을 보내면 장치의 블루투스 기능이 무한 반복에 빠져 멈출 수 있습니다. 데이터 유출이나 변조는 없지만 블루투스 기능이 정지되거나 기기가 재부팅될 수 있습니다.

🇺🇸 원문 (English)

The Bluetooth host GATT client function parse_read_std_char_desc() in subsys/bluetooth/host/gatt.c parses an ATT Read By Type Response received from a remote GATT server during BT_GATT_DISCOVER_STD_CHAR_DESC discovery. The per-entry stride rsp->len is taken directly from the peer's PDU, and the parse loop both tests its exit condition (length >= rsp->len) and advances (length -= rsp->len, pdu += rsp->len) using that value. The minimum value of rsp->len was never validated before the loop. A malicious or malfunctioning peer can reply with rsp->len = 0. Because length is unsigned and never decreases, the loop condition stays true forever and the read pointer never advances; as long as the body is at least a few bytes with a non-zero handle and a matching descriptor UUID, the host repeatedly re-parses the same bytes and invokes the discovery callback, never terminating. This hangs the Bluetooth host processing thread (CWE-835, loop with unreachable exit condition). The condition is reachable by any connected peer once the local device initiates standard-descriptor-value discovery; GATT discovery does not require bonding or encryption, so an unauthenticated adjacent attacker that the device connects to can trigger it. The impact is denial of service of the Bluetooth subsystem (and likely a watchdog reset on constrained targets); there is no memory disclosure or corruption. The fix adds a rsp->len < sizeof(struct bt_att_data) check before the loop, rejecting under-length responses so the stride is always non-zero and the loop terminates. The sibling parsers parse_include() and parse_characteristic() already validated rsp->len and are unaffected.

📍 영향받는 시스템

Zephyr RTOS 기반 Bluetooth 호스트 스택 (subsys/bluetooth/host/gatt.c, 패치 이전 버전)

⚔️ 공격 벡터

인증 없이 연결 가능한 인접 블루투스 기기가 표준 디스크립터 검색 과정에서 rsp->len=0인 ATT 응답을 전송

🛡️ 대응 방법

Zephyr 패치된 버전으로 업데이트하거나, parse_read_std_char_desc() 루프 이전에 rsp->len < sizeof(struct bt_att_data) 검사를 추가

🔧 검증 코드

Zephyr 버전을 확인하고 gatt.c에 rsp->len 최소값 검사가 존재하면 패치된 것이며, 검색 결과가 없으면 취약할 가능성이 높습니다.

Shell / Script
west list zephyr 2>/dev/null || grep -rn 'sizeof(struct bt_att_data)' $(find / -path '*/bluetooth/host/gatt.c' 2>/dev/null | head -1) 2>/dev/null | head -5

📊 CVSS Vector String

CVSS Vector
CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H

💻 영향받는 소프트웨어

Windows Bluetooth Service