Katalog CVE

CVE-2026-76787

ŚrednieCVSS 5.9
Opublikowano: Zaktualizowano: Przetłumaczono: NVD NIST

Prawdopodobieństwo exploitacji (EPSS)

Niskie ryzyko
0.36%

Percentyl 30 - wyżej niż 30% wszystkich znanych CVE

Streszczenie

Klient aktualizacji firmware UpdateHub w Zephyr parsuje odpowiedź CoAP za pomocą biblioteki JSON, która traktuje wszystkie pola jako opcjonalne. Gdy odpowiedź pominie pole "sha256sum", wskaźnik pozostaje NULL, a kod wywołuje strlen() na tym wskaźniku przed jakąkolwiek walidacją, co prowadzi do odczytu spod adresu zero. Ponieważ metadane pochodzą w całości od zdalnego peera (domyślnie bez DTLS, po zwykłym CoAP/UDP), atakujący może zdalnie wywołać awarię.

Ocena ryzyka

Na platformach z niemapowanym lub chronionym obszarem niskich adresów (np. architektury z MMU, TrustZone, nRF54L) odczyt powoduje wyjątek i zatrzymanie systemu, dając zdalnie powtarzalny atak odmowy usługi przy każdym odpytywaniu. Wpływ ogranicza się do dostępności — nie ma zapisu do pamięci ani wycieku informacji.

Rekomendacja

Zaktualizuj Zephyr do wersji zawierającej poprawkę dodającą jawną kontrolę sha256sum == NULL przed strlen() w obu gałęziach metadanych. Rozważ włączenie CONFIG_UPDATEHUB_DTLS=y, aby ograniczyć źródło metadanych do uwierzytelnionego serwera aktualizacji.

Powiązane podatności

Oryginalny opis (angielski, źródło NVD)

The UpdateHub firmware-over-the-air client parses the CoAP probe response with Zephyr's JSON library in z_impl_updatehub_probe() (subsys/mgmt/updatehub/updatehub.c). The decoder treats every descriptor field as optional — json_obj_parse() returns a bitmask of the fields it actually decoded and never fails on a missing one — so a response that omits the "sha256sum" string leaves the corresponding const char * in the zero-initialised struct resp_probe_any_boards / struct resp_probe_some_boards at NULL. Both metadata branches then computed sha256size = strlen(...objects.sha256sum) + 1 before any validation, dereferencing that NULL pointer; the SHA256_HEX_DIGEST_SIZE test that follows operates on a value the bad read has already produced and cannot prevent it. The metadata is supplied entirely by the network peer: probe_cb() accepts the datagram, runs coap_packet_parse() and copies the payload with no token matching and no cryptographic check. With CONFIG_UPDATEHUB_DTLS unset — the default — start_coap_client() uses plain CoAP over UDP on port 5683 with no peer authentication and resolves the server via unauthenticated DNS, so an on-path attacker, a DNS spoofer, or an off-path attacker who wins the race with a forged source address can deliver the malformed metadata. A probe response as simple as "objects":[[{}],[{}]] suffices, and no user interaction is required because updatehub_autohandler() polls on CONFIG_UPDATEHUB_POLL_INTERVAL. When CONFIG_UPDATEHUB_DTLS=y the trigger narrows to a malicious or compromised update server. The primitive is a read at address zero, not a write, so the impact is availability only. On targets where the low address range is unmapped or protected — MMU-based architectures, builds with CONFIG_NULL_POINTER_EXCEPTION_DETECTION_DWT/_MPU/_PMP, TrustZone non-secure images, and SoCs such as nRF54L whose 0x0–0x400 window is unmapped — the load faults and Zephyr's default fatal handler halts the system, giving a remotely re-triggerable denial of service on every poll. On classic Cortex-M targets where the vector table is readable at address zero the walk usually terminates immediately and the request is rejected by the length check, so the outcome is configuration- and SoC-dependent. There is no memory write, and the copied bytes are only compared against the locally computed image hash, so there is no information-disclosure channel. The fix adds an explicit sha256sum == NULL test that returns UPDATEHUB_METADATA_ERROR ahead of the strlen() in both metadata branches. Debug builds (CONFIG_UPDATEHUB_LOG_LEVEL=4) still format the same pointers with %s in a LOG_DBG() loop that runs before the new checks, so that variant remains in debug configurations only.

Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS