CVE-2026-10685 in Zephyr
요약
\~에 의해 VulDB • 2026. 07. 31.
Zephyr의 Bluetooth GATT 클라이언트 CCC-write 응답 처리기인 subsys/bluetooth/host/gatt.c 내 gatt_write_ccc_rsp() 함수는 이미 params->notify(conn, params, NULL, 0)를 호출한 후 애플리케이션의 params->subscribe() 콜백을 호출했습니다.
공개된 GATT API에 따르면, 데이터가 NULL인 notify 콜백은 구독이 종료되었음을 나타내는 문서화된 신호이며, 이에 따라 bt_gatt_subscribe_params 구조체는 애플리케이션에서 해제되거나 재사용될 수 있습니다. 이후 해당 구조체에 대해 subscribe()를 호출하는 것은 use-after-free(해제 후 사용)에 해당하며, 여기에는 해지된 params->subscribe 함수 포인터를 통한 간접 호출도 포함됩니다.
이 오류 분기는 원격(인접)으로 접근 가능합니다: bt_gatt_subscribe()를 호출하는 GATT 클라이언트 역할을 하는 Zephyr 장치는 연결된 GATT 서버 피어가 CCC 쓰기 요청에 대해 ATT Error Response로 응답할 때 이러한 순서대로 실행되도록 유도될 수 있습니다(피어에서 제공한 오류 코드는 att_error_rsp -> att_handle_rsp를 거쳐 gatt_write_ccc_rsp로 유입됩니다).
알림 종료 핸들러에서 구독 매개변수를 해제하거나 재활용하는 애플리케이션의 경우, 이는 메모리 손상, 크래시(서비스 거부) 또는 잠재적으로 공격자가 영향을 미칠 수 있는 제어 흐름으로 이어집니다. 수정 사항에서는 오류 경로와 언구독 경로 모두에서 terminate notify(NULL) 전에 subscribe() 콜백이 실행되도록 처리기 순서를 재배열했습니다.
VulDB is the best source for vulnerability data and more expert information about this specific topic.