Vulnerabilidad de deserialización de Jackson
21 de agosto de 2019
0 minutos de lecturaEl 29 de julio de 2019 se publicó una vulnerabilidad de alta gravedad de Deserialización de datos no confiables (CVE-2019-14379, CVE-2019-14439) que afecta a todas las versiones de com.fasterxml.jackson.core:jackson-databind hasta la 2.9.9.2.
Si usas Spring Boot, ten en cuenta que la versión actual (2.1.7) depende del paquete vulnerable anterior jackson-databind 2.9.9.
Ya actualizamos esta información en nuestra base de datos y los responsables del paquete jackson-databind crearon una corrección. Si usas Snyk, ya recibiste una notificación sobre esta vulnerabilidad. El equipo que mantiene el paquete jackson-databind hizo un excelente trabajo al crear una nueva versión (2.9.9.3) que no contiene esta vulnerabilidad. El escáner de Snyk recomendará esta versión como solución, para que ya no estés en riesgo.
Acerca de la vulnerabilidad
Esta no es la primera vez que el paquete jackson-databind presenta una vulnerabilidad de deserialización de datos no confiables. De hecho, desde 2018 se conocen y han divulgado más de una docena de estas vulnerabilidades, y casi todas se consideran de alta gravedad.
El objetivo principal de la biblioteca es serializar objetos Java en JSON y viceversa. El problema está en la deserialización de JSON en objetos Java. Cuando una aplicación Java mal implementada puede deserializar una cadena JSON de una fuente no confiable, un hacker puede aprovecharse de esto, por ejemplo, para ejecutar código de forma remota.
Si el tipado polimórfico está activado en Jackson, un atacante puede usar un gadget para lanzar su ataque cuando controla la entrada JSON. Un gadget es una clase o función que ya contiene código ejecutable presente en el proceso vulnerable. Este código ejecutable existente puede reutilizarse con fines maliciosos.
En esta vulnerabilidad específica, se podía aprovechar indebidamente un gadget de Ehcache cuando el tipado predeterminado estaba habilitado en Jackson. Los responsables de jackson-databind lo solucionaron rápidamente al agregar el gadget específico a la lista de bloqueo existente. Se lanzó la versión 2.9.9.3, que ya no contiene esta vulnerabilidad.
Spring Boot
Al momento de escribir este artículo, la versión más reciente de Spring Boot es la 2.1.7. Esta versión depende del paquete anterior jackson-databind 2.9.9.
Esto significa que, si creas una nueva aplicación Spring Boot usando Sping Boot Initialzr , sin duda incluirás una versión vulnerable de jackson-databind.
Aunque todavía no se ha lanzado una nueva versión de Spring Boot ni de spring-boot-starter-data-rest, podemos cambiar las versiones de jackson-databind. Una opción es excluir el paquete específico, como se muestra en el siguiente ejemplo de Maven:
"Una mejor solución es establecer la propiedad de Maven en la versión adecuada. De esta manera, Spring Boot importa la BOM (lista de materiales) corregida de Jackson, que se encarga de todas las dependencias individuales de Jackson. En un proyecto Gradle, puedes configurar algo similar en el archivo gradle.properties. Para obtener más información sobre la BOM de Maven y por qué es importante para Spring Boot, lee el artículo: "Qué es un archivo BOM (lista de materiales)"
En muchos casos, bibliotecas como jackson-databind son dependencias indirectas que forman parte de un framework más grande. Por eso, conviene analizar tus aplicaciones para detectar vulnerabilidades conocidas, en especial en estas dependencias indirectas. Si lo haces con regularidad, sabrás si estás en riesgo y podrás solucionar estos problemas.
Empieza con Capture the Flag
Aprende a resolver desafíos de Capture the Flag viendo nuestro taller virtual introductorio a pedido.



