🔍 CVE-2026-15894

8.8
CVSS Score
HIGH
2026-10-07
2026-10-07 18:17
✅ 완료

🇰🇷 한글 설명

Bluetooth Mesh의 On-Demand Private Proxy 기능에서 Solicitation PDU 처리 시 입력 길이 검증이 누락되어 발생하는 스택 버퍼 오버플로우 취약점입니다. 공격자가 조작된 광고 패킷을 전송하면 인증 없이도 스택 메모리를 덮어써 원격 코드 실행(RCE)이나 서비스 거부(DoS)를 유발할 수 있습니다.

💡 쉬운 설명

블루투스 기기가 특정 요청을 처리할 때, 정해진 크기보다 큰 데이터를 보내면 메모리가 넘쳐흐르는 문제입니다. 이를 통해 해커가 기기를 멈추게 하거나 기기를 마음대로 조종할 위험이 있습니다.

🇺🇸 원문 (English)

The Bluetooth Mesh On-Demand Private Proxy solicitation handler in subsys/bluetooth/mesh/solicitation.c copies a received Solicitation PDU into a fixed 17-byte stack buffer without bounding the source length. In sol_pdu_decrypt(), out is allocated as NET_BUF_SIMPLE(17) and then filled with net_buf_simple_add_mem(out, in->data, in->len); net_buf_simple_add() guards its tailroom only with __ASSERT_NO_MSG, which is compiled out in production builds, so when in->len > 17 the underlying memcpy writes attacker-controlled bytes past the 17-byte stack buffer. The copy occurs before any decryption or authentication, so no key material is required to trigger it. The oversized length arises because the mesh scan callback in subsys/bluetooth/mesh/adv.c calls net_buf_simple_restore() before dispatching to bt_mesh_sol_recv(), leaving buf->len covering the entire remaining advertising payload rather than just the Solicitation Service Data. After the parser locates the Service Data AD and consumes the Identification Type byte, the remaining buf->len is the 17-octet Network PDU plus any trailing advertising bytes, and prior to this fix there was no maximum-length check (only a minimum). An attacker can therefore append extra AD structures or padding after the Solicitation Service Data to make buf->len exceed 17. bt_mesh_scan_cb() is registered directly as the BLE scan callback, so buf is raw, unauthenticated advertising data received over the air. Any device in radio range can send a non-connectable advertisement carrying a crafted mesh Proxy Solicitation to a node that has CONFIG_BT_MESH_OD_PRIV_PROXY_SRV enabled and is currently eligible to be solicited (GATT proxy disabled, On-Demand Private Proxy enabled), with no pairing, bonding, or provisioning. The result is an attacker-controlled stack overwrite — plausibly leading to remote code execution and at minimum a reliable remote denial of service. The fix trims buf->len to the spec-fixed 17 octets (dropping the PDU if fewer remain) before decryption.

📍 영향받는 시스템

CONFIG_BT_MESH_OD_PRIV_PROXY_SRV 기능이 활성화된 Bluetooth Mesh 스택 기반 시스템

⚔️ 공격 벡터

무선 범위 내에서 조작된 길이를 가진 비연결형 Bluetooth 광고 패킷(Solicitation PDU) 전송

🛡️ 대응 방법

Solicitation PDU 처리 전 데이터 길이를 규격에 맞게 17바이트로 제한하도록 소프트웨어 패치 적용

🔧 검증 코드

해당 소스 코드에서 데이터 길이를 17바이트로 제한하는 검증 로직(trimming)이 포함되어 있는지 확인합니다.

Shell / Script
grep -r "bt_mesh_sol_recv" subsys/bluetooth/mesh/ && grep -r "net_buf_simple_add_mem" subsys/bluetooth/mesh/solicitation.c

📊 CVSS Vector String

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

💻 영향받는 소프트웨어

Microsoft Entra Provisioning Service