CVE-2026-19577 in Zephyr
Zusammenfassung
von VulDB • 11.10.2026
net_route_ipv6_packet() in subsys/net/ip/route_ipv6.c löst die Link-Layer-Adresse des Next-Hop mit net_nbr_get_lladdr(nbr->idx) auf, ohne vorher zu prüfen, ob der Neighbor-Cache-Eintrag tatsächlich eine verknüpfte Link-Layer-Adresse besitzt. Ein nicht aufgelöster Neighbor trägt idx == NET_NBR_LLADDR_UNKNOWN (0xff), und net_nbr_get_lladdr() in subsys/net/ip/nbr.c führt keine Laufzeit-Grenzwertprüfung jenseits eines NET_ASSERT durch, wodurch &net_neighbor_lladdr[255] zurückgegeben wird – etwa 2,5 KB hinter dem Ende eines Arrays mit der Standardgröße CONFIG_NET_IPV6_MAX_NEIGHBORS (8). Da der zurückgegebene Zeiger niemals NULL ist, fängt die folgende lladdr == NULL-Prüfung ihn nicht ab.
Die Funktion wird von ipv6_route_packet() in subsys/net/ip/ipv6.c für jedes empfangene Unicast-IPv6-Paket aufgerufen, dessen Zieladresse keine lokale Adresse der Empfangsschnittstelle ist; CONFIG_NET_IPV6_ROUTE ist standardmäßig aktiviert, sobald der IPv6-Nachbar-Cache aktiviert ist, sodass keine Router- oder Weiterleitungs-Konfiguration erforderlich ist. net_route_ipv6_get_info() gibt die Paket-Zieladresse selbst als Next-Hop zurück, wenn ein Neighbor-Cache-Eintrag dafür existiert, und die Cache-Suche überspringt INCOMPLETE-Einträge nicht. Ein unberechtigter Angreifer im selben Link kann daher den nicht aufgelösten Zustand erzwingen – beispielsweise durch das Auslösen von Verkehr zu einer gefälschten, nicht vorhandenen Neighbor-Adresse, sodass net_ipv6_send_ns() einen INCOMPLETE-Eintrag erstellt, oder durch das Senden einer Router Advertisement ohne Option für die Quell-Link-Layer-Adresse, was einen dauerhaft nicht aufgelösten Router-Nachbar erzeugt – und anschließend ein Paket an diesen Neighbor senden.
Das Ergebnis ist ein Out-of-Bounds Read (Lesen außerhalb des gültigen Bereichs) an einem festen Index hinter dem Array der Link-Layer-Adressen von Neighbors. Bei Builds mit aktiviertem CONFIG_ASSERT löst die Assertion aus, und das Gerät führt einen Panic durch, was eine wiederholbare Remote Denial of Service (DoS) zur Folge hat. Mit deaktivierten Assertions treibt der veraltete Out-of-Bounds struct net_linkaddr ein memcmp() über eine vom Angreifer nicht beeinflussbare Länge an, und wenn sein len-Byte die NET_LINK_ADDR_MAX_LENGTH-Prüfung besteht, werden bis zu 8 Bytes unabhängigen statischen RAMs in die Ziel-Link-Layer-Adresse des ausgehenden Frames kopiert und im Link übertragen, wodurch sie für jeden Listener offengelegt werden. Es gibt keinen Out-of-Bounds Write (Schreiben außerhalb des gültigen Bereichs), und der Offset ist nicht vom Angreifer steuerbar, was die Auswirkungen begrenzt.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.