###################################################################### Luigi Auriemma Application: Apache WebServer (http://httpd.apache.org) Version: 2.0.39 e precedenti 2.0.x, SOLO su sistemi che utilizzano il backslash come delimitatore del path (Windows/Netware/OS2 etc...) Bug: Directory traversal vulnerability e path disclosure sente nel server. Inoltre l'attacker puo' anche vedere il percorso ove e' situato il server Apache. Date: 16 Aug 2002 Author: Luigi Auriemma e-mail: aluigi@autistici.org web: aluigi.org CAN-2002-0654 CAN-2002-0661 ###################################################################### 1) Introduzione 2) Bug 3) Il Codice 4) Fix ###################################################################### =============== 1) Introduzione =============== Il bug che ho trovato riguardo il directory traversal puo' essere classificato come ad alto rischio ed il path disclosure come un bug a basso rischio. Con il primo bug un attacker puo' vedere ogni file nel sistema ed ese- guirlo appoggiandosi al percorso /cgi-bin/. Il bug e' stato segnalato all'Apache Group alcuni minuti dopo che e' stato scoperto quindi e' quindi stato risolto il piu' velocemente pos- sibile. Il secondo bug invece e' un semplice path disclosure, utile per otte- nere maggiori informazioni riguardo il server (importante se l'ammini- stratore ha nascosto alcuni campi nell'header). - NOTA IMPORTANTE - L'Apache Software Foundation raccomanda a tutti gli utenti della ver- sione di Apache per Win32, Netware ed OS2 di aggiornarsi immediatamen- te alla 2.0.40 o, temporaneamente, utilizzando il fix suggerito nella sezione Fix di questo advisory. E' comunque consigliato l'upgrade alla nuova versione anche per gli utenti con sistemi Unix-like in modo da eliminare il path disclosure. ###################################################################### ====== 2) Bug ====== A) CAN-2002-0654 ================ Questo bug non e' pericoloso in quanto non fornisce accesso remoto al sistema o ad altri dati, ma per un attacker e' utile riuscire ad avere sempre piu' informazioni e dettagli riguardo il server per lanciare attacchi piu' efficaci. Con questo bug possiamo vedere il percorso ove e' installato Apache, cosi' ad esempio possiamo sapere se il server gira su una macchina Windows, se e' la seconda versione di Apache (Apache2) e naturalmente la versione del server (tutte informazioni utili se l'amministratore ha oscurato il campo Server od altre info riguardo il server, cosi' se il bug e' presente, sapremo per esempio che e' installata una versione di Apache antecedente la 2.0.40). Il bug in questione comunque sembra essere dovuto solo ad alcune con- figurazioni inerenti il linguaggio da usare di default. Comunque ecco un esempio. Dal browser inseriamo la seguente stringa: http://SERVER/error/HTTP_NOT_FOUND.html.var Dopodiche' il server ci rispondera' con questa pagina: |Not Acceptable | |An appropriate representation of the requested resource /error/HTTP_NOT_FOUND.html.var could not be found on this server. |Available variants: | | * C:/server/Apache Group/Apache2/error/HTTP_NOT_FOUND.html.var , type text/html, language de | * C:/server/Apache Group/Apache2/error/HTTP_NOT_FOUND.html.var , type text/html, language en | * C:/server/Apache Group/Apache2/error/HTTP_NOT_FOUND.html.var , type text/html, language es | * C:/server/Apache Group/Apache2/error/HTTP_NOT_FOUND.html.var , type text/html, language fr Come possiamo vedere il server ci risponde riportando tutto il percor- so del file che abbiamo richiesto. Possiamo richiedere tutti i files .var nella directory error ed avremo lo stesso risultato. Maggiori dettagli sono reperibili sul sito di Apache http://httpd.apache.org B) CAN-2002-0661 ================ Il seguente problema e' inerente la gestione dei caratteri "pericolo- si" che possono essere utilizzati per lanciare alcuni attacchi, come appunto il directory traversal. Infatti il carattere backslash ('\' == %5c) e' riconosciuto dal webserver tra questi caratteri "particolari", ma il problema risiede nell'utilizzo da parte dell'attacker di directory "esterne" quali /cgi-bin/ ed /error/. Di conseguenza i sistemi vulnerabili sono tutti quelli che utilizzano il backslash per delimitare i percorsi (Windows, Netware e OS2). Ecco alcuni esempi: per vedere il file winn\win.ini: http://SERVER/error/%5c%2e%2e%5c%2e%2e%5c%2e%2e%5c%2e%2e%5cwinnt%5cwin.ini per eseguire l'utility wintty nella cartella Apache2/bin: http://SERVER/cgi-bin/%5c%2e%2e%5cbin%5cwintty.exe?%2dt+HELLO In una forma piu' "leggibile" queste due stringhe significano: http://SERVER/error/\..\..\..\..\winnt\win.ini http://SERVER/cgi-bin/\..\bin\wintty.exe?-t+HELLO Cosi' nel primo esempio noi possiamo andare giu' fino al root con \..\..\..\..\ in quanto ci troviamo in "c:\programmi\Apache Group\Apache2\error". Invece nel secondo esempio utilizziamo /cgi-bin/ e passiamo gli argomenti con "file.exe?arg1+arg2+arg3+...". Maggiori dettagli sono reperibili sul sito di Apache http://httpd.apache.org ###################################################################### ============ 3) Il Codice ============ Guarda gli esempi nella sezione 2. ###################################################################### ====== 4) Fix ====== Apache 2.0.40 dal sito web di Apache (http://httpd.apache.org) Comunque questo e' un semplice metodo, per fixare temporaneamente il directory traversal bug, suggerito dall'Apache Group: --- Una semplice istruzione nel file httpd.conf risolvera' la vulnerabili- ta'. Davanti alla prima istruzione 'Alias' o 'Redirect' basta aggiungere la seguente stringa: RedirectMatch 400 "\\\.\." --- ######################################################################