
Análisis técnico en profundidad de CVE-2022-22965 (Spring4Shell) con configuración del entorno, recorrido de depuración y desglose de la cadena de explotación para la práctica de laboratorio educativo.
Spring4Shell es el nombre de un CVE que existe en Spring Core del Spring Framework.
Con una puntuación CVSS 3.x de 9.8, la vulnerabilidad está clasificada en el nivel de riesgo más alto (crítico). Esta vulnerabilidad permite a un atacante ejecutar código de explotación de forma remota y controlar el servidor que contiene la vulnerabilidad.
Junto con la popularidad de Spring Core en Internet y la gravedad del impacto de Spring4Shell, los expertos consideran que esta vulnerabilidad tiene un impacto no menor al de Log4shell.
Spring4Shell no afecta a todas las aplicaciones web que utilizan Spring Framework en Internet, sino que requiere que la aplicación web cumpla con los siguientes factores:
El entorno que configuro tendrá los siguientes parámetros:
Instalación de Apache Tomcat
Como se mencionó anteriormente, uso Kali 2021.4a y Apache Tomcat 9.0.45. Si no sabes cómo instalar Apache Tomcat y deseas hacerlo en Kali Linux, puedes consultar este enlace.
Nota: Reemplaza el enlace https://mirror.kiu.ac.ug/apache/tomcat/tomcat-9/v9.0.45/bin/apache-tomcat-9.0.45.tar.gz por https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.45/bin/apache-tomcat-9.0.45.tar.gz
Elección del IDE
Necesitamos un IDE para codificar el proyecto, empaquetarlo como archivo .war y, algo muy importante, depurar. Yo uso Intellij, pero puedes usar Eclipse, Netbeans, etc., siempre que el IDE soporte Java.
Creación de un proyecto simple que contenga la vulnerabilidad
Mi proyecto es muy simple y consta de:
un modelo HelloWorld.java

un controlador HelloWorldController.java

una vista hello.jsp

Construcción del archivo .war
Para empaquetar el proyecto, haz lo siguiente: Build -> Build Artifacts -> helloworld:war -> Build.
Espera a que el proceso de Build se complete con éxito; en ese momento, el proyecto tendrá una carpeta adicional llamada out. Ve a ./out/artifacts/your_war_name/ y verás un archivo your_war_name.war; este archivo .war es el proyecto web compilado y empaquetado, y se puede usar para desplegarlo en servlets Java como Apache Tomcat.
Si Build Artifacts aparece atenuado (no se puede construir), significa que aún no se ha configurado Build Artifacts para este proyecto. Ve a: File -> Project Structure -> Artifacts -> Elimina todos los artifacts existentes -> Add (signo +) -> Web Application: Exploded -> From Modules... -> OK (finaliza la creación de Exploded) > Add (signo +) -> Web Application: Archive -> For 'helloworld:war exploded' -> OK. Luego repite el proceso de Build Artifacts.
Despliegue y configuración de depuración
Despliegue
Para desplegar un archivo .war en Apache Tomcat, simplemente copia el archivo .war en la carpeta /webapps dentro del directorio de Apache Tomcat (por ejemplo, en mi caso, copio el archivo helloworld.war (lo renombré para mayor comodidad) en /opt/tomcat/apache-tomcat-9.0.45/webapps/). Luego, inicia el servidor Tomcat de dos maneras (en Linux):
Una vez desplegado, accede a http://localhost:8080/helloworld
Configuración de depuración
Para configurar la depuración remota de Tomcat, haz lo siguiente:
En el servidor:
Abre el archivo catalina.sh y cambia el valor de localhost por la IP de la máquina virtual en el parámetro JPDA_ADDRESS

Reinicia el servidor Tomcat con: /opt/tomcat/apache-tomcat-9.0.45/bin/catalina.sh jpda start. En este momento, además de abrir el puerto 8080 para el servidor HTTP, Tomcat abrirá el puerto 8000 para que podamos conectarnos y depurar.
Nota: En esta parte de la depuración, yo ejecuto Intellij en Windows 10 y Tomcat en una máquina virtual Kali, por lo que necesito cambiar JPDA_ADDRESS. Si configuras tanto Intellij como Tomcat en la misma máquina, no es necesario cambiarlo.
En Intellij:
Ve a Run -> Edit Configurations... -> Add (signo +) -> Remote JVM Debug
Pon un nombre -> modifica Host y Port para que coincidan con la IP y el puerto que configuraste en catalina.sh -> OK -> Shift + F9 (inicia la depuración)

Primero, analizaré el proyecto que estoy usando para depurar. Como mencioné anteriormente, este proyecto es muy simple y consta de: