Apache Strutsに存在するRCE 脆弱性(CVE-2023-50164, S2-066)についての検証レポート

脆弱性検証レポート

2024.01.11

     

2023年12月7日にApache Software Foundationにより修正されたApache Strutsに存在するリモートコード実行の脆弱性(CVE-2023-50164, S2-066)についての検証を実施し、脆弱性の悪用が可能であることを確認しました。

1. 本脆弱性の概要

Apache Struts は、Apache Software Foundationが提供するWebアプリケーションのフレームワークで、Javaによる実装として幅広く利用されています。

本脆弱性の悪用に成功した場合は攻撃者がリモートから任意のコードを実行できる可能性があり、 Apache Software FoundationによるとCVSSv3スコアは9.8、SeverityはCriticalと評価されています。[1]
また、概念実証(PoC)コードも数多く公開されており、攻撃の観測も報告されていることから今後の被害の拡大が懸念されます。[2]

本脆弱性はApache Strutsにおけるファイルアップロードの機能に含まれるパストラバーサルが可能となる脆弱性であり、任意のファイルのアップロードを可能とします。攻撃者は実行させたいコードを含むファイルを配置し、Apache Strutsの実行環境によって実行させることで任意のコード実行を実現します。

図1:本脆弱性を悪用した攻撃の例

図1:本脆弱性を悪用した攻撃の例

第1段階(脆弱性の悪用によるファイルの配置)

攻撃者はリモートから攻撃用のHTTPリクエストを送信することでこの脆弱性を悪用します。このHTTPリクエストでは、脆弱なWebアプリケーションに対して任意のコードを含んだJSPファイルやWebシェル等のアップロードを指示します。この際にパストラサーバルが可能になり、通常のアップロードディレクトリ外(JSPファイル等の実行が可能な場所)へのファイルの配置を行います。

第2段階(配置したファイルによるコード実行)

第1段階で配置したファイルに対してアクセスすることで、JSPファイルやWebシェル等が実行されます。これにより、攻撃者がWebアプリケーションを実行するサーバの実行権限により任意のコードを実行することができます。

2. 本脆弱性の影響を受ける環境

本脆弱性の影響を受ける可能性があるバージョンは以下の通りです。[1][3]

  • Apache Struts 2.0.0以上2.3.37以下(EOLバージョン)
  • Apache Struts 2.5.0以上2.5.32以下
  • Apache Struts 6.0.0以上6.3.0.1以下

また、以下の条件を満たすことが攻撃成立に必要です。

  • ファイルアップロードが可能なWebアプリケーションの実装であること
  • Webサーバ、アプリケーションの内部構造(HTTPサーバ、ディレクトリ、メソッド等)の情報を保有していること

攻撃を行う上で標的のWebサーバ、アプリケーションの内部構造を理解する必要があるものの、デフォルトの構成によりWebアプリケーションを実装している場合は構造の推測が容易である可能性があるため、警戒する必要があります。

その他に、一部のCisco製品では影響を受けるApache Strutsを実装した製品が存在することが公表されており、該当する製品の情報が公開されています。[4]

3. 本脆弱性を利用した攻撃の検証

脆弱性を含むWebアプリケーションが動作するサーバを構築し、疑似攻撃を行うことにより、本脆弱性の悪用が可能であることを確認しました。

3.1. 検証環境

表1:検証に使用した環境
疑似攻撃者 疑似被害者
ホストOS Kali Linux 2023.3 Ubuntu 18.04.1
アプリケーション/ツール Python 3.11.4 Apache Struts 6.3.0.1
OpenJDK 11.0.19
Apache Tomcat 9.0.16
Apache Maven 3.6.0

3.2. 検証手法

疑似被害者の環境として、脆弱性が存在するApache Strutsによって実装したWebアプリケーションをApache Tomcatサーバ上で起動します。疑似攻撃者からは不正なHTTPリクエストを送信し、Webシェルを配置することで任意のコード実行を試みました。

3.3. 検証結果

第1段階(脆弱性の悪用によるファイルの配置)

