####################################################################### Luigi Auriemma Applicazione: NULLhttpd http://nullhttpd.sourceforge.net/httpd/ Versioni: <= 0.5.1 Piattaforme: Tutte quelle supportate (Win & Unix) Bug: Consumo di risorse remoto Date: 24 Sep 2003 Author: Luigi Auriemma e-mail: aluigi@autistici.org web: aluigi.org ####################################################################### 1) Introduzione 2) Bug 3) The Code 4) Fix ####################################################################### =============== 1) Introduzione =============== "Null httpd e' un web server piccolo, semplice e multithreaded per Linux e Windows." Comunque, come detto dall'autore, questo server non e' stato sviluppato per girare su servers di produzione o per la qualita' e la sicurezza. ####################################################################### ====== 2) Bug ====== Questo tipo di bug mi piace tantissimo. Quasi sempre le cause che portano a tale problema sono i valori di ritorno delle funzioni recv() e select() che non vengono controllati adeguatamente e cio' fa' si che il server entri in un loop infinito se aspetta una specifica quantita' di dati ed il client chiude la connesione prima di inviare tutti i dati. Gli effetti sono: - CPU al 100%: causato dal loop che chiama recv() e/o select() all'infinito - consumo di memoria: se il server riceve dati dal client, la memoria usata non sara' liberata perche' la richiesta (da come la vede il server) e' ancora attiva - altre risorse usate: processi, altra memoria e soprattutto sockets Come detto precedentemente, il bug avviene quando il server aspetta dati quindi l'attacker dovra' usare il comando POST con il parametro Content-Length. Il seguente e' un esempio pratico: ------------------ POST / HTTP/1.0 Content-Length: 10 123456789 ------------------ Quindi il client "dice" che inviera' (per esempio) 1 megabyte ma in realta' inviera' 1 megabyte meno 1 byte (memoria che verra occupata nel server) Dopo alcune connessioni il server finira' tutti i sockets disponibili e diventera' irragiungibile. ####################################################################### =========== 3) The Code =========== Il codice e' per *nix e Win e permette di scegliere quanti kilobytes verranno consumati per ogni connessione ed il numero di connessioni: http://aluigi.org/poc/webpostmem.zip ####################################################################### ====== 4) Fix ====== No fix. L'autore e' stato contattato oltre 10 giorni fa' ma non ho ancora ricevuto una risposta sino ad ora. #######################################################################