Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
spring4shell-local-verification-lab — Spring Framework CVE-2022-22965: proyecto de verificación de condiciones de impacto local, reparación mediante actualización de versión y repetición de pruebas | Kitploit
Herramientas/GitHubGitHub/meng-security/spring4shell-local-verification-lab
Análisis de VulnerabilidadesAnálisis de CódigoExplotaciónSeguridad WebAprendizaje y EducaciónLabs y Práctica
GitHubmeng-security/spring4shell-local-verification-lab

spring4shell-local-verification-lab

Spring Framework CVE-2022-22965: proyecto de verificación de condiciones de impacto local, reparación mediante actualización de versión y repetición de pruebas

Ver Repositorio
1hace 1 mesAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Proyecto de verificación local de condiciones de impacto, corrección y reprueba de Spring4Shell

Introducción del proyecto

Este proyecto se utiliza para aprender y verificar las condiciones de impacto, el comportamiento de riesgo, el método de corrección y el flujo de reprueba posterior de la vulnerabilidad CVE-2022-22965 de Spring Framework, también conocida como Spring4Shell.

El proyecto se completó en un entorno local autorizado de construcción personal. El enfoque del proyecto no es atacar objetivos reales, sino confirmar una a una las condiciones de impacto relacionadas con la vulnerabilidad mediante la creación de entornos de prueba Spring MVC antes y después de la corrección, y observar de forma segura y controlada, mediante solo lectura, las diferencias en las rutas de propiedades internas del enlace de datos de Spring antes y después de la actualización de versión.

Este proyecto completó los siguientes procesos:

  • Preparación del entorno JDK, Maven y Apache Tomcat
  • Creación del proyecto WAR Spring MVC
  • Verificación de referencia de funcionalidad normal
  • Confirmación de las condiciones de impacto de la vulnerabilidad
  • Diagnóstico de solo lectura de rutas de propiedades internas
  • Análisis de la causa de la vulnerabilidad
  • Actualización de versión de Spring Framework
  • Reprueba de seguridad posterior a la corrección
  • Reprueba de funcionalidad normal posterior a la corrección
  • Organización del informe de pruebas y la evidencia de capturas de pantalla

Declaración de seguridad

Este proyecto se utiliza únicamente en entornos locales autoconstruidos personales o en entornos de pruebas de seguridad expresamente autorizados.

El proyecto no escanea, sondea ni explota ningún sitio web público, servidor o sistema empresarial de terceros, y no contiene datos reales de usuarios ni datos empresariales reales.

Durante las pruebas no se realizaron las siguientes acciones:

  • No se escribió WebShell
  • No se ejecutaron comandos del sistema
  • No se modificó la configuración de Tomcat
  • No se estableció una reverse shell
  • No se realizó control de persistencia
  • No se afectó a ningún sistema externo

Se prohíbe utilizar los métodos de prueba de este proyecto contra cualquier objetivo no autorizado.

Contexto de la vulnerabilidad

CVE-2022-22965, comúnmente conocida como Spring4Shell, es una vulnerabilidad de ejecución remota de código en Spring Framework relacionada con el mecanismo de enlace de datos de parámetros de solicitud.

Spring MVC admite el enlace automático de los parámetros de solicitud HTTP a las propiedades de objetos Java. Por ejemplo, este proyecto recibe los parámetros de nombre y correo electrónico mediante:

@ModelAttribute("profile") UserProfile profile

En condiciones normales, los parámetros de solicitud name y email se enlazan al objeto UserProfile según el nombre de la propiedad.

En las versiones afectadas, las restricciones de acceso a algunas rutas de propiedades internas no eran lo suficientemente estrictas. Cuando se utiliza JDK 9 o superior y se cumplen condiciones específicas de contenedor Servlet, forma de despliegue y enlace de datos, los parámetros de solicitud externos podrían continuar, a través de objetos de negocio normales, accediendo a objetos internos relacionados con la Class de Java, los módulos, los cargadores de clases o el contenedor.

En entornos explotables específicos, un atacante podría modificar la configuración del servidor o escribir archivos en el servidor, generando así un riesgo de ejecución remota de código.

Este proyecto no ejecuta la explotación remota completa, sino que utiliza la siguiente ruta de propiedades para realizar un diagnóstico diferencial seguro y de solo lectura:

class.module.name

