Alerta de Seguridad No. 24/22: Múltiples vulnerabilidades en Spring, y vulnerabilidad crítica de día cero Spring4Shell

  • 14/04/2022
  • 262
Alerta de Seguridad No. 24/22: Múltiples vulnerabilidades en Spring, y vulnerabilidad crítica de día cero Spring4Shell

Spring es un proyecto mantenido por Spring.io (una filial de VMWare) y es utilizado por muchos frameworks de software empresarial basados en Java. Se han identificado las siguientes vulnerabilidades en Spring:

  • Denegación de Servicio (DoS) en Spring Framework, descubierta por 4ra1n, con severidad media e identificador CVE-2022-22950;
  • Ejecución Remota de Código (RCE) en Spring Cloud Function, descubierta por m09u3r, con severidad media e identificador CVE-2022-22963;
  • RCE 0day en Spring Core (Spring4Shell), ha sido reportada por los investigadores codeplutos y meizjm3i de AntGroup FG Security Lab, y podría permitir a un atacante no autenticado ejecutar código arbitrario en el sistema objetivo, con severidad crítica e identificador CVE-2022-22965.
  • Vulnerabilidad de las reglas de enlace de datos en Spring Framework, fue publicada con fecha 13 de abril, con identificador CVE-2022-22968, todavía sin severidad asignada. Los desarrolladores de Spring identificaron esta vulnerabilidad mientras corregían Spring4Shell.

 

Recursos afectados:

  • Spring Framework, versiones:
    • desde 5.3.0 hasta 5.3.16;
    • las versiones más antiguas y sin soporte también se ven afectadas.
  • Spring Cloud Function, versiones:
    • 3.1.6;
    • 3.2.2;
    • las versiones más antiguas y sin soporte también se ven afectadas.
  • Spring Core, todas las versiones (según diversos investigadores, afecta a todos los usuarios que ejecutan JDK versión 9 y superiores, debido a una corrección parcial de la vulnerabilidad CVE-2010-1622).

 

Se necesitan requisitos específicos para estar directamente afectados por Spring4Shell (CVE-2022-22965):

  • JDK, versión 9 o superior;
  • Apache Tomcat como el contenedor Servlet;
  • empaquetado como WAR;
  • dependencias spring-webmvc o spring-webflux;
  • Spring Framework, versiones:
    • desde 5.3.0 hasta 5.3.17;
    • desde 5.2.0 hasta 5.2.19;
    • y versiones anteriores.

