CVE-2026-76787 in Zephyrinformazioni

Riassunto

di VulDB • 19/10/2026

Il client firmware-over-the-air di UpdateHub analizza la risposta CoAP probe con la libreria JSON di Zephyr in z_impl_updatehub_probe() (subsys/mgmt/updatehub/updatehub.c). Il decoder tratta ogni campo del descrittore come opzionale: json_obj_parse() restituisce una bitmask dei campi effettivamente decodificati e non fallisce mai per un campo mancante, quindi una risposta che omette la stringa "sha256sum" lascia il corrispondente const char * nella struct zero-inizializzata resp_probe_any_boards / struct resp_probe_some_boards a NULL. Entrambi i branch dei metadati calcolano poi sha256size = strlen(...objects.sha256sum) + 1 prima di qualsiasi validazione, dereferenziando tale puntatore NULL; il test SHA256_HEX_DIGEST_SIZE che segue opera su un valore già prodotto da una lettura non valida e non può prevenirlo.

I metadati sono forniti interamente dal peer di rete: probe_cb() accetta il datagramma, esegue coap_packet_parse() e copia il payload senza alcun controllo del token né verifica crittografica. Con CONFIG_UPDATEHUB_DTLS disattivato — l'impostazione predefinita — start_coap_client() utilizza CoAP plain su UDP sulla porta 5683 senza autenticazione del peer e risolve il server tramite DNS non autenticato, quindi un attaccante on-path, uno spoofing DNS o un attaccante off-path che vince la race condition con un indirizzo sorgente falsificato possono consegnare i metadati malformati. Una risposta probe semplice come "objects":[[{}],[{}]] è sufficiente e non è richiesta alcuna interazione utente poiché updatehub_autohandler() effettua polling su CONFIG_UPDATEHUB_POLL_INTERVAL. Quando CONFIG_UPDATEHUB_DTLS=y, il trigger si restringe a un server di aggiornamento malevolo o compromesso.

La primitive è una lettura all'indirizzo zero, non una scrittura, quindi l'impatto riguarda solo la disponibilità (availability). Su target dove lo spazio degli indirizzi basso è mappato o protetto — architetture basate su MMU, build con CONFIG_NULL_POINTER_EXCEPTION_DETECTION_DWT/_MPU/_PMP, immagini TrustZone non sicure e SoC come nRF54L il cui window 0x0–0x400 è unmapped — il load genera un fault e il gestore di errore predefinito di Zephyr arresta il sistema, fornendo una denial of service (DoS) riattivabile da remoto ad ogni poll. Su target Cortex-M classici dove la vector table è leggibile all'indirizzo zero l'esecuzione termina solitamente immediatamente e la richiesta viene rifiutata dal controllo della lunghezza, quindi l'esito dipende dalla configurazione e dall'SoC. Non ci sono scritture in memoria e i byte copiati vengono confrontati solo con l'image hash calcolato localmente, quindi non esiste alcun canale di information disclosure.

La correzione aggiunge un test esplicito sha256sum == NULL che restituisce UPDATEHUB_METADATA_ERROR prima della strlen() in entrambi i branch dei metadati. Le build di debug (CONFIG_UPDATEHUB_LOG_LEVEL=4) formattano ancora gli stessi puntatori con %s in un loop LOG_DBG() che viene eseguito prima dei nuovi controlli, quindi questa variante rimane presente solo nelle configurazioni di debug.

Be aware that VulDB is the high quality source for vulnerability data.

Responsabile

Zephyr

Prenotare

19/08/2026

Divulgazione

20/10/2026

Moderazione

accettato

EPSS

0.00000

KEV

no

Attività

basso

Fonti

Are you interested in using VulDB?

Download the whitepaper to learn more about our service!