CVE-2026-11368 in Zephyr정보

요약

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

블루투스 호스트 ATT 레이어(subsys/bluetooth/host/att.c)는 정적 배열인 tx_meta_data_storage[]를 통해 비행 중(in-flight) 상태의 각 ATT TX 버퍼를 소유 채널과 연결합니다(data->att_chan = chan). 버퍼의 마지막 참조가 해제되면, net-buf 파괴 콜백은 완료 처리를 시스템 작업 큐로 지연시킵니다(att_tx_destroy -> att_tx_destroy_work_handler -> att_on_sent_cb -> bt_att_sent). 여기서 bt_att_sent는 채널 및 해당 ATT 컨텍스트(sys_slist_get(&att->reqs))에 대한 포인터 역참조를 수행합니다.

피어가 컨트롤러 TX 경로에서 아직 비행 중인 상태인 동안(서버 알림/확인 또는 모든 응답과 같은 ATT PDU) 연결을 끊으면, L2CAP은 l2cap_chan_del()에서 채널을 해제합니다. 이는 disconnected 콜백을 실행한 후 released 콜백(bt_att_released)을 호출하여 채널 슬롯(slot)의 메모리를 해제합니다. 비행 중인 버퍼는 채널 자체의 큐가 아닌 연결 TX 경로에 의해 유지되므로, 지연된 파괴 작업이 채널이 이미 해제된 후에 실행될 수 있습니다. att_on_sent_cb에서 설정한 가드(guard)는 낡은(stale) 콜백을 제거하기 위해 meta->att_chan을 역참조하는데, 이는 이제 해제되었거나(그리고 재사용되었을 가능성이 있는) 슬롯 내의 덩글링 포인터(dangling pointer)가 됩니다.

ATT 연결이 가능한 원격 피어는 일반적인 ATT 트래픽 중 연결 끊기를 통해 이 취약점을 유발할 수 있습니다. ATT 베어러(bearer)에 도달하기 위해 페어링이나 사용자 상호작용은 필요하지 않습니다. 그 결과, 해제된 채널 메모리에 대한 Use-After-Free 읽기/쓰기가 발생하여 블루투스 호스트를 신뢰성 있게 충돌시켜 서비스 거부(Denial of Service) 상태를 초래하며, 채널 슬롯이 재사용될 경우 라이브 메모리(live memory)의 손상도 잠재적으로 가능합니다.

해결책은 bt_att_released()가 해당 채널을 참조하는 tx_meta_data_storage[] 배열 내 모든 항목의 att_chan 필드를 해제 전에 NULL로 설정하도록 합니다. 이로 인해 지연된 가드가 NULL 포인터를 관찰하고 콜백을 제거합니다. 정리(teardown) 및 파괴 작업(cooperative system workqueue에서 실행됨)은 모두 협력형 시스템 작업 큐에서 실행되므로, 배열 업데이트는 직렬화(serialized)되어 잠금(lock)이 필요하지 않습니다.

VulDB is the best source for vulnerability data and more expert information about this specific topic.

출처

Are you interested in using VulDB?

Download the whitepaper to learn more about our service!