Cyberattacchi alimentati dall'intelligenza artificiale: Come individuare, prevenire e difendersi dalle minacce intelligenti

Leggi ora
Per le traduzioni dei siti utilizziamo l'intelligenza artificiale e, sebbene ci sforziamo di essere accurati, non sempre le traduzioni sono precise al 100%. La vostra comprensione è apprezzata.

Analisi completa di CVE-2024-38063: Una minaccia critica nello stack TCP/IP di Windows

da OPSWAT
Condividi questo post
Foto del partecipante al programma di borse di studio OPSWAT , Pham Ngoc Thien

Il 13 agosto 2024, l'MSTC (Microsoft Security Response Center) ha reso nota CVE-2024-38063, una vulnerabilità critica nello stack TCP/IP di Windows che può essere sfruttata per compromettere le funzioni di rete vitali del sistema operativo. I partecipanti all'OPSWAT Graduate Fellowship Program forniscono un esame approfondito dei dettagli tecnici di questa falla e del suo potenziale impatto, nonché delle strategie di mitigazione consigliate per questa vulnerabilità.

Partecipanti al programma di borse di studio OPSWAT : Pham Ngoc Thien - Università Ho Chi Minh di Tecnologia dell'Informazione 

Panoramica

CVE-2024-38063 è una vulnerabilità critica dello stack TCP/IP di Windows con un punteggio CVSS 9,8, che riguarda l'elaborazione dei pacchetti IPv6. Gli aggressori remoti possono sfruttare questa vulnerabilità utilizzando un integer underflow durante la gestione delle intestazioni di estensione IPv6 per eseguire codice dannoso o causare un DoS (Denial of Service).

Poiché IPv6 è abilitato per impostazione predefinita sulla maggior parte dei sistemi moderni, questa falla zero-click rappresenta un rischio sostanziale. Di conseguenza, tutte le versioni non patchate di Windows 10, Windows 11 e Windows Server 2008, 2012, 2016, 2019 e 2022 con IPv6 abilitato sono vulnerabili a questa CVE.

Diagramma che mostra l'impatto di CVE-2024-38063 sulle funzioni di rete di Windows

Concetti chiave

Stack TCP/IP di Windows

Lo stack TCP/IP di Windows è un componente fondamentale del sistema operativo responsabile della comunicazione di rete tramite la suite Transmission Control Protocol/Internet Protocol (TCP/IP). Gestisce tutte le interazioni di rete, facilitando la comunicazione tra dispositivi su reti locali e globali.

Schermata dell'architettura dello stack TCP/IP di Windows

IPv6 e intestazioni di estensione

L'IPv6 è stato sviluppato per risolvere i limiti dell'IPv4. Ha introdotto vari miglioramenti, come la modularità e la flessibilità attraverso le intestazioni di estensione. Le intestazioni, posizionate tra l'intestazione IPv6 e il payload, supportano dati opzionali e funzionalità avanzate.

Le principali intestazioni di estensione IPv6 includono:

  • Opzioni hop-by-hop (intestazione successiva = 0) 
  • Testata di instradamento (testata successiva = 43) 
  • Intestazione del frammento (Intestazione successiva = 44) 
  • Intestazione delle opzioni di destinazione (intestazione successiva = 60) 
  • Intestazione di autenticazione (AH) (Intestazione successiva = 51) 
  • Encapsulating Security Payload (ESP) (intestazione successiva = 50) 

Ogni intestazione di estensione punta alla successiva tramite il campo Next Header, creando una catena sequenziale. Questa modularità introduce complessità nel processo di gestione dei pacchetti e potenziali vettori di sfruttamento.

Diagramma che illustra le intestazioni dell'estensione IPv6 e la struttura dei pacchetti
Formato di un datagramma IPv6

Underflow di un intero

Un underflow di numeri interi si verifica quando un calcolo produce un valore inferiore al valore minimo rappresentabile per un tipo di dati. Ad esempio, la sottrazione di un valore più grande da uno più piccolo in un intero senza segno può far sì che il risultato diventi un valore positivo molto grande.

Un integer overflow si verifica quando il valore supera il limite massimo del tipo di dati e "trabocca" al valore minimo rappresentabile (ad esempio, 0 in un intervallo 0-10). Entrambi gli scenari si verificano a causa di un'errata gestione delle condizioni al contorno nelle operazioni aritmetiche, con conseguenti gravi vulnerabilità nei sistemi software.

Diagramma che spiega l'underflow e l'overflow dei numeri interi nell'elaborazione dei dati

Analisi delle vulnerabilità

Il flusso di lavoro dell'elaborazione IPv6

Dopo aver ricevuto un pacchetto IPv6, Windows analizza innanzitutto l'intestazione IPv6. Quindi, la funzione IppReceiveHeaderBatch controlla il valore del campo Next Header per scegliere il gestore appropriato per le intestazioni successive. Per ogni intestazione di estensione nella catena, IppReceiveHeaderBatch invoca la routine corrispondente per elaborare quella specifica intestazione.

Diagramma che illustra il flusso di lavoro dell'elaborazione dei pacchetti IPv6 in Windows

