Vulnérabilité de désérialisation Jackson
21 août 2019
0 minutes de lectureLe 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 :
« 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) ? »
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.



