CVE-2026-19939 in Zephyr정보

요약

\~에 의해 VulDB • 2026. 10. 13.

AVDTP 시그널링 레이어는 로컬 장치가 AVDTP 요청을 발행할 때마다 avdtp_send_cmd()에서 6초의 명령어 타임아웃(AVDTP_TIMEOUT)을 활성화합니다. subsys/bluetooth/host/classic/avdtp.c에 있는 모든 응답 핸들러는 대기 중인 요청을 지우기 전에 session->timeout_work를 취소하지만, bt_avdtp_l2cap_disconnected()은 session->req만 지우고 지연 가능 작업(delayable work)이 활성화된 상태로 남겨둡니다. struct bt_avdp 세션은 struct bt_a2dp의 첫 번째 멤버이며, 해당 인스턴스는 연결별 정적 배열에 존재합니다. a2dp_get_connection()(subsys/bluetooth/host/classic/a2dp.c 위치)는 session->br_chan.chan.conn이 NULL인 경우 즉시 memset()을 사용하여 슬롯을 초기화하는데, 이는 L2CAP 레이어가 디스커넥트 콜백 반환 직후 설정하는 상태입니다.

원격 Bluetooth BR/EDR 피어는 AVDTP 시그널링 채널을 열어 로컬 애플리케이션이 AVDTP 프로시저를 발행하도록 유도한 후(표준 A2DP 흐름은 연결된 콜백에서 bt_a2dp_discover()를 호출함), 응답 없이 시그널링 채널을 종료하고 남은 타임아웃 창 내에서 다시 엽니다. 재연결은 a2dp_accept() → a2dp_get_connection()로 이어지며, 이는 작업 항목의 struct _timeout이 커널의 전역 타임아웃 목록에 연결된 상태로 유지되는 동안 전체 struct bt_a2dp를 0으로 초기화합니다. 디스커넥트와 재연결 시점은 공격자가 선택하므로 레이스 컨디션(race condition)을 이길 필요가 없으며, 암호화된 BR/EDR 링크가 필요하고 CONFIG_BT_A2DP(실험적 기능)가 활성화되어 있어야 합니다.

기본 CONFIG_TIMEOUT_BACKEND_DLIST 백엔드를 사용할 때 커널은 타임아웃이 비활성화되었는지 확인하기 위해 해당 노드가 목록에 연결되어 있는지 테스트합니다. 따라서 memset() 이후에는 전역 타임아웃 목록에 여전히 있는 노드를 가비지로 처리하며, announce 경로는 링크와 핸들러 포인터가 NULL인 노드를 팝하고, 재활용된 세션에서 다음 bt_work_reschedule() 호출은 이미 해당 항목이 포함된 목록으로 동일한 노드를 다시 삽입합니다. 그 결과 타이머, 타임슬라이스 및 슬립에 의존하는 단일 커널 데이터 구조체가 손상되며, 0으로 초기화되거나 낡은(list) 링크 포인터를 통한 쓰기 작업과 NULL 핸들러 디스패치로 인해 A2DP 세션에만 국한된 오류가 아닌 시스템 전체의 크래시 또는 후킹(hang)이 발생합니다.

해결책은 bt_avdtp_l2cap_disconnected() 상단에서 session->timeout_work를 취소하고, k_work_init_delayable()을 avdtp_send_cmd()에서 세션 확립 경로인 bt_avdtp_connect() 및 bt_avdtp_l2cap_accept()로 이동시켜 디스커넥트 콜백이 실행되기 전에 항상 작업 항목이 초기화되도록 합니다.

If you want to get best quality of vulnerability data, you may have to visit VulDB.

책임이 있는

Zephyr

예약하다

2026. 08. 15.

모더레이션

수락

항목

VDB-417816

EPSS

0.00000

출처

Want to stay up to date on a daily basis?

Enable the mail alert feature now!