Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
study-struts2-s2-054_055-jackson-cve-2017-7525_cve-2017-15095 — Rapport d'enquête sur les vulnérabilités Struts2 S2-045, S2-055 et Jackson CVE-2017-7525, CVE-2017-15095. | Kitploit
Outils/GitHubGitHub/secureskytechnology/study-struts2-s2-054_055-jackson-cve-2017-7525_cve-2017-15095
Analyse des VulnérabilitésAnalyse de CodeExploitation d'Applications WebArticles et RechercheApprentissage et ÉducationArchived
GitHubsecureskytechnology/study-struts2-s2-054_055-jackson-cve-2017-7525_cve-2017-15095

study-struts2-s2-054_055-jackson-cve-2017-7525_cve-2017-15095

Rapport d'enquête sur les vulnérabilités Struts2 S2-045, S2-055 et Jackson CVE-2017-7525, CVE-2017-15095.

Voir le dépôt
1062114il y a 8 ansPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

Rapport d'enquête sur les vulnérabilités Struts2 S2-054, S2-055 et les vulnérabilités Jackson CVE-2017-7525, CVE-2017-15095

Un article de synthèse résumant les points essentiels et facile à lire a été publié. Recommandé à ceux qui veulent un aperçu ou qui manquent de temps.

  • SSTtechlog 08 À propos de S2-054, S2-055 et des vulnérabilités jackson-databind CVE-2017-7525, CVE-2017-15095 | SST SecureSky Technology
    • https://www.securesky-tech.com/column/techlog/08.html

Le 1er décembre 2017, une mise à jour de sécurité pour Struts2 a été publiée. Avant la publication, des discussions circulaient sur la liste de diffusion concernant le lien avec une vulnérabilité de Jackson (une bibliothèque JSON populaire en Java). L'auteur, qui utilise Jackson dans des systèmes et outils internes, s'intéressait également au contenu précis.

  • https://lists.apache.org/thread.html/ed74083f2d7187e71ee5ed644c5e45ba58d0792b515d1d1cc28bfadf@%3Cdev.struts.apache.org%3E