Para consultar la lista actualizada de fabricantes afectados por Spring4Shell, puede acceder a los siguientes enlaces (https://github.com/NCSC-NL/spring4shell/blob/main/software/README.md y https://kb.cert.org/vuls/id/970766)

Estas son las condiciones necesarias para la vulnerabilidad CVE-2022-22968:

  • Registro de patrones disallowedFields en un DataBinder;
  • dependencia spring-webmvc o spring-webflux;
  • Spring Framework versiones 5.3.0 a 5.3.18, 5.2.0 a 5.2.20 y versiones anteriores.

 

Descripción:

  • Un usuario podría proporcionar una expresión SpEL (Spring Expression Language) especialmente diseñada para causar una condición de denegación de servicio (DoS) en Spring Framework. Se ha asignado el identificador CVE-2022-22950 para esta vulnerabilidad.
  • Cuando se utiliza la funcionalidad de enrutamiento, sería posible que un usuario proporcione una expresión SpEL especialmente diseñada como expresión de enrutamiento, lo que podría dar lugar a un acceso a los recursos locales de Spring Cloud Function. Se ha asignado el identificador CVE-2022-22963 para esta vulnerabilidad.
  • La vulnerabilidad Spring4Shell podría permitir a un atacante remoto, no autenticado, ejecutar código arbitrario en el sistema objetivo. La vulnerabilidad Spring4Shell afecta a las aplicaciones Spring MVC y Spring WebFlux que se ejecutan en JDK 9+. El exploit requiere que la aplicación se ejecute en Tomcat como un despliegue WAR. Si la aplicación se despliega como un JAR ejecutable de Spring Boot (configuración por defecto) no es vulnerable. La explotación de esta vulnerabilidad requiere un endpoint con DataBinder habilitado y depende en gran medida del contenedor de servlets de la aplicación. Se ha asignado el identificador CVE-2022-22965 para esta vulnerabilidad.
  • Vulnerabilidad de las reglas de enlace de datos en Spring Framework. Los patrones de disallowedFields en un DataBinder distinguían entre mayúsculas y minúsculas, lo que significa que un campo no estaba protegido de manera efectiva a menos que los patrones se registraran con mayúsculas y minúsculas para el primer carácter del campo, incluidas todas las combinaciones de mayúsculas y minúsculas. El problema se relaciona con el enlace de datos utilizado para completar un objeto a partir de parámetros de solicitud (ya sean parámetros de consulta o datos de formulario). El enlace de datos se usa para los parámetros del método del controlador que se anotan con @ModelAttribute u opcionalmente sin él, y sin ninguna otra anotación de Spring Web. El problema no se relaciona con los parámetros del método del controlador @RequestBody (por ejemplo, la deserialización de JSON). Sin embargo, dichos métodos aún pueden ser vulnerables si tienen otro parámetro de método completado a través del enlace de datos de los parámetros de consulta. Su aplicación Spring MVC o Spring WebFlux puede ser susceptible a problemas de vinculación de datos incluso si no registra patrones de disallowedFields. Se ha asignado el identificador CVE-2022-22968 para esta vulnerabilidad.

Es importante señalar que ya existen Pruebas de Concepto (PoCs) de Spring4Shell publicados para explotar la vulnerabilidad.

Recomendaciones:

Las primeras vulnerabilidades descritas se corrigen actualizando Spring Framework a la versión 5.3.17 o superiores, así como Spring Cloud Function, a las versiones 3.1.7 o 3.2.3.

Spring Core, como medida de mitigación temporal recogida por Praetorian, se recomienda crear un componente ControllerAdvice (que es un componente de Spring compartido entre Controllers) y añadir una blacklist de patrones de campos vulnerables necesarios para la explotación. Adicionalmente, otras medidas de mitigación para Spring4Shell son:

  • implementar reglas de filtrado y monitorización en el WAF, haciendo referencia a "class" ("class.*", "*.class.*", "Class.*", y "*.Class.*");
  • utilizar reglas de Yara para detectar actividades relacionadas.

 

Para solucionar Spring4Shell se deben aplicar las siguientes actualizaciones en Spring Framework:

  • los usuarios de versiones 5.3.x deben actualizar a la versión 5.3.18 o posteriores;
  • los usuarios de versiones 5.2.x deben actualizar a la versión 5.2.20 o posteriores.
  • Adicionalmente, se ha publicado Spring Boot 2.6.6 y 2.5.12, que depende de Spring Framework 5.3.18.

 

Para corregir CVE-2022-22968 actualizar Spring Framework a 5.3.19 o 5.2.21. El lanzamiento de Spring Boot 2.6.7 y 2.5.13 está programado para el 21 de abril de 2022.

Referencias:

  • https://www.springcloud.io/post/2022-03/spring-0day-vulnerability/
  • https://tanzu.vmware.com/security/cve-2022-22950
  • https://tanzu.vmware.com/security/cve-2022-22963
  • https://spring.io/blog/2022/04/13/spring-framework-data-binding-rules-vulnerability-cve-2022-22968
  • https://www.praetorian.com/blog/spring-core-jdk9-rce/
  • https://www.rapid7.com/blog/post/2022/03/30/spring4shell-zero-day-vulnerability-in-spring-framework/
  • https://www.cyberkendra.com/2022/03/spring4shell-details-and-exploit-code.html
  • https://kb.cert.org/vuls/id/970766