
La vulnerabilidad CVE-2022-22965, conocida como Spring4Shell, es una falla de ejecución remota de código (RCE) en el framework Java Spring Core, presente en versiones anteriores a 5.3.18 y 5.2.20. Esta vulnerabilidad permite a un atacante inyectar código y ejecutarlo de forma remota en un servidor vulnerable explotando una mala configuración de los registros de Tomcat. Fue descubierta en marzo de 2022 y afecta aplicaciones ActiveMQ, Spring MVC y Spring WebFlux que funcionen con una versión de JDK >= 9.

Nos aseguramos de tener una versión de JDK >= 9; si no, la activamos:

Requisitos ✔ Los módulos requests y BeautifulSoup son necesarios para que el exploit funcione. Se instalan con:
pip3 install bs4
pip3 install requests
Escaneo de la red

Aquí, tenemos el servicio ActiveMQ versión 5.17.3 en escucha.
En nuestra estrategia de explotación utilizaremos un script Python desarrollado llamado spring4shell.py adjunto a este proyecto.
Objetivo de este script: Este script Python permite explotar la falla CVE-2022-22965 modificando los parámetros de registro de Tomcat para inyectar un webshell en los archivos de registro, permitiendo así la ejecución de comandos remotos en el servidor comprometido.
Explicación del Código Python
Configuración de las salidas de terminal:
La clase settings adapta la visualización en la terminal según las opciones elegidas, con colores para diferenciar los mensajes de información, advertencia y error.
Generación de variables aleatorias:
Las funciones filename() y password() generan cadenas hexadecimales aleatorias para asegurar el nombre del archivo y la contraseña del webshell.
Explotación de la vulnerabilidad:
El script envía solicitudes para modificar los parámetros de registro de Tomcat, inyectando fragmentos de código JSP a través de los registros. Al configurar los registros para que escriban en el directorio webapps/ROOT, cada entrada se vuelve interpretable como código JSP.
El archivo de registro inyectado actúa entonces como un webshell accesible a través de un navegador para ejecutar comandos.
Interacción con el Webshell:
La clase terminal abre una interfaz interactiva que permite enviar comandos al servidor comprometido. Los comandos se envían como parámetro cmd, y las respuestas se muestran en la terminal.
Después de ejecutar el script, se proporciona un enlace al webshell: Mediante el comando:
python3 spring4shell.py http://172.17.0.1

Obtenemos acceso directo al shell de nuestro servidor ActiveMQ para ejecutar todos los comandos que deseemos.
¡¡¡Fin del exploit!!!