The vulnerability could allow remote code execution if an attacker sends a continuous flow of specially crafted UDP packets to a closed port on a target system.
https://technet.microsoft.com/en-us/security/bulletin/ms11-083
Quindi, anche se un'enorme quantità di pacchetti UDP con tutti i bit impostati su zero potrebbe causare un arresto anomalo, è improbabile che ciò comporterà l'esecuzione di codice. Devono contenere contenuti scritti appositamente per sfruttare il problema.
È un overflow del contatore di riferimento in base alla stessa fonte Microsoft.
Che cos'è un contatore di riferimento?
Quando un programma assegna un blocco di memoria, può essere utilizzato un contatore di riferimento per gestirlo. Ogni volta che una parte del codice del programma vuole accedervi, il contatore viene incrementato. Ogni volta che questa parte di codice viene eseguita con il blocco di memoria, il contatore viene decrementato. Quando il contatore raggiunge 0, nessuno è più interessato al blocco di memoria e viene liberato.
Che cos'è un overflow di numeri interi?
I numeri interi sono numeri usati per il conteggio. Hanno una dimensione fissa nella memoria del computer. Ad esempio 32 bit o 64 bit. Quindi, a differenza degli interi, sai dalla matematica, c'è un numero maggiore possibile. Aggiungendo 1 a quel numero si otterrà un numero molto negativo o 0.
In altre parole, se aggiungi 1 ancora e ancora, finirai con 0.
Che cos'è una vulnerabilità del contatore di riferimento?
Una vulnerabilità del contatore di riferimento è solitamente causata da un percorso del programma che non riesce a decrementare il contatore di riferimento. L'attaccante è quindi in grado di incrementare il contatore ancora e ancora.
Come risultato, può ottenere il contatore a 0 e oltre (vedere la sezione precedente). Dopo aver ottenuto il contatore di overflow e finito nuovamente a 1, attiverà il normale percorso del programma che decrementerà il contatore.
Ora il contatore ha raggiunto 0. 0 significa che nessuno è interessato al blocco di memoria, quindi verrà liberato.
Qual è il percorso di errore in questo contesto?
Il percorso del programma che non riesce a decrementare il contatore viene utilizzato quando non c'è ascolto del servizio sulla porta UDP.
È facile concludere che per il decremento finale è necessaria una porta UDP aperta per sfruttare il problema. Microsoft, tuttavia, non ha menzionato questo. Inoltre hanno dichiarato che Windows Firewall non offre alcuna protezione contro questo bug. Quindi la conclusione è probabilmente sbagliata.
Perché la liberazione della memoria usata blocca una cosa brutta?
Liberare memoria significa semplicemente che è contrassegnato come "disponibile". Qualcun altro, che richiede un blocco di memoria, può quindi ottenerlo. Ma il programma originale pensa ancora, possiede il blocco e può usarlo come vuole.
Quindi finiamo con due programmi che utilizzano lo stesso blocco di memoria senza essere consapevoli l'uno dell'altro. Ciò ovviamente causa incoerenze nei dati.
Con un po 'di sfortuna e abilità speciali, uno di questi programmi può fare cose cattive all'altra. Immagina che l'altro programma stia memorizzando il codice del programma, i puntatori al codice del programma o dati attendibili che determineranno puntatori al codice del programma in questo blocco di memoria.
È un rischio reale?
Sì. Non è facile da sfruttare e si noterà probabilmente l'invio di una quantità così grande di pacchetti UDP su una connessione Internet lenta. Ma è un vero problema che deve essere corretto.