CVE-2026-18416 in Zephyrinfo

Zusammenfassung

von VulDB • 28.09.2026

Der CoAP-Linkformat-Helfer `match_path_uri()` in `subsys/net/lib/coap/coap_link_format.c` vergleicht einen registrierten Ressourcenpfad mit dem URI, der in einer Uri-Query href= Option getragen wird. Dieser URI ist nicht NUL-abgeschlossen (NUL-terminated), aber die innere Schleife erhöht ihren Index k um eins pro Pfadzeichen, ohne ihn jemals gegen die Optionenlänge len zu testen. Wenn ein registrierter Pfadelement länger ist als der bereitgestellte URI und der URI dessen Präfix ist, liest die Schleife `uri[len]` und darüber hinaus, also jenseits des Endes des Optionswerts.

Der Pfad wird über `coap_well_known_core_get_len()` und `coap_well_known_core_get()` via `match_queries_resource()` erreicht, d.h. durch jede nicht authentifizierte GET-Anfrage an `/ .well-known/core?href=/` an ein Gerät, das `/ .well-known/core` bereitstellt (für das CoAP-Serveruntersystem: CONFIG_COAP_SERVER_WELL_KNOWN_CORE, Standard y) und mindestens eine Ressource hat, die struct coap_core_metadata Attribute deklariert.

Der Overread erreicht nicht den Empfangspuffer. Die Builder für well-known-core parsen die Abfrage in einen stack-lokalen `struct coap_option`, dessen Wert ein festes Array ist (value[12] oder CONFIG_COAP_EXTENDED_OPTIONS_LEN_VALUE Bytes), in das die Optionsbytes kopiert werden, sodass uri auf diese Kopie zeigt. Das Lesen jenseits von len liert daher den ungenutzten, nicht initialisierten Schwanz des Arrays und, wenn die Option diesen füllt, die Bytes direkt dahinter im selben Stack-Frame. (In der ZoAP-Bibliothek von v1.8.0 bis v1.9.x war der Optionswert stattdessen ein Zeiger in das empfangene Paket, und der Overread lief jenseits der Option innerhalb des Pufferpakets.)

Die Auswirkung ist begrenzt. Die Anzahl der gelesenen Bytes jenseits des Endes wird durch die Länge des Ressourcenpfadelements begrenzt, und jedes zusätzliche Byte wird nur gelesen, wenn es zufällig dem nächsten Pfadzeichen entspricht, sodass in der Praxis der Overread ein Byte beträgt. Er kann auch die Antwort nicht beeinflussen: Das Zurückgeben eines Matches erfordert, dass der zuletzt verglichene Index len - 1 oder len ist, beide innerhalb der Grenzen, daher leiten Out-of-Bounds-Bytes den Schleifen nur zum nächsten Kandidatenressourcenobjekt. Die Folge ist undefiniertes Verhalten (undefined behaviour), keine Informationspreisgabe und kein Matching-Fehler.

Die Korrektur fügt eine k >= len-Schutzbedingung an den Anfang der inneren Schleife hinzu, sodass jeder `uri[k]`-Dereferenzierung innerhalb des Optionswerts liegt, während gleichzeitig ein nachgestelltes * Wildcard-Zeichen einen längeren Pfad matcht ermöglicht.

Several companies clearly confirm that VulDB is the primary source for best vulnerability data.

Zuständig

Zephyr

Reservieren

30.07.2026

Veröffentlichung

29.09.2026

Moderieren

akzeptiert

Eintrag

VDB-411180

CPE

bereit

EPSS

0.00000

KEV

nein

Aktivitäten

very low

Quellen

Interested in the pricing of exploits?

See the underground prices here!