💀 ¿Qué es Ghostcat (CVE-2020-1938)?
Ghostcat es una vulnerabilidad crítica descubierta en el conector AJP - Apache JServ Protocol (Apache JServ Protocol) usado por Apache Tomcat.
📌 ¿Qué permite?
Permite a un atacante leer archivos internos del servidor web (como WEB-INF/web.xml) e incluso cargar archivos JSP maliciosos para ejecución remota de código (RCE), si no hay restricciones.
🔥 Afecta a:
-
Apache Tomcat desde versiones antiguas hasta:
-
Tomcat 9.0.30
-
Tomcat 8.5.50
-
Tomcat 7.0.99
-
¡Y está presente por defecto! El puerto
8009(AJP) está habilitado y expone una puerta trasera si no está correctamente filtrado.
🎯 ¿Qué permite Ghostcat?
-
Leer archivos como:
-
WEB-INF/web.xml -
WEB-INF/web.xml.bak -
Archivos de configuración
-
.jsp,.class,.properties
-
-
Subir archivos (con métodos como
PUT) si no está bien configurado. -
En algunos casos: ejecutar código JSP malicioso → RCE 😈
🧪 ¿Cómo se explota?
Con herramientas como:
📦 ajpShooter (Python)
git clone https://github.com/00theway/Ghostcat-CNVD-2020-10487
cd Ghostcat-CNVD-2020-10487
python3 ajpShooter.py -t 10.2.74.32 -p 8009 -f WEB-INF/web.xmlEsto intenta leer el archivo
WEB-INF/web.xmla través del conector AJP.
⚠️ Si tenés éxito:
Vas a ver XML con configuraciones internas. Ya con eso podrías encontrar usuarios, rutas, o preparar un payload para subir.
🛡 ¿Por qué es peligroso?
Porque ni siquiera se necesita estar autenticado en Tomcat, ni tener una sesión válida. Solo conectarse al puerto AJP expuesto.
🚨 Recomendaciones (para mitigar)
-
Cerrar el puerto 8009 si no se usa.
-
O configurar
address="127.0.0.1"en el conector AJP para que solo escuche local. -
O usar
secretRequired="true"consecret="clave"para autenticación.
🧠 En resumen:
| Cosa | Detalle |
|---|---|
| Nombre | Ghostcat |
| CVE | CVE-2020-1938 |
| Protocolo afectado | AJP (Apache JServ Protocol) |
| Puerto típico | 8009 |
| Qué permite | LFI (leer archivos) → posible RCE |
| Afecta a | Apache Tomcat ≤ 9.0.30 (y otras versiones previas) |
| Riesgo | 🟥 Crítico – ejecución remota de código (RCE) |