Skip to main content

Vulnérabilité de désérialisation Jackson

Écrit par

21 août 2019

0 minutes de lecture

Le 29 juillet 2019, une vulnérabilité de gravité élevée liée à la désérialisation de données non fiables (CVE-2019-14379, CVE-2019-14439), qui affectait toutes les versions de com.fasterxml.jackson.core:jackson-databind jusqu’à la version 2.9.9.2, a été publiée.

Si vous utilisez Spring Boot, notez que la version actuelle (2.1.7) dépend de l’ancienne version vulnérable 2.9.9 du package jackson-databind.

Nous avons déjà mis à jour notre base de données et les mainteneurs du package jackson-databind ont créé un correctif. Si vous utilisez Snyk, vous avez déjà été informé de cette vulnérabilité. L’équipe qui maintient le package jackson-databind a déjà fait un excellent travail en créant une nouvelle version (2.9.9.3), qui ne contient plus cette vulnérabilité. Le scanner Snyk vous proposera cette version comme correctif, afin que vous ne soyez plus concerné.

À propos de la vulnérabilité

Ce n’est pas la première fois que le package jackson-databind est touché par une vulnérabilité de désérialisation de données non fiables. En fait, plus d’une douzaine de ces vulnérabilités sont connues et ont été divulguées depuis 2018, et presque toutes sont considérées comme étant de gravité élevée.

La bibliothèque sert principalement à sérialiser des objets Java en JSON, et inversement. Le problème se situe au niveau de la désérialisation du JSON en objets Java. Lorsqu’une application Java mal conçue peut désérialiser une chaîne JSON provenant d’une source non fiable, un pirate peut l’exploiter, par exemple pour exécuter du code à distance.

Si le typage polymorphe est activé dans Jackson, un attaquant peut utiliser un gadget pour lancer son attaque lorsqu’il contrôle l’entrée JSON. Un gadget est une classe ou une fonction dont le code exécutable est déjà présent dans le processus vulnérable. Ce code existant peut être réutilisé à des fins malveillantes.

Dans le cas de cette vulnérabilité, un gadget d’Ehcache pouvait être exploité lorsque le typage par défaut de Jackson était activé. Les mainteneurs de jackson-databind ont rapidement corrigé le problème en ajoutant ce gadget à la liste noire existante. La version 2.9.9.3 a été publiée et ne contient plus cette vulnérabilité.

Spring Boot

Au moment de la rédaction de cet article, la dernière version de Spring Boot est la 2.1.7. Elle dépend de l’ancienne version 2.9.9 du package jackson-databind.

Cela signifie que si vous créez une nouvelle application Spring Boot à l’aide de Sping Boot Initialzr , vous y inclurez forcément une version vulnérable de jackson-databind.

En attendant la sortie d’une nouvelle version de Spring Boot ou de spring-boot-starter-data-rest, vous pouvez remplacer les versions de jackson-databind. Une solution consiste à exclure le package concerné, comme dans l’exemple Maven ci-dessous :

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

« Une meilleure solution consiste à définir la propriété Maven sur la version appropriée. Spring Boot importera ainsi la nomenclature Jackson corrigée (BOM, Bill of Materials), qui gère toutes les dépendances Jackson. Dans un projet Gradle, vous pouvez définir une propriété similaire dans le fichier gradle.properties. Pour en savoir plus sur les BOM Maven et leur importance pour Spring Boot, lisez l’article : « Qu’est-ce qu’un fichier BOM (Bill of Materials) ? »

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

Les bibliothèques comme jackson-databind sont souvent des dépendances indirectes intégrées à un framework plus vaste. Il est donc judicieux d’analyser vos applications pour détecter les vulnérabilités connues, en particulier dans ces dépendances indirectes. En effectuant régulièrement ces analyses, vous saurez si vous êtes vulnérable et pourrez peut-être corriger ces problèmes en conséquence.

Lancez-vous dans les compétitions Capture The Flag

Apprenez à résoudre des défis Capture The Flag en regardant à la demande notre atelier virtuel d’initiation.

Lire la suite

blog feature snyk container custom base recommendations
Blog

Découvrez Evo Agentic AppSec : une sécurité au rythme du développement de l’IA

Le développement piloté par l’IA dépasse les workflows de sécurité traditionnels. L’AppSec agentique de Snyk s’appuie sur des agents de sécurité pour détecter, corriger et vérifier les vulnérabilités en continu, tandis que les équipes définissent les exigences.

Blog

Les modèles de pointe ont trouvé les vulnérabilités. Seul l’attaquant a trouvé les chaînes d’exploitation.

L’analyse statique a détecté les failles, mais seuls des tests d’attaque en conditions réelles ont prouvé comment elles pouvaient être enchaînées pour provoquer des compromissions. Comparaison d’Evo COS, de Claude Security et de Claude Code Security.

feature insights context
Blog

Les attaques autonomes sont déjà là. La défense doit suivre leur rythme.

Les attaquants autonomes réduisent la fenêtre de défense. Découvrez comment la découverte, la correction, la validation et la prévention continues peuvent aider les équipes de sécurité à suivre le rythme.