Nuevo RCE en Java: Spring4Shell
Entre el pasado 29 de marzo de 2022 y el día de hoy se han dado a conocer dos nuevas vulnerabilidades que dan lugar a ejecución remota de comandos: Spring4Shell y CVE-2022-22963. Además, hay una tercera vulnerabilidad aún sin confirmar.
Las vulnerabilidades a las que hacemos mención afectan a los productos y versiones indicados a continuación:
- Spring4Shell: RCE confirmado en la librería de Java Spring Core <=5.3.17.
- CVE-2022-22963: RCE confirmado en Spring Cloud Function <=3.1.6 y <=3.2.2.
- La tercera vulnerabilidad, aún sin confirmar, se trata de un fallo en el proceso de deserialización en Spring Core que podría dar lugar también a ataques RCE.
En este artículos nos centraremos en Spring4Shell y, en menor medida, en CVE-2022-22963.
¿Qué es Spring4Shell?
Durante el día de ayer se publicó desde una cuenta de Twitter china la Prueba de Concepto (PoC) de Spring4Shell, una vulnerabilidad en la librería de Java, Spring Core, que quedó confirmada poco después por Praetorian. El fallo de seguridad viene dado ya que es posible evadir las medidas de seguridad implementadas para solventar la vulnerabilidad con identificador CVE-2010-1622.
Aquellos usuarios que tengan instalada la versión 9 de JDK o versiones posteriores se podrían ver afectados por ataques RCE para los que el atacante no necesitaría ningún tipo de autenticación previa.
Según la información de la que se dispone hasta el momento, la explotación de esta vulnerabilidad, dependiendo de la configuración de los componentes afectados, podría resultar relativamente sencilla: bastaría con que el atacante envíe una petición HTTP al sistema vulnerable.
Para que la vulnerabilidad sea explotable, deben darse una serie de requisitos:
- Debe existir un endpoint con DataBinder habilitado (por ejemplo, una petición POST que decodifique la información del cuerpo de la petición automáticamente), y dependería en gran medida del contenedor del servlet de la aplicación.
- Hacer uso de una versión de Spring y JDK vulnerables.
- No haber implementado una lista que bloquee campos como «class», «module» o «classLoader», ya que el exploit se aprovecha del ClassLoader de Tomcat y su funcionalidad de logging para crear una puerta trasera JSP.
No obstante, se debe tener en cuenta la posibilidad de que vayan apareciendo nuevos exploits que aprovechen la existencia de diferentes class loaders u otros contextos, provocando que cualquier aplicación que haga uso de una versión vulnerable de Spring quede expuesta al ataque.
Cómo mitigar Spring4Shell
A pesar de que actualmente no existe ningún parche disponible que solvente la vulnerabilidad, sí hay disponibles medidas de mitigación propuestas por diversos grupos de investigación, las cuales desde Hispasec recomendamos que sean aplicadas a la mayor brevedad posible.
Según los investigadores de Praetorian, una de las medidas consiste en parchear DataBinder añadiendo una lista negra de patrones de campos vulnerables utilizados durante el proceso de explotación:
De manera alternativa a lo expuesto en el párrafo anterior, se podría añadir un método a un controlador.
¿En qué consiste CVE-2022-22963?
Por último, vamos a hablar brevemente sobre la vulnerabilidad con identificador CVE-2022-22963.
Esta vulnerabilidad afecta a la librería Spring Cloud Function. El riesgo asociado tiene una puntuación de 5.7 y existen (al igual que en el caso de Spring4Shell), PoCs disponibles en Github, las cuales se pueden encontrar en el apartado «Más información» al final de esta publicación.
Para mitigar esta vulnerabilidad (también consistente en RCE), es necesario actualizar a las versiones 3.1.7+ o 3.2.3+.
Más información:
Spring4Shell: Security Analysis of the latest Java RCE ‘0-day’ vulnerabilities in Spring
Spring Core on JDK9+ is vulnerable to remote code execution
New Spring4Shell Zero-Day Vulnerability Confirmed: What it is and how to be prepared
La entrada Nuevo RCE en Java: Spring4Shell se publicó primero en Una al Día.
Powered by WPeMatico