En réalité, les deux problèmes de sécurité suivants ont été corrigés dans la publication. Seule la vulnérabilité S2-055 est affectée par la vulnérabilité de jackson-databind, un composant de Jackson.

  • S2-055 : https://cwiki.apache.org/confluence/display/WW/S2-055
    • Il s'agit de la correction correspondant à CVE-2017-7525 de jackson-databind.
    • La dépendance côté Struts a mis à jour jackson-databind vers 2.9.2. Cela couvre également le CVE-2017-15095 mentionné plus tard.
    • https://cwiki.apache.org/confluence/display/WW/Version+Notes+2.5.14.1
  • S2-054 : https://cwiki.apache.org/confluence/display/WW/S2-054
    • Ici, le plugin REST utilisait une ancienne bibliothèque JSON appelée JSON-lib (http://json-lib.sourceforge.net/), mais comme un problème de DoS avait été signalé, la correction consiste à passer à Jackson.

Dans le plugin REST, il semble que les gestionnaires utilisant JSON-lib et ceux utilisant Jackson étaient déjà intégrés, permettant à l'utilisateur de choisir. La correction dans son ensemble semble être : dans S2-054, le gestionnaire par défaut a été changé pour Jackson, et dans S2-055, la version obsolète de Jackson a été mise à jour vers la dernière.

Alors, quelle est exactement la vulnérabilité CVE-2017-7525 ? L'auteur, qui utilise habituellement Jackson pour le traitement JSON en Java, a passé le week-end des 2 et 3 décembre à étudier ce problème, ce qui fait l'objet de cet article.


Environnement de l'auteur utilisé pour la vérification du code d'exemple :

  • OS : Windows 10 Pro 64 bits
  • Java : Oracle JDK 1.8.0_92 64 bits
  • Groovy : 2.3.1

À propos de la vulnérabilité jackson-databind CVE-2017-7525

Une explication de CVE-2017-7525 a été publiée sur le blog d'Adam Caudill.

  • https://adamcaudill.com/2017/10/04/exploiting-jackson-rce-cve-2017-7525/

En résumé avec mes propres mots : jackson-databind fournit une fonctionnalité (classe ObjectMapper) pour mapper du JSON vers des objets Java. En appelant ObjectMapper.enableDefaultTyping(), il devient possible de mapper en utilisant un nom de classe intégré arbitrairement dans le JSON. Certains d'entre vous ont peut-être eu un mauvais pressentiment en lisant « possibilité de spécifier un nom de classe depuis le JSON d'entrée », et c'est exactement ce mauvais pressentiment qui s'est réalisé avec CVE-2017-7525.

Avant d'entrer dans l'explication de la vulnérabilité, je vais d'abord expliquer pourquoi une telle fonctionnalité a été implémentée.

À propos de la fonctionnalité ObjectMapper.enableDefaultTyping()

Veuillez consulter le code d'exemple suivant pour l'utilisation de base de la désérialisation par jackson-databind. (Dans cet article, j'utilise Groovy pour les exemples de code Jackson. @Grab permet de changer facilement la version de jackson-databind.)

  • objectmapper-demo.groovy

Dans le code d'exemple ci-dessus, la clé "animal" peut simplement être mappée directement à la classe Animal. Que se passe-t-il dans le cas suivant ?```java class Zoo { Animal animal; }

abstract class Animal { String name; protected Animal() { } }

class Dog extends Animal { double barkVolume; Dog() { } }

class Cat extends Animal { boolean likesCream; int lives; Cat() { } }

Dans cette configuration, il y a deux cas : le contenu de la clé "animal" fait référence à la classe Dog ou à la classe Cat. Par conséquent, des informations supplémentaires sont nécessaires pour savoir avec quelle classe mapper.

Pour résoudre ce problème, jackson-databind a intégré un traitement personnalisé permettant d'incorporer le nom de la classe à mapper dans le JSON.
Par exemple, comme ci-dessous, le contenu de la clé "animal" est transformé en tableau, et le premier élément spécifie le nom de la classe.```
{"animal":["Dog",{"name":"dog1","barkVolume":1.2}]}

Cela permet à ObjectMapper.readValue() de reconnaître que le contenu de la clé "animal" est de la classe Dog et d'effectuer le mappage en conséquence.
Bien sûr, il n'est pas possible de distinguer si le contenu de la clé "animal" était à l'origine un tableau ou s'il contient des informations de nom de classe propres à jackson-databind.
C'est la méthode ObjectMapper.enableDefaultTyping() qui permet de basculer entre ces deux cas.
Il existe également une autre méthode consistant à définir l'annotation @JsonTypeInfo sur la classe. Pour plus de détails, consultez la documentation Jackson suivante :

  • JacksonPolymorphicDeserialization
    • https://github.com/FasterXML/jackson-docs/wiki/JacksonPolymorphicDeserialization

Voici un exemple de code utilisant réellement la méthode ObjectMapper.enableDefaultTyping().

  • enable-default-type-demo.groovy

Correction de CVE-2017-7525 par inspection de la liste noire des noms de classe

Comme nous l'avons vu ci-dessus, en donnant un nom de classe suivi de ses propriétés en JSON, il est possible, bien qu'avec certaines limitations, de créer une instance de n'importe quelle classe avec des propriétés arbitraires.
C'est cette exploitation qui est à l'origine de la vulnérabilité CVE-2017-7525, et le rapport suivant en est probablement à l'origine :

  • Java Unmarshaller Security - Turning your data into code execution
    • https://github.com/mbechler/marshalsec

Un rapport a signalé que des bibliothèques de sérialisation/désérialisation Java couramment utilisées, telles que Jackson, présentent un risque d'exécution de code arbitraire par manipulation des noms de classe, et une liste de noms de classes spécifiques potentiellement dangereuses a été dressée.

On ne sait pas si c'est en réaction à cela, mais peu de temps après le premier commit du dépôt ci-dessus, le problème suivant a été soumis sur jackson-databind et la correction a commencé :

  • Jackson Deserializer security vulnerability
    • https://github.com/FasterXML/jackson-databind/issues/1599

À quoi ressemblent concrètement les données JSON et le code Java exploitant cette vulnérabilité ?
Le code de test de jackson-databind 2.8.9, qui corrige ce problème, fournit un indice :

  • https://github.com/FasterXML/jackson-databind/blob/jackson-databind-2.8.9/src/test/java/com/fasterxml/jackson/databind/interop/IllegalTypesCheckTest.java

Basé sur ce code de test, voici un exemple de code ajusté pour permettre une vérification fonctionnelle :

  • cve-2017-7525-check.groovy
Télécharger l’outil