Spring4Shell - PoC
CVE - 2022 - 22965
Versiones afectadas :
- Versiones de Spring Framework 5.3.0 a 5.3.17, 5.2.0 a 5.2.19 y versiones anteriores
- Java JDK 9
- Versiones de Apache Tomcat inferiores a 10..0.20, 9.0.62 y 8.5.78
- Las aplicaciones empaquetadas como un WAR tradicional con dependencia spring-webmvc o spring-webflux e implementadas únicamente en un contenedor Servlet independiente se ven afectadas
Descripción
- El problema puede ser elevado mediante la manipulación de classLoader
- El enlace de datos incorrecto que se utiliza para poblar un objeto a partir de parámetros de solicitud (anotación Request Mapping) causa esta vulnerabilidad
- Los atacantes pueden cargar clases arbitrarias e inyectar código arbitrario que puede ser ejecutado por la aplicación
- Una vulnerabilidad similar (CVE-2010-1622) había sido divulgada anteriormente y se aplicaron parches para restringir
class.classLoader y class.protectionDomain
- Pero JDK9 introdujo un nuevo método
class.getMethod(), que evita esa restricción usando class.module.classLoader para acceder a cualquier propiedad secundaria del objeto class
Impacto
- La explotación exitosa de esta vulnerabilidad puede conducir a la ejecución de código arbitrario en la máquina vulnerable.
Aplicación de prueba
docker build . -t spring4shell-poc-app
O bien, obtén la imagen docker desde [gokul2/spring4shell-poc]
docker pull gokul2/spring4shell-poc-app
docker run -p 8080:8080 spring4shell-poc-app
- La aplicación estará disponible en localhost:8080 ahora.
- Ejecuta el archivo exploit.py