Microsoft ha recentemente corretto un problema critico di HTTP.sys
Come capita spesso, qualcuno ha analizzato le differenze per scoprire il tipo di problema che è stato corretto e i risultati delle analisi portano a suggerire di aggiornare immediatamente IIS, prima che dobbiate essere costretti a farlo da una serie di BSOD.
ATTENZIONE!
Il danneggiamento, anche da remoto, di sistemi informatici è un reato penale.
Utilizzare le istruzioni che seguono solamente per verificare i sistemi di cui si è titolari.
Il problema corretto dall’aggiornamento CVE-2015-1635 risiede nell’errata gestione dell’header HTTP Range, utilizzato per scaricare solamente una parte di un file; l’header è utile, ad esempio, nel caso in cui si vogliano riprendere dei download interrotti.
Non tutti i server HTTP onorano quella richiesta.
Se ad IIS viene passato un numero troppo grosso nell’header Range, il gestore della richiesta può crashare. Dal momento che, per una decisione scellerata, il gestore delle richieste HTTP è un driver del kernel, se questo crasha a livello di HTTP porta con sé tutto il sistema.
Teoricamente una richiesta opportunamente contraffatta potrebbe portare all’esecuzione di codice arbitrario con privilegi di kernel sul server vittima, ma al momento della prima redazione di questo articolo non sono noti exploit di questo tipo.
Se si invia questa richiesta
curl -v [indirizzo]/static.png -H "Host: test" -H "Range: bytes=0-18446744073709551615"
ad un IIS opportunamente patchato, il sistema non dovrebbe risentirne e dovrebbe rispondere con
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd"> <HTML><HEAD><TITLE>Bad Request</TITLE> <META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii"></HEAD> <BODY><h2>Bad Request - Invalid Header</h2> <hr><p>HTTP Error 400. The request has an invalid header name.</p> </BODY></HTML>
Se la risposta fosse Requested header range not satisfiable
, il sistema potrebbe essere a rischio e potrebbe non essere stato aggiornato.
Se il range specificato nella richiesta parte da 20 anziché da zero, potrebbe essere possibile mandare il sistema in BSOD.
Aggiornamento 19/4/2015 – Stanno proliferando pagine web con tool gratuiti per il controllo di questa vulnerabilità. Pensateci bene prima di dare a sconosciuti l’indirizzo di un IIS che oggi potrebbe non essere vulnerabile, ma se uscisse una nuova vulnerabilità in seguito…
Aggiornamento 21/4/2015 – Qualys ha pubblicato un’analisi approfondita del baco, della patch e di come può essere sfruttato da malintenzionati. In questo momento sono in circolazione degli exploit che permettono di guadagnare il controllo del computer remoto.
4 risposte a “Aggiornate gli IIS esposti a Internet ADESSO”
Mi chiedo quanto abbiano guadagnato, in termini di prestazioni, a mettere la decodifica HTTP in un driver kernel mode invece che in una normale applicazione.
Il motivo ceh viene citato nella documentazione Microsoft e’ questo:
* Kernel-mode request queuing. Requests cause less overhead in context switching because the kernel forwards requests directly to the correct worker process. If no worker process is available to accept a request, the kernel-mode request queue holds the request until a worker process picks it up.
* Request pre-processing and security filtering.
Secondo me e’ una vaccata.
L’aspetto qualitativo lo conoscevo, è quello quantitativo che mi manca. Avranno fatto una misurazione? 🙂
E sì, anche secondo me è una vaccata. 🙂
Il mio dubbio atroce è che si siano accorti ad un certo punto che IIS come l’avevano scritto era lentissimo in alcuni contesti (credo in particolare in quello in cui IIS deve impersonare un utente, leggendo le motivazioni) e l’unica soluzione sarebbe stata un driver in kernel mode.
Essendo gli autori del sistema operativo possono permetterselo, anche se CVE-2015-1635 e’ uno dei prezzi da pagare per questa scorciatoia (o, meglio, SCONCIATOIA).