アップロード機能が実装されている脆弱性のあるApache StrutsのWebアプリケーションに対して、Pythonで作成した不正なHTTPリクエストを送信します。リクエストにはパストラバーサルによりファイルを任意のパスのアップロードを指示するコードを挿入し、疑似被害者環境上での不正なファイルの生成を試みます。本検証では、Webシェルを配置します。

図2:不正なHTTPリクエストの送信

図2:不正なHTTPリクエストの送信

また、今回の検証では、実際的な環境としてApache Tomcatの設定(server.xml)により特定のパスに配置される圧縮形式のWARファイルを自動で解凍する設定の環境を想定しました。疑似攻撃では、WARファイルを送信することでサーバ上の特定のパスにJSPファイルを設置しました。

図3:パストラバーサルによるファイル設置

図3:パストラバーサルによるファイル設置

図4:展開されたJSPファイル

図4:展開されたJSPファイル

図3のHTTPレスポンス、及び図4に示す疑似被害者サーバ上のシェルから正常にファイルの配置ができたことが確認できます。

第2段階(配置したファイルによるコード実行)

図5:Webシェルを用いた任意コードの実行

図5:Webシェルを用いた任意コードの実行

第1段階にて特定のパスに設置したJSPファイルでWebシェルの実行を指示させることで、攻撃者はWebシェルを介して疑似被害者サーバに任意のシェルコマンドを実行させることができます。
図5ではWebシェルを実行するJSPにGETのリクエストでidコマンドの実行を指示することで、シェルコマンドの実行権限を確認することができました。

4. 本脆弱性に対する対策

4.1. 現在推奨されている対策

2024年1月11日現在、Apache Software Foundationより本脆弱性の修正バージョンが提供されています。以下のバージョンへのアップデートにより本脆弱性の解消ができます。

  • Apache Struts 2.5.33以上
  • Apache Struts 6.3.0.2以上

4.2. 不正アクセス監視機器による対策

対象のWebアプリケーションの即時のアップデートが困難な場合は、IPSやWAFなどの装置により攻撃通信を遮断する緩和策を取ることが可能です。但し、これらは緩和策であるため、根本的な対処には4.1の対策の実施が必要です。シグネチャの検知条件に合致しない攻撃が発生した場合は適切に攻撃を検知・遮断出来ない可能性があります。(シグネチャが特定の概念実証コードを基に作られている場合や、検知回避が試みられている場合など)

当社が確認している機器の対応状況

各製品ベンダの本脆弱性への対応状況に関する情報、及び本検証による各製品での検知結果は以下の通りです。表2に公式シグネチャの提供状況を記載します。
既存のシグネチャ(パストラバーサルを検知するシグネチャ)を利用して検知できる場合がありますが、本脆弱性を悪用した攻撃であるかはHTTPのヘッダ・ペイロードからファイルのアップロードを試みるものかなどを精査して判断する必要があります。

表2:製品ベンダによるシグネチャ提供状況(2024年1月11日時点)
種別 製品ベンダ/製品 製品ベンダ提供のシグネチャ 検知結果
IDS/IPS Trellix
Intrusion Prevention System NS-Series Sensor
HTTP: Apache Struts File Upload Remote Code Execution (CVE-2023-50164) [0x452fd000]
WAF Imperva
SecureSphere
CVE-2023-50164:Apache Struts Remote Code Execution 3
CVE-2023-50164:Apache Struts Remote Code Execution 4
F5 Networks
BIG-IP
現在確認中
UTM Palo Alto
PA Series
Threat ID: 94754
Apache Struts File Upload Path Traversal Vulnerability
Check Point
NGFW Series
CPAI-2023-1393
Apache Struts Directory Traversal (CVE-2023-50164)
総合サーバセキュリティ対策 Trend Micro
Deep Security
侵入防御 (DPI) ルール
1011933 - Apache Struts2 Remote Code Execution Vulnerability (CVE-2023-50164)

参考文献

機器別当社対応サービス

更新履歴

  • 2024/1/11 初版作成
  • 文中の商品名、会社名、団体名は、一般に各社の商標または登録商標です。

本件に関するお問い合わせ先

NTTデータ先端技術株式会社

お問い合わせフォーム

Apache Strutsに存在するRCE 脆弱性(CVE-2023-50164, S2-066)についての検証レポート