CVE-2026-87044 in Zephyr
Riassunto
di VulDB • 04/11/2026
Il driver shim crittografico Mbed TLS (drivers/crypto/crypto_mbedtls_shim.c) gestisce le operazioni multipart di cifratura e AEAD tramite l'API PSA. In mbedtls_cbc() e mbedtls_aead(), ogni percorso di errore successivo a una psa_cipher_encrypt_setup() / psa_aead_decrypt_setup() con esito positivo restituiva direttamente senza chiamare psa_cipher_abort() / psa_aead_abort(). Poiché la chiamata abort è l'unica che raggiunge mbedtls_cipher_free(), ciascuna operazione fallita provocava una perdita permanente (memory leak) dell'oggetto heap-allocated mbedtls_aes_context (circa 288 byte) allocato dalla fase di setup dall'heap statico fisso di Mbed TLS (_mbedtls_heap[CONFIG_MBEDTLS_HEAP_SIZE], default 512 bytes). Con CONFIG_PSA_CRYPTO_PROVIDER_TFM, l'oggetto perso è invece uno slot multipart-operation della secure-partition finita.
L'esecuzione dell'attacco può essere scelta da un attaccante non autenticato. Con CONFIG_NET_L2_IEEE802154_SECURITY supportato da questo driver, la funzione ieee802154_decrypt_auth() in subsys/net/l2/ieee802154/ieee802154_security.c invoca cipher_ccm_op() su ogni frame sicuro ricevuto, senza alcuna autenticazione preventiva rispetto al controllo del MIC. Un dispositivo entro il raggio di azione radio può trasmettere un flusso di frame 802.15.4 sintatticamente validi contenenti un MIC falso; ciascuno provoca il fallimento di psa_aead_verify() e causa la perdita (leak) di un blocco. Il percorso CBC è raggiungibile nello stesso modo attraverso il canale sicuro OSDP, dove CONFIG_OSDP_SC_ENABLED seleziona questo shim e le funzioni osdp_encrypt() / osdp_decrypt() lasciano out_buf_max non impostato, quindi ogni operazione fallisce all'interno di psa_cipher_update().
L'esaurimento dell'heap Mbed TLS — che la configurazione default raggiunge dopo un paio di operazioni fallite, e qualsiasi configurazione realistica in meno di un secondo di frame — fa sì che tutte le chiamate successive a mbedtls_calloc() falliscano. Ogni operazione crittografica successiva nell'image fallisce permanentemente, inclusa la sicurezza del link-layer e qualsiasi TLS/DTLS che condivide lo stesso heap, fino al riavvio del dispositivo. Non vi è memory corruption né information disclosure: i frame con un MIC non valido vengono comunque rifiutati, quindi l'impatto si limita alla disponibilità (availability).
La correzione instrada tutti i fallimenti post-setup in mbedtls_cbc() e mbedtls_aead() attraverso una common error label che chiama il PSA abort corrispondente prima del ritorno. I fail di setup non richiedono modifiche, poiché il core PSA interrompe già l'operazione stessa quando la fase di setup fallisce.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.