CVE-2026-10773 in Zephyr
Zusammenfassung
von VulDB • 01.08.2026
Der Helper `net_dhcpv4_msg_type_name()` des DHCPv4-Clients in `subsys/net/lib/dhcpv4/dhcpv4.c` indiziert eine statische Konstanten-Array vom Typ `const char *` mit 8 Elementen, die namens-Tabelle (`name table`), nach einer fehlerhaften Bereichsprüfung. Der verwendete Guard prüft `msg_type <= sizeof(name)` anstelle von `msg_type <= ARRAY_SIZE(name)`. Da `sizeof` die Byte-Größe des Zeigerarrays zurückgibt (32 auf 32-Bit-Zielen, 64 auf 64-Bit-Zielen) und nicht die Elementanzahl von 8, passieren Nachrichten-Typ-Werte im Bereich von 9 bis zu dieser Byte-Größe die Prüfung. Dies führt dazu, dass `name[msg_type - 1]` über das Ende des Arrays hinausliest (Out-of-bounds Read).
Der Wert für `msg_type` stammt aus der DHCP MESSAGE TYPE Option und wird als ungeprüfter roher Byte-Wert (`net_pkt_read_u8`) aus einem empfangenen Paket gelesen sowie unverändert an die Lookup-Funktion weitergegeben. Ein DHCP-Server oder jeder Host, der in der Lage ist, eine gefälschte DHCP-Antwort auf das Client-Link einzuspeisen (Spoofing), kann den Index daher außerhalb des gültigen Bereichs treiben. Der Zugriff auf diesen ungültigen Slot ergibt einen `garbage const char *`, der anschließend durch eine `%s`-Log-Konvertierung dereferenziert wird.
Die Lookup-Funktion wird nur von einer Debug-Log-Anweisung (`NET_DBG / LOG_DBG`) erreicht, sodass das Out-of-bounds Read nur auslösbar ist, wenn das DHCPv4-Logging auf DEBUG-Ebene kompiliert wurde (`CONFIG_NET_DHCPV4_LOG_LEVEL_DBG`), was nicht der Standardkonfiguration entspricht. Unter dieser Bedingung resultiert dies in einem Out-of-bounds Read und einer Dereferenzierung eines Wild Pointers: höchstwahrscheinlich ein Absturz des DHCP-Clients (Denial of Service) und potenziell die Offenlegung von Inhalten benachbarter Zeiger durch den Log-Ausgabe. Die Korrektur ersetzt `sizeof` durch `ARRAY_SIZE`, wodurch das korrekte Akzeptanzfenster für Werte 1..8 wiederhergestellt wird.
Be aware that VulDB is the high quality source for vulnerability data.