Nonostante il design flessibile e modulare di questo meccanismo, esso introduce un potenziale vettore di attacco. In IPv6, i pacchetti frammentati vengono tipicamente riassemblati a destinazione, dove esiste una vulnerabilità nel processo di riassemblaggio dei frammenti e nella gestione delle intestazioni.

Un aggressore può indurre una cattiva gestione della memoria e innescare un buffer overflow inviando numerosi pacchetti malformati con intestazioni di estensione manipolate. Ciò consente ai dati in eccesso di sovrascrivere regioni di memoria non previste, permettendo potenzialmente l'esecuzione di codice arbitrario. Questa vulnerabilità è identificata come CVE-2024-38063.

Diagramma che illustra il rischio di buffer overflow da pacchetti IPv6 malformati

Falla critica nello stack TCP/IP di Windows

La patch di Microsoft per risolvere la vulnerabilità CVE-2024-38063 è stata esaminata a fondo dal ricercatore di sicurezza Marcus Hutchins. Il suo blog tecnico offre una visione dettagliata della causa di questa vulnerabilità. Sulla base delle sue scoperte, il nostro collega ha esplorato ulteriormente il problema per comprendere a fondo l'exploit.

Analisi delle patch

La patch includeva un aggiornamento del file tcpip.sys, compresa una modifica della funzione Ipv6pProcessOptions. Una modifica di una sola riga ha sostituito una chiamata a IppSendErrorList() con una chiamata a IppSendError(), indicando che IppSendErrorList() potrebbe aver contribuito alla CVE.

Schermata del codice che mostra tcpip.sys prima della patch per CVE-2024-38063
Figura 1. Prima della patch
Schermata del codice che mostra tcpip.sys dopo la patch per CVE-2024-38063
Figura 2. Dopo la patch

Dimensione pacchetto zero

Un esame più attento della funzione IppSendErrorList() ha rivelato che essa elabora un elenco collegato di pacchetti invocando la funzione IppSendError() per ciascuno di essi. La funzione IppSendError() assegna ai pacchetti difettosi lo stato STATUS_DATA_NOT_ACCEPTED. Quindi, crea un messaggio di errore ICMP contenente informazioni sul pacchetto problematico e lo invia indietro. Tuttavia, quando IppSendErrorList() viene invocata con always_send_icmp = true su più pacchetti, imposta il campo packet_size a zero per ogni pacchetto.

Schermata del codice che mostra la funzione IppSendErrorList che imposta la dimensione del pacchetto su zero

La funzione Ipv6pProcessOptions è progettata per elaborare le intestazioni di estensione contenenti campi di valore delle opzioni, comprese le intestazioni Hop-by-Hop Options e Destination Options. Impostando il Tipo di opzione su un valore qualsiasi superiore a 0x80, un utente malintenzionato può innescare un errore specifico nell'elaborazione dell'intestazione delle opzioni, forzando l'impostazione di always_send_icmp su true e di conseguenza azzerando la dimensione del pacchetto.

Schermata del codice che illustra la manipolazione del campo Next Header di IPv6 a scopo di sfruttamento

Mentre un pacchetto di dimensione zero viene solitamente scartato, un aggressore può manipolare il campo Next Header del pacchetto IPv6 originale. Questa manipolazione consente agli aggressori di ottenere il controllo sull'interpretazione del pacchetto nelle fasi di elaborazione successive, evitando il rifiuto immediato e creando un'opportunità di sfruttamento. 

Diagramma che illustra il controllo dell'attaccante sull'elaborazione dei pacchetti IPv6

Underflow di un intero nell'elaborazione dei frammenti

Impostando il campo Next Header a 44, che indica un'intestazione di frammento, un pacchetto viene gestito dalle routine di frammentazione o riassemblaggio di IPv6. Quando il pacchetto raggiunge il parser dei frammenti, Ipv6pReceiveFragment(), specifica che: 

  • La dimensione del pacchetto è zero. 
  • L'intestazione del frammento indica che rimangono altri dati da elaborare. 

