Skip to main content

Vulnerabilidad de deserialización de Jackson

Escrito por

21 de agosto de 2019

0 minutos de lectura

El 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:

<dependencies>
   <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-data-rest</artifactId>
       <exclusions>
           <exclusion>
               <groupId>com.fasterxml.jackson.core</groupId>
               <artifactId>jackson-databind</artifactId>
           </exclusion>
       </exclusions>
   </dependency>
   <dependency>
       <groupId>com.fasterxml.jackson.core</groupId>
       <artifactId>jackson-databind</artifactId>
       <version>2.9.9.3</version>
   </dependency>
…
</dependencies>

"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)"

<properties>
    <jackson.version>2.9.9.20190807</jackson.version>
</properties>

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.

Leer más

blog feature snyk container custom base recommendations
Blog

Presentamos Evo Agentic AppSec: seguridad al ritmo del desarrollo con IA

El desarrollo impulsado por IA supera el ritmo de los flujos de trabajo de seguridad tradicionales. Agentic AppSec de Snyk usa agentes de seguridad para encontrar, corregir y verificar vulnerabilidades de forma continua, mientras las personas definen el estándar.

Blog

Los modelos de frontera encontraron las vulnerabilidades. Solo el atacante encontró las cadenas.

El análisis estático encontró las fallas, pero solo las pruebas de ataque en vivo demostraron cómo podían encadenarse para provocar brechas. Una comparación de Evo COS, Claude Security y Claude Code Security.

feature insights context
Blog

Los ataques autónomos ya están aquí. La defensa debe estar a su altura.

Los atacantes autónomos están reduciendo el tiempo disponible para defenderse. Descubre cómo el descubrimiento, la corrección, la validación y la prevención continuos pueden ayudar a los equipos de seguridad a seguirles el ritmo.