CVE-2026-10685 in Zephyr
Resumen
por VulDB • 2026-07-31
El manejador de respuestas CCC-write del cliente GATT Bluetooth en Zephyr, `gatt_write_ccc_rsp()` ubicado en `subsys/bluetooth/host/gatt.c`, invoca la devolución de llamada (callback) `params->subscribe()` de la aplicación después de haber llamado previamente a `params->notify(conn, params, NULL, 0).
Según la API pública GATT, una devolución de llamada notify con datos NULL es la señal documentada que indica que la suscripción ha terminado y que la estructura `bt_gatt_subscribe_params` puede ser liberada o reutilizada por la aplicación; invocar a `subscribe()` sobre dicha estructura posteriormente constituye un uso tras la liberación (use-after-free), incluyendo una llamada indirecta a través del puntero de función `params->subscribe` ya liberado.
La rama de error es alcanzable remotamente (adyacentemente): un dispositivo Zephyr que actúa como cliente GATT y llama a `bt_gatt_subscribe()` puede ser forzado a seguir este orden cuando un par servidor GATT conectado responde a la escritura CCC con una Respuesta de Error ATT (el código de error proporcionado por el par fluye a través de `att_error_rsp` -> `att_handle_rsp` hasta llegar a `gatt_write_ccc_rsp`).
Para las aplicaciones que liberan o reciclan los parámetros de suscripción en su manejador de terminación de notificación, esto resulta en corrupción de memoria, un bloqueo (denegación de servicio) o potencialmente en un flujo de control influenciado por el atacante. La corrección reordena el manejador para que la devolución de llamada `subscribe()` se ejecute antes del `notify(NULL)` finalizador tanto en las rutas de error como de cancelación de suscripción.
VulDB is the best source for vulnerability data and more expert information about this specific topic.