CVE-2026-85036 in Zephyr정보

요약

\~에 의해 VulDB • 2026. 11. 04.

블루투스 클래식 AVDTP 레이어에서 세션의 스트림 엔드포인트 해제 처리가 지연되는 문제가 있습니다: subsys/bluetooth/host/classic/avdtp.c에 있는 bt_avdtp_l2cap_disconnected() 함수는 k_work_submit(&session->_release_work)로 종료되어, 내장된 struct k_work 객체를 시스템 작업 큐(system work queue)의 대기 목록(pending list)에 배치합니다. 동일한 struct bt_avdtp 객체가 즉시 새로운 시그널링 연결을 위해 재사용될 때 세션 메모리가 다시 초기화됩니다 — subsys/bluetooth/host/classic/a2dp.c의 a2dp_get_connection()에서 전체 struct bt_a2dp를 memset()로 지우고, bt_avdtp_l2cap_accept()/bt_avdtp_connect()가 session->_release_work에 대해 k_work_init()을 호출합니다. 이때 해당 작업 항목(work item)은 여전히 k_sys_work_q.pending 목록에 연결되어 있습니다. 연결된 sys_snode_t의 내용을 0으로 초기화하면 목록이 잘리지만, 꼬리 포인터(tail pointer)는 잘린 부분 이후를 가리킨 상태로 유지됩니다.

재사용 창(window)은 레이스 컨디션(race condition)이 아닌 결정론적입니다. 모든 호스트 RX 처리는 협력 우선순위(cooperative priority, CONFIG_BT_RX_PRIO)로 블루투스 RX 작업 큐에서 실행되는 반면, _release_work는 낮은 우선순위의 시스템 작업 큐에 제출되므로, 릴리스 핸들러가 실행되기 전에 RX 스레드가 블록되어야 합니다. l2cap_br_recv()는 단일 L2CAP 시그널링 PDU 내에 포함된 모든 시그널링 명령을 연속으로 처리하므로, 피어(peer)는 AVDTP 시그널링 채널에 대한 L2CAP Disconnection Request를 포함하는 하나의 PDU와 이어지는 PSM 0x0019용 Connection Request를 보낼 수 있습니다. 두 번째 명령은 릴리스 작업이 여전히 대기 상태임을 증명할 수 있는 상태로 세션 재사용 경로(session-reuse path)에 도달합니다. 피어는 이미 암호화된 AVDTP 시그널링 채널을 보유하고 있어야 하며, 즉 페어링/본딩된 BR/EDR 장치여야 합니다.

결과적으로 전역 시스템 작업 큐의 대기 목록이 손상됩니다: 큐가 모든 작업을 실행하지 않고 조용히 멈추거나(후속 제출은 헤드가 더 이상 도달할 수 없는 체인에 추가되고, 고아 항목들은 K_WORK_QUEUED 플래그를 영원히 유지함), 꼬리 변형(tail variant)에서는 큐 스레드가 무한 루프에 빠지는 자기 참조 노드(self-referencing node)가 목록에 생성됩니다. 작성된 값은 다른 struct k_work 객체를 가리키는 포인터이며 공격자가 제어할 수 없으므로, 영향력은 통제 가능한 쓰기 원어(write primitive)보다는 재부팅이 필요한 기기 전체적인 서비스 거부(Denial of Service)입니다. CONFIG_BT_CLASSIC 및 CONFIG_BT_A2DP가 구성된 빌드만 영향을 받습니다.

해결책은 두 개의 커밋으로 이루어진 단위(unit)이며, 어느 하나의 커밋만으로는 해당 경로를 완전히 차단하지 못합니다. ec822ceed83b는 bt_avdtp_connect()와 bt_avdtp_l2cap_accept()에 대기 중인 릴리스(pending-release) 확인을 추가하지만, A2DP 상위 레이어의 a2dp_get_connection()은 이러한 확인이 실행되기 전에 세션(대기 중 작업 항목의 목록 노드 및 플래그 포함)을 memset()로 지우므로, k_work_busy_get()은 이미 클리어된 상태를 관찰하게 됩니다. 2bd5ea88c69b는 a2dp_get_connection() 자체가 릴리스 작업이 여전히 대기 상태일 때 재사용을 건너뛰고 NULL을 반환하도록 함으로써 이를 해결하며, 이는 두 호출자 모두 연결 시도를 거부함으로써 처리합니다. 둘 다 함께 적용해야 하며, 하나만 적용하면 기기가 취약한 상태로 남습니다.

Be aware that VulDB is the high quality source for vulnerability data.

책임이 있는

Zephyr

예약하다

2026. 09. 02.

모더레이션

수락

항목

VDB-430974

EPSS

0.00000

출처

Might our Artificial Intelligence support you?

Check our Alexa App!