Objetivos del proyecto

  1. Comprender el proceso básico de enlace de datos de parámetros de solicitud en Spring MVC.
  2. Crear un proyecto de prueba WAR Spring MVC local.
  3. Completar la verificación de referencia de la funcionalidad de negocio normal.
  4. Confirmar las condiciones de impacto como Spring Framework, JDK, Tomcat, despliegue WAR y punto de entrada de enlace de datos.
  5. Observar el comportamiento de acceso a las rutas de propiedades internas mediante solo lectura.
  6. Analizar las causas principales de la vulnerabilidad.
  7. Actualizar Spring Framework a la versión corregida.
  8. Realizar la reprueba posterior a la corrección con los mismos métodos.
  9. Confirmar que la actualización de versión no afectó la funcionalidad de negocio normal.
  10. Organizar el código fuente del proyecto, el informe de pruebas y la evidencia de capturas de pantalla.

Entorno experimental

Este proyecto se completó en un entorno experimental aislado de VMware local personal.

  • Host: Windows 11
  • Máquina objetivo: Máquina virtual Windows 10
  • Software de virtualización: VMware Workstation
  • Entorno Java: Eclipse Temurin JDK 11.0.31
  • Herramienta de construcción del proyecto: Apache Maven 3.9.16
  • Contenedor Servlet: Apache Tomcat 9.0.60
  • Versión de Spring Framework antes de la corrección: 5.3.17
  • Versión de Spring Framework después de la corrección: 5.3.18
  • Framework web: Spring MVC
  • Método de despliegue del proyecto: despliegue tradicional de paquete WAR
  • Dirección de prueba: 127.0.0.1

Datos de prueba de funcionalidad normal:

  • Nombre: Alice
  • Correo electrónico: [email protected]

Ruta de propiedad de diagnóstico de seguridad:

class.module.name

Estructura del proyecto

spring4shell-local-verification-lab/

  • README.md: introducción del proyecto, enfoque de prueba, resultados de verificación y notas de corrección
  • docs/: informe de verificación local de condiciones de impacto, corrección y reprueba de Spring4Shell
  • images/: capturas de pantalla del entorno del proyecto, del proceso de prueba y de la reprueba
  • vulnerable-demo/: proyecto previo a la corrección que utiliza Spring Framework 5.3.17
  • fixed-demo/: proyecto posterior a la corrección que utiliza Spring Framework 5.3.18
  • notes/: notas de estudio y registros del proceso

Estructura principal del código fuente:

  • config/: clases de configuración de Spring MVC y clases de inicialización de la aplicación
  • controller/: controlador de procesamiento de formularios y de diagnóstico de rutas de propiedades
  • model/: clase UserProfile utilizada para recibir los parámetros de nombre y correo electrónico
  • WEB-INF/views/: páginas JSP de inicio, de resultado de envío y de resultado de diagnóstico

Descripción de los proyectos de prueba

Este proyecto creó dos aplicaciones Spring MVC, una previa y una posterior a la corrección.

Proyecto previo a la corrección

Directorio del proyecto:

vulnerable-demo

Versión utilizada:

Spring Framework 5.3.17

Archivo WAR generado:

spring4shell-vulnerable-demo.war

Dirección de acceso:

http://127.0.0.1:8080/spring4shell-vulnerable-demo/

Página de diagnóstico:

http://127.0.0.1:8080/spring4shell-vulnerable-demo/binding-probe

Proyecto posterior a la corrección

Directorio del proyecto:

fixed-demo

Versión utilizada:

Spring Framework 5.3.18

Archivo WAR generado:

spring4shell-fixed-demo.war

Dirección de acceso:

http://127.0.0.1:8080/spring4shell-fixed-demo/

Página de diagnóstico:

http://127.0.0.1:8080/spring4shell-fixed-demo/binding-probe

Descripción de la funcionalidad normal

El proyecto de prueba proporciona un formulario simple de perfil de usuario que incluye:

  • Campo de entrada de nombre
  • Campo de entrada de correo electrónico
  • Botón de envío de datos

El controlador recibe los parámetros de solicitud mediante:

@ModelAttribute("profile") UserProfile profile

Cuando el usuario envía el nombre y el correo electrónico, Spring MVC enlaza automáticamente los parámetros name y email al objeto UserProfile.

La página de resultados lee el objeto enlazado y muestra el nombre y el correo electrónico enviados por el usuario.

Esta funcionalidad sirve para confirmar que el proyecto puede ejecutarse correctamente y, al mismo tiempo, demuestra que la aplicación cuenta con un punto de entrada válido de enlace de datos de parámetros de solicitud de Spring MVC.

Enfoque de prueba

Este proyecto se desarrolla siguiendo el enfoque de: primero confirmar la funcionalidad normal, luego confirmar las condiciones de impacto, después realizar el diagnóstico de riesgo de solo lectura y, finalmente, corregir y volver a probar.

  1. Instalar y configurar JDK 11, Maven y Apache Tomcat.
  2. Crear el proyecto Spring MVC con Spring Framework 5.3.17.
  3. Crear el formulario de nombre y correo electrónico.
  4. Utilizar @ModelAttribute para enlazar los parámetros de solicitud al objeto UserProfile.
  5. Empaquetar el proyecto como archivo WAR con Maven.
  6. Desplegar el archivo WAR en un Apache Tomcat de ejecución independiente.
  7. Enviar datos simulados de perfil de usuario local para completar la verificación de referencia de funcionalidad normal.
  8. Comprobar el JDK, Tomcat, Spring Framework y la forma de despliegue realmente en ejecución.
  9. Utilizar el BeanWrapper de Spring para realizar el diagnóstico de solo lectura de class.module.name.
  10. Registrar el resultado de acceso a la ruta de propiedades en el entorno con Spring Framework 5.3.17.
  11. Actualizar Spring Framework a 5.3.18.
  12. Reconstruir y desplegar el proyecto corregido.
  13. Realizar la reprueba posterior a la corrección con la misma ruta de propiedades.
  14. Enviar nuevamente el nombre y el correo electrónico para confirmar que la funcionalidad normal no se vio afectada.

Confirmación de las condiciones de impacto

Este proyecto confirmó una a una las siguientes condiciones de impacto:

  • Se utiliza JDK 11.0.31, que cumple la condición de JDK 9 o superior
  • Se utiliza Spring Framework 5.3.17
  • El proyecto incluye el componente spring-webmvc
  • Se utiliza Apache Tomcat 9.0.60
  • El proyecto se despliega como paquete WAR tradicional
  • El proyecto es cargado por un Tomcat de ejecución independiente
  • El controlador cuenta con un punto de entrada de enlace de datos basado en @ModelAttribute

Las dependencias de Spring realmente desplegadas en el proyecto previo a la corrección incluyen:

  • spring-beans-5.3.17.jar
  • spring-core-5.3.17.jar
  • spring-web-5.3.17.jar
  • spring-webmvc-5.3.17.jar

Este proyecto no determina si la vulnerabilidad es válida basándose únicamente en la versión de Spring Framework, sino que realiza un análisis integral combinando JDK, Spring MVC, Tomcat, despliegue WAR y punto de entrada de enlace de datos.

Método de diagnóstico de riesgo

Para evitar ejecutar una explotación de vulnerabilidad destructiva, este proyecto utiliza el BeanWrapper proporcionado por Spring Framework para realizar una verificación de solo lectura de la siguiente ruta de propiedades:

class.module.name

Esta ruta representa:

  • class: accede al objeto Class de Java correspondiente al objeto de negocio actual
  • module: accede al módulo Java al que pertenece la clase
  • name: lee el nombre del módulo

El proceso de diagnóstico solo invoca la comprobación de legibilidad de la propiedad y el método de lectura del valor de la propiedad:

  • No establece propiedades de objetos
  • No modifica la configuración del servidor
  • No escribe archivos en el servidor
  • No ejecuta comandos del sistema operativo

Por lo tanto, este diagnóstico solo puede utilizarse para observar las diferencias de acceso a las rutas de propiedades internas antes y después de la corrección, y no puede demostrar por sí solo que se haya logrado la ejecución remota de código.

Resultados de verificación

Resultados antes de la corrección

El entorno previo a la corrección utiliza:

Spring Framework 5.3.17

Ruta de propiedad comprobada:

class.module.name

Resultado del diagnóstico:

  • ¿Se puede leer?: true
  • Resultado de lectura: null

true indica que el entorno actual puede continuar resolviendo module.name a través de la propiedad class de los objetos de negocio normales.

El resultado de lectura es null porque la aplicación WAR actual se ejecuta en el módulo sin nombre de Java y el nombre del módulo está vacío; no significa que la lectura de la ruta de propiedad haya fallado.

Resultados después de la corrección

El entorno posterior a la corrección utiliza:

Spring Framework 5.3.18

Se vuelve a diagnosticar con la misma ruta de propiedades:

class.module.name

Resultado del diagnóstico:

  • ¿Se puede leer?: false
  • Resultado de lectura: Not readable

Los resultados antes y después de la corrección forman un contraste claro:

  • Spring Framework 5.3.17: la ruta de propiedades se puede leer
  • Spring Framework 5.3.18: la ruta de propiedades no se puede leer

Este resultado indica que, tras la actualización de versión, el acceso a la ruta de propiedades de diagnóstico original quedó restringido y la manifestación de riesgo observada antes de la corrección ya no aparece.

Medidas de corrección

Este proyecto adopta la actualización de la versión de Spring Framework como método de corrección.

Configuración antes de la corrección:

<spring.version>5.3.17</spring.version>

Configuración después de la corrección:

<spring.version>5.3.18</spring.version>

Durante el proceso de corrección se completaron las siguientes acciones:

  1. Copiar el proyecto previo a la corrección a fixed-demo.
  2. Mantener sin cambios la lógica de negocio del controlador, el modelo de datos y las páginas JSP.
  3. Actualizar Spring Framework de 5.3.17 a 5.3.18.
  4. Volver a descargar las dependencias de la versión corregida con Maven.
  5. Recompilar y generar el archivo WAR corregido.
  6. Desplegar el WAR corregido en Apache Tomcat.
  7. Comprobar la versión real de los JAR de Spring desplegados en el proyecto corregido.
  8. Realizar la reprueba de seguridad con la ruta de propiedades original.
  9. Volver a probar la función de envío de nombre y correo electrónico.

Las dependencias de Spring realmente desplegadas en el proyecto posterior a la corrección incluyen:

  • spring-beans-5.3.18.jar
  • spring-core-5.3.18.jar
  • spring-web-5.3.18.jar
  • spring-webmvc-5.3.18.jar

Este resultado demuestra que la versión corregida fue reconstruida y desplegada realmente, y no solo se modificó el número de versión en pom.xml.

Reprueba de funcionalidad normal tras la corrección

Después de actualizar a Spring Framework 5.3.18, se vuelve a acceder a la página de inicio del proyecto corregido y se envían los siguientes datos de prueba:

  • Nombre: Alice
  • Correo electrónico: [email protected]

Después del envío, la página sigue mostrando correctamente:

  • Envío de perfil de usuario exitoso
  • Nombre: Alice
  • Correo electrónico: [email protected]

Este resultado indica que la actualización de versión no afectó el enlace normal de parámetros de solicitud ni la función de visualización de páginas del proyecto.

Causa de la vulnerabilidad

El mecanismo de enlace automático de datos de Spring MVC puede acceder a las propiedades de objetos Java según los nombres de los parámetros de solicitud HTTP.

Los parámetros de negocio normales name y email solo necesitan acceder a las propiedades ordinarias correspondientes en UserProfile.

Sin embargo, el mecanismo de acceso a propiedades de Spring también admite rutas de propiedades anidadas con puntos. En las versiones afectadas, las restricciones sobre algunas rutas de propiedades internas no eran lo suficientemente estrictas, lo que permitía que, en entornos específicos, los parámetros externos continuaran desde los objetos de negocio normales hacia objetos relacionados con la Class de Java, los módulos, los cargadores de clases o el contenedor Servlet.

Cuando existen en los objetos internos propiedades escribibles capaces de afectar la configuración del servidor o el sistema de archivos, y la aplicación cumple simultáneamente condiciones como JDK, Tomcat, despliegue WAR y enlace de datos, puede generarse un riesgo de ejecución remota de código.

Esta vulnerabilidad no se debe a que las propiedades name o email tengan un problema en sí mismas, ni todos los proyectos que utilizan Spring MVC son necesariamente explotables. Para que la vulnerabilidad se materialice, normalmente deben coexistir múltiples condiciones.

Recomendaciones de corrección

En los sistemas empresariales reales se recomienda adoptar las siguientes medidas:

  • Revisar las versiones reales de Spring Framework y Spring Boot en ejecución
  • Priorizar la actualización a versiones de seguridad que aún cuenten con soporte oficial
  • Reconstruir y volver a desplegar la aplicación después de la actualización
  • Verificar la versión real de los JAR de Spring en el paquete de despliegue final
  • Restringir el alcance del enlace de datos en los controladores
  • Permitir únicamente el enlace de los campos necesarios para el negocio normal
  • Utilizar objetos dedicados de datos de solicitud para recibir parámetros externos
  • Evitar exponer entidades de base de datos u objetos internos complejos directamente a parámetros externos
  • No depender de la validación del frontend para aplicar las restricciones de seguridad
  • Adoptar medidas temporales de mitigación para los sistemas que no puedan actualizarse de inmediato
  • Las medidas temporales de mitigación no pueden sustituir la actualización formal de versión
  • Ejecutar Tomcat y los servicios Java con cuentas de privilegios mínimos
  • Configurar permisos mínimos necesarios en los directorios de la aplicación y de configuración
  • Supervisar parámetros de solicitud anómalos y cambios en archivos del servidor
  • Tras la corrección, realizar tanto la reprueba de seguridad como la reprueba de la funcionalidad de negocio normal

Evidencia clave de capturas de pantalla

Entorno y despliegue

Confirmación de versión de JDK 11

Confirmación de versión de Maven

Apache Tomcat 9.0.60 iniciado correctamente

Empaquetado con Maven exitoso

Despliegue del proyecto WAR exitoso

Línea base de funcionalidad normal

Acceso normal a la página de inicio del proyecto de prueba

Verificación de línea base de funcionalidad normal exitosa

Verificación previa a la corrección

Confirmación de dependencias de Spring Framework 5.3.17

Ruta de propiedad interna legible antes de la corrección

Corrección y reprueba

Empaquetado de la versión corregida exitoso

Ruta de propiedad interna no legible después de la corrección

Reprueba de funcionalidad normal tras la corrección exitosa

Confirmación de dependencias de Spring Framework 5.3.18 tras la corrección

Progreso actual

  • Crear el directorio del proyecto
  • Redactar el README
  • Crear el informe de pruebas
  • Preparar el entorno de JDK, Maven y Tomcat
  • Construir el proyecto de prueba Spring MVC
  • Completar el empaquetado y despliegue del proyecto WAR
  • Completar la verificación de línea base de funcionalidad normal
  • Completar la confirmación de condiciones de impacto de la vulnerabilidad
  • Completar el diagnóstico de riesgo de solo lectura local
  • Completar el análisis de la causa de la vulnerabilidad
  • Completar la actualización de versión de Spring Framework
  • Completar la reprueba de seguridad posterior a la corrección
  • Completar la reprueba de funcionalidad normal posterior a la corrección
  • Confirmar la versión real de las dependencias posterior a la corrección
  • Organizar el informe de pruebas y la evidencia de capturas de pantalla

Resumen del proyecto

Este proyecto completó, en un entorno local aislado, la confirmación de las condiciones de impacto, el diagnóstico de las manifestaciones de riesgo, la corrección mediante actualización de versión y la reprueba posterior de la vulnerabilidad CVE-2022-22965 de Spring Framework.

El proyecto previo a la corrección utiliza Spring Framework 5.3.17. En el entorno con JDK 11, Spring MVC, Apache Tomcat 9.0.60 y despliegue WAR tradicional, la ruta de propiedades class.module.name se determinó como legible.

El proyecto posterior a la corrección actualiza Spring Framework a 5.3.18. La misma ruta de propiedades pasó a no ser legible y, al mismo tiempo, la funcionalidad normal de enlace de datos de nombre y correo electrónico sigue estando disponible.

Este proyecto no ejecutó la explotación remota completa, sino que completó la verificación de diferencias antes y después de la corrección mediante métodos de solo lectura seguros y controlados.

El proyecto pone de relieve las siguientes capacidades:

  • Configuración del entorno básico de Java y Spring MVC
  • Construcción de proyectos Maven
  • Despliegue de aplicaciones WAR en Tomcat
  • Comprensión del mecanismo de enlace de datos de Spring
  • Análisis de condiciones de impacto de vulnerabilidades
  • Diseño de procesos de prueba de seguridad
  • Actualización de versiones de componentes
  • Reprueba posterior a la corrección
  • Pruebas de regresión de funcionalidad normal
  • Redacción de informes de pruebas de seguridad
  • Organización de evidencia de capturas de pantalla y del proyecto de GitHub
Descargar herramienta