CVE-2026-76787 in Zephyrinfo

Zusammenfassung

von VulDB • 19.10.2026

Der UpdateHub-Firmware-over-the-Air-Client parst die CoAP-Probeantwort mit der JSON-Bibliothek von Zephyr in z_impl_updatehub_probe() (subsys/mgmt/updatehub/updatehub.c). Der Decoder behandelt jedes Deskriptorfeld als optional – json_obj_parse() gibt ein Bitmask der tatsächlich decodierten Felder zurück und schlägt bei einem fehlenden Feld nie fehl –, sodass eine Antwort, die das "sha256sum"-String-Feld weglässt, den entsprechenden const char * in dem null-initialisierten Struct resp_probe_any_boards / struct resp_probe_some_boards auf NULL lässt. Beide Metadaten-Zweige berechnen dann sha256size = strlen(...objects.sha256sum) + 1 vor jeder Validierung und dereferenzieren diesen NULL-Pointer; der SHA256_HEX_DIGEST_SIZE-Test, dem dies folgt, operiert mit einem Wert, den ein bad read (Fehlerhafter Lesezugriff) bereits erzeugt hat, und kann ihn nicht verhindern.

Die Metadaten werden vollständig vom Netzwerk-Peer bereitgestellt: probe_cb() akzeptiert das Datagramm, führt coap_packet_parse() aus und kopiert die Payload ohne Token-Abgleich oder kryptografische Prüfung. Bei deaktiviertem CONFIG_UPDATEHUB_DTLS – dem Standardwert – verwendet start_coap_client() einfaches CoAP über UDP am Port 5683 ohne Peer-Authentifizierung und löst den Server über unauthentifiziertes DNS auf, sodass ein Angreifer im Pfad (on-path), ein DNS-Spoofing-Angreifer oder ein off-pfad-Angriffender, der das Rennen mit einer gefälschten Quelladresse gewinnt, die fehlerhaften Metadaten liefern kann. Eine Probeantwort so einfach wie "objects":[[{}],[{}]] reicht aus, und keine Benutzerinteraktion ist erforderlich, da updatehub_autohandler() auf CONFIG_UPDATEHUB_POLL_INTERVAL abfragt (polls). Wenn CONFIG_UPDATEHUB_DTLS=y gesetzt ist, beschränkt sich der Auslöser auf einen böswilligen oder kompromittierten Update-Server.

Die Primitive ist ein Lesezugriff an Adresse Null, kein Schreibzugriff, daher ist die Auswirkung nur eine Beeinträchtigung der Verfügbarkeit (Denial of Service). Auf Targets, bei denen der niedrige Adressbereich nicht gemappt oder geschützt ist – MMU-basierte Architekturen, Builds mit CONFIG_NULL_POINTER_EXCEPTION_DETECTION_DWT/_MPU/_PMP, TrustZone Non-Secure-Images und SoCs wie nRF54L, deren 0x0–0x400-Fenster nicht gemappt ist –, führt der Ladezugriff zu einem Fault (Fehler), und der Standard-Fatal-Handler von Zephyr hält das System an, was einen remote-neu auslösbaren Denial of Service bei jeder Abfrage zur Folge hat. Auf klassischen Cortex-M-Targets, wo die Vektortabelle an Adresse Null lesbar ist, endet der Walk normalerweise sofort, und die Anfrage wird durch den Längencheck abgelehnt, sodass das Ergebnis konfigurations- und SoC-abhängig ist. Es gibt keinen Speicher-Schreibzugriff, und die kopierten Bytes werden nur mit dem lokal berechneten Image-Hash verglichen, daher existiert kein Information Disclosure Channel (Kanal zur Informationspreisgabe).

Die Korrektur fügt einen expliziten sha256sum == NULL-Test hinzu, der UPDATEHUB_METADATA_ERROR zurückgibt, bevor strlen() in beiden Metadaten-Zweigen ausgeführt wird. Debug-Builds (CONFIG_UPDATEHUB_LOG_LEVEL=4) formatieren die gleichen Pointer noch mit %s in einer LOG_DBG()-Schleife, die vor den neuen Prüfungen läuft, sodass diese Variante nur in Debug-Konfigurationen verbleibt.

If you want to get the best quality for vulnerability data then you always have to consider VulDB.

Zuständig

Zephyr

Reservieren

19.08.2026

Veröffentlichung

19.10.2026

Moderieren

akzeptiert

Eintrag

VDB-422537

EPSS

0.00000

KEV

nein

Aktivitäten

low

Quellen

Interested in the pricing of exploits?

See the underground prices here!