####################################################################### Luigi Auriemma Applicazione: Goahead webserver http://www.goahead.com/webserver/webserver.htm Versioni: <= 2.1.8 Piattaforme: multiplatform Bug: consumo di risorse Exploitation: remoto Data: 19 Jan 2004 Autore: Luigi Auriemma e-mail: aluigi@autistici.org web: aluigi.org ####################################################################### 1) Introduzione 2) Bug 3) The Code 4) Fix ####################################################################### =============== 1) Introduzione =============== Goahead webserver e' un server OpenSource embedded che puo' essere compilato su svariati sistemi (CE, Ecos, GNU/Linux, Lynx, MacOS, NW, QNX4, VXWORKS, Win32 ed altri). Esso e' supportato da molte compagnie che lo usano per i loro progetti ed e' anche usato come "base" per altri webservers, inoltre e' stato sviluppato con lo scopo di occupare poche risorse e di girare su sistemi embedded. ####################################################################### ====== 2) Bug ====== Il webserver e' affetto da un bug che permette all'attacker di consumare tutte le sue risorse. Praticamente l'attacker usa il metodo POST con un numero specifico nel campo Content-Length (il valore che specifica quanti bytes saranno inviati al server) e poi inviera' al server una quantita' di dati minore di quanto specificato. Il server allochera' tutti i dati inviati dall'attacker e poi aspettera' i bytes finali come specificato in Content-Length. Allo stesso tempo l'attacker interrompera' la connessione ed il server entrera' in un loop infinito in quanto l'errore del socket non e' ben gestito. Quello seguente e' un esempio di cosa l'attacker deve inviare al server: ------------------ POST / HTTP/1.0 Content-Length: 10 123456789 ------------------ Quindi il socket non sara' chiuso dal server, la memoria allocata fino a quel momento non sara' liberata e la CPU andra' al 100% per via del loop infinito della funzione select() non controllata. Su alcuni sistemi operativi il webserver non accettera' piu' connessioni dopo alcuni attacchi. ####################################################################### =========== 3) The Code =========== http://aluigi.org/poc/webpostmem.zip ####################################################################### ====== 4) Fix ====== Nessun fix ufficiale. Questo bug e' conosciuto da oltre un anno (Ottobre 2002). Sul newsgroup ufficiale di Goahead webserver sono state rilasciate 2 patches (9 Nov 2002 e 13 Dec 2003) per correggere il problema: news://news.goahead.com/goahead.public.webserver HO MESSO INSIEME LE 2 MAILS CHE HO SPECIFICATO QUI SOPRA IN QUESTO FILE: http://aluigi.org/patches/goahead-webpostmem-fix.txt #######################################################################