Nella funzione Ipv6pReceiveFragment(), la dimensione di allocazione per fragment_size viene calcolata sottraendo 0x30 (lunghezza dell'intestazione del pacchetto) dalla dimensione del pacchetto senza alcuna convalida. Se la dimensione del pacchetto è zero, questa sottrazione è insufficiente e risulta in un valore di 16 bit di grandi dimensioni (circa 0xFFD0 o 65488), causando l'elaborazione da parte del parser di una memoria eccessiva al di fuori dei confini validi del pacchetto e portando alla corruzione della memoria. 

Schermata del codice che mostra un underflow intero nell'elaborazione dei frammenti IPv6
Figura 3 Underflow dell'intero nell'elaborazione dei frammenti

Dall'underflow all'overflow e al disallineamento dell'allocazione

La funzione Ipv6pReassemblyTimeout() è responsabile della pulizia dei frammenti IPv6 incompleti dopo un tempo specificato, utilizzando l'aritmetica a 16 bit per determinare le dimensioni del buffer e le operazioni di copia. A causa dell'underflow nel passaggio precedente, in cui la packet_length o la fragment_size diventano 0xFFD0, si verifica un overflow durante l'allocazione.  

Il calcolo risultante causa l'azzeramento del registro, portando all'allocazione di soli 48 byte di memoria. Tuttavia, poiché la quantità di dati copiati (65.488 byte da riassemblaggio->payload) non corrisponde alla memoria allocata, si verifica un buffer overflow controllabile nel pool del kernel. 

Schermata del codice che illustra l'overflow del buffer dovuto a una mancata corrispondenza nell'allocazione della memoria

Questa discrepanza consente agli aggressori di eseguire codice dannoso tramite un pacchetto appositamente creato che sfrutta la vulnerabilità nell'elaborazione di IPv6.

CVE-2024-38963 Prova di concetto 

Nel tentativo di riprodurre la vulnerabilità CVE-2024-38963, i nostri colleghi hanno creato una serie di pacchetti malformati progettati per sfruttare la falla. Il processo seguito è stato il seguente:

1. Creazione di pacchetti IPv6 malformati

Inserire un'intestazione di estensione delle opzioni di destinazione IPv6 (tipo 60) dopo l'intestazione IPv6 di base, quindi incorporare un'opzione non valida (ad esempio, il tipo di opzione 0x81). 

Questa manipolazione forza il kernel di Windows (tcpip.sys) a impostare always_send_icmp = true, innescando la generazione di errori ICMPv6 tramite la routine IppSendErrorList().

2. Forzare l'elaborazione dell'elenco dei buffer di rete (NBL)

L'inondazione del bersaglio con rapide raffiche di questi pacchetti malformati aumentava le possibilità che il kernel raggruppasse più pacchetti in un'unica Net-Buffer List (NBL). Quando due o più pacchetti vengono raggruppati, il ciclo vulnerabile IppSendErrorList() si attiva, azzerando in modo errato i metadati DataLength e Offset nei frammenti successivi (la dimensione del pacchetto è ora zero). 

3. Iniettare pacchetti IPv6 frammentati

In seguito alla trasmissione di pacchetti malformati, vengono inviati pacchetti IPv6 frammentati che includono intestazioni di estensione Fragment. Questi frammenti vengono elaborati utilizzando i valori DataLength già corrotti. 

4. Sfruttare il timeout di riassemblaggio

Il kernel trattiene i frammenti per 60 secondi (gestiti da Ipv6pReassemblyTimeout) per consentire il riassemblaggio dei pacchetti. Durante questo timeout, i valori corrotti di DataLength innescano un underflow di numeri interi in Ipv6pReceiveFragment, con il risultato di una dimensione del frammento calcolata in modo errato (eccessivamente grande).

5. L'innesco dell'overflow del buffer Heap

Il kernel alloca un buffer heap sulla base dei valori underflow. Durante il processo di riassemblaggio vengono eseguiti due calcoli diversi: uno determina la dimensione dell'allocazione della memoria (che, a causa di un overflow di 16 bit, diventa troppo piccola) e l'altro calcola la lunghezza della copia utilizzando il valore grande, in underflow.

Questa mancata corrispondenza porta a una scrittura fuori dai limiti, causando un buffer overflow basato su heap che può essere sfruttato per innescare un Denial-of-Service (DoS) o un'esecuzione di codice remoto.

Diagramma che illustra l'exploit proof of concept per CVE-2024-38063

Il codice sorgente utilizzato per riprodurre questo CVE per un attacco Denial-of-Service:

Quando questa vulnerabilità viene sfruttata da un aggressore, il sistema della vittima può bloccarsi immediatamente, causando una schermata blu della morte: 

Schermata UI che mostra la schermata blu di morte di Windows dopo l'exploit CVE-2024-38063

Bonifica

Trascurare di aggiornare regolarmente il sistema operativo espone il dispositivo a minacce alla sicurezza, comprese quelle legate alle CVE (Common Vulnerabilities and Exposures). Per ridurre questi rischi, MetaDefender Endpoint™ offre una solida protezione rilevando la versione del sistema operativo e verificando la presenza di vulnerabilità, comprese le CVE note, come CVE-2024-38063. 

MetaDefender Endpoint è progettato per proteggere i dispositivi all'interno di reti IT/OT critiche dalle minacce provenienti da periferiche e supporti rimovibili. Assicura che il sistema operativo e le applicazioni installate siano aggiornate, segnala eventuali versioni obsolete o vulnerabili ed elenca le applicazioni con vulnerabilità note e CVE, insieme alle correzioni consigliate. Inoltre, aiuta a proteggere i dispositivi dai rischi legati ai supporti rimovibili, bloccando l'accesso alle unità USB fino a quando non vengono scansionate e trovate pulite utilizzando diversi motori anti-malware ed eseguendo Deep CDR™ su oltre 180 tipi di file.  

Rivolgetevi oggi stesso a uno dei nostri esperti per scoprire come MetaDefender Endpoint può trasformare la vostra posizione di sicurezza con un'intelligence leader del settore. 

Rimanete aggiornati con OPSWAT!

Iscriviti oggi stesso per ricevere gli ultimi aggiornamenti sull'azienda, storie, informazioni sugli eventi e altro ancora.