Spring Framework es la base para la mayoría de las aplicaciones empresariales escritas en el lenguaje de programación Java. Spring Core es un marco Java muy popular para crear aplicaciones web Java modernas.
Spring4Shell, es una vulnerabilidad de día cero encontrada en Spring Core identificada como CVE-2022-22965. El exploit toma ventaja una nueva vulnerabilidad, que podría explotarse de forma remota (RCE) si se implementa una aplicación Spring en un servidor Apache Tomcat usando una configuración común.
Condiciones de explotación:
La vulnerabilidad existe en Spring Core con JDK versión 9.0 o superior, parece afectar las funciones que usan la anotación @RequestMapping y los parámetros POJO (Plain Old Java Object).
Dado que la explotación requiere un HTTP POST simple para una aplicación vulnerable, los actores de amenazas podrán crear scripts para escanear y explotar automáticamente los servidores vulnerables.
Los actores de amenazas pueden usar estos exploits para ejecutar comandos en el servidor, lo que permitirá el acceso remoto completo al dispositivo.
El ataque actualmente funciona para las aplicaciones Spring implementadas en Tomcat, por otra parte las aplicaciones Spring que usan Spring Boot y Tomcat incorporado, un mecanismo común de implementación, no son explotables.
Mitigaciones
Actualmente Spring ha publicado un post anunciando que la actualizacion del framework está por publicarse. Sin embargo, se recomienda que utilice las siguientes dos soluciones temporales, además prestar atención al lanzamiento oportuno de los parches oficiales y corregir las vulnerabilidades.
Workarounds
Opción 1: Política WAF
En los dispositivos de protección de red como WAF, implemente el filtrado de reglas para cadenas como:
«class.*», «Class.*», «*.class.*», «*.Class.*» de acuerdo con la situación real del tráfico en servicios desplegados.
Después de filtrar las reglas, pruebe sus operaciones comerciales para evitar un mayor impacto.
Opción 2: Agregar Class
Cree la siguiente clase global en el paquete del proyecto del sistema de la aplicación y asegúrese de que Spring cargue esta clase (se recomienda agregarla en el paquete donde se encuentra el controlador). Después de agregar la clase, el proyecto debe ser recompilado, empaquetado y probado para la verificación funcional, luego volver a publicar el proyecto.
Para mayor información:
- https://spring.io/blog/2022/03/31/spring-framework-rce-early-announcement
- https://tanzu.vmware.com/security/cve-2022-22965
- https://www.rapid7.com/blog/post/2022/03/30/spring4shell-zero-day-vulnerability-in-spring-framework/
- https://diarioinforme.com/el-nuevo-framework-spring-java-zero-day-permite-la-ejecucion-remota-de-codigo/
- https://www.darkreading.com/application-security/zero-day-vulnerability-discovered-in-java-spring-framework
- https://www.bleepingcomputer.com/news/security/new-spring-java-framework-zero-day-allows-remote-code-execution/
- https://svrforum.com/itnews/221170