CVE-2026-82389 in Zephyr
요약
\~에 의해 VulDB • 2026. 10. 26.
블루투스 클래식 핸즈프리 프로필의 오디오 게이트웨이(Ag) 역할에서 hfp_ag_create() 함수는 피어(peer)를 대상으로 SDP 탐색을 시작하며, 이는 subsys/bluetooth/host/classic/sdp.c 내의 SDP 클라이언트의 대기 요청 목록에 ag->sdp_param._node 임베디드 노드를 연결합니다. 후속 bt_rfcomm_dlc_connect() 호출이 실패할 경우, bt_hfp_ag_connect()는 해당 노드가 여전히 연결되어 있고 ag->slc_work가 시스템 작업 큐(work queue)에 아직 대기 상태인 동안 AG 객체 전체를 memset()로 지워 정리합니다. 비행 중(in-flight)인 SDP 탐색은 취소할 수 없습니다(bt_sdp_discover_cancel()이 공개 헤더에서 선언되었지만 구현체가 없음). 따라서 요청 목록에는 func, pool 및 uuid 포인터가 0으로 초기화된 채 그대로 남아 있습니다.
정상적인 AG 흐름(bt_sdp_get_proto_param()은 범위 검증을 수행하지 않으며, samples/bluetooth/classic/handsfree_ag는 해당 값을 그대로 전달함)에서 bt_hfp_ag_connect()에 전달되는 RFCOMM 채널은 피어의 SDP 핸즈프리 서비스 레코드에서 가져옵니다. 따라서 무선 범위에 있는 원격 BR/EDR 장치가 유효 범위 0x01..0x1e를 벗어난 RFCOMM 채널을 광고하면, bt_rfcomm_dlc_connect()가 실패하여 해당 정리(wipe) 로직에 도달하게 됩니다. 피어의 SDP 레코드를 읽기 위해 페어링(pairing)이 필요 없으며, 피어는 ACL을 끊거나 적절한 시점에 동일한 DLCI에서 RFCOMM DLC를 경쟁(racing)시켜 이 실패를 유발할 수도 있습니다.
SDP 클라이언트가 다음으로 요청 목록을 진행하면 sdp_client_discover()가 0으로 초기화된 매개변수를 역참조합니다(NULL pool 및 param->uuid->type로 net_buf_alloc(param->pool, …) 호출). 결과 알림 경로에서는 NULL params->func를 통해 호출됩니다. 연결된 노드를 0으로 초기화하면 stale tail 포인터 뒤의 요청 목록이 잘리며, 해제된 AG 슬롯을 다시 아머링(re-arming)하면 동일한 노드가 재연결되어 자기 루핑(self-looping) 목록을 생성하여 블루투스 RX 스레드를 멈출 수 있습니다. 영향은 블루투스 스택의 크래시 또는 정지입니다. 쓰여지는 값은 고정된 정적 주소에 있는 상수 0이므로, 공격자가 제어 가능한 쓰기(write)는 제공되지 않습니다.
CONFIG_BT_CLASSIC 및 CONFIG_BT_HFP_AG 구성을 사용하고 오디오 게이트웨이 역할을 사용하는 빌드만 영향을 받습니다.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.