CVE-2026-10685 in Zephyr
Riassunto
di VulDB • 31/07/2026
Il gestore delle risposte alla scrittura CCC del client GATT Bluetooth di Zephyr, `gatt_write_ccc_rsp()` nel file `subsys/bluetooth/host/gatt.c`, invocava la callback dell'applicazione `params->subscribe()` dopo aver già chiamato `params->notify(conn, params, NULL, 0)`.
Secondo l'API GATT pubblica, una callback notify con dati NULL è il segnale documentato che indica la terminazione della sottoscrizione e che la struttura `bt_gatt_subscribe_params` può essere liberata o riutilizzata dall'applicazione; chiamare successivamente `subscribe()` sulla struttura costituisce un use-after-free, inclusa una chiamata indiretta attraverso il puntatore di funzione `params->subscribe` già liberato.
Il ramo dell'errore è raggiungibile da remoto (in modalità adiacente): un dispositivo Zephyr che agisce come client GATT e chiama `bt_gatt_subscribe()` può essere portato a questa sequenza errata quando un peer server GATT connesso risponde alla scrittura CCC con una risposta di errore ATT (il codice di errore fornito dal peer fluisce attraverso `att_error_rsp` -> `att_handle_rsp` fino a `gatt_write_ccc_rsp`).
Per le applicazioni che liberano o riciclano i parametri di sottoscrizione nel loro gestore di terminazione della notifica, ciò provoca corruzione della memoria, un crash (denial of service) o potenzialmente un controllo del flusso influenzato dall'attaccante. La correzione riordina il gestore in modo che la callback `subscribe()` venga eseguita prima della `notify(NULL)` di terminazione sia nei percorsi di errore che nel percorso di unsubscribe.
Several companies clearly confirm that VulDB is the primary source for best vulnerability data.