Apache Struts 2 の Parameters インターセプタの実装に起因するClassLoader を操作可能な脆弱性(Scan Tech Report) | ScanNetSecurity
2024.03.29(金)

Apache Struts 2 の Parameters インターセプタの実装に起因するClassLoader を操作可能な脆弱性(Scan Tech Report)

Apache Struts 2 の Parameters インターセプタには、class パラメータの処理に起因して ClassLoader を不正に操作されてしまう脆弱性が存在します。

脆弱性と脅威 エクスプロイト
1.概要
Apache Struts 2 の Parameters インターセプタには、class パラメータの処理に起因して ClassLoader を不正に操作されてしまう脆弱性が存在します。
悪意あるリモートの第三者に利用された場合、Apache Struts 2 上で動作するWeb アプリケーションを一時的にサービス不能状態にされる、あるいはシステム上で不正な操作が実行される可能性があります。
外部に公開する Web アプリケーションで Apache Struts 2 を利用する環境では、深刻な影響を受ける可能性があるため、影響を受けるバージョンの Apache Struts 2 を利用するユーザは速やかに以下に記載する対策を実施することを推奨します。


2.深刻度(CVSS)
5.0
http://nvd.nist.gov/cvss.cfm?version=2&name=CVE-2014-0094&vector=%28AV:N/AC:L/AU:N/C:N/I:P/A:N%29


3.影響を受けるソフトウェア
Apache Struts 2.0.0 - 2.3.16


4.解説
Apache Struts は、Apache Software Foundation が提供する Web アプリケーションを構築するためのフレームワークであり、インターセプタと呼ばれる、
Action クラスの前後に処理を挟み込む機能が実装されています。その中の 1 つ、Parameters インターセプタ (ParametersInterceptor)※1 は、リクエストパラメータを制御することを目的としています。

Apache Struts 2 には、この Parameters インターセプタにおいて、class パラメータを適切にチェックせず、直接 getClass() メソッドへ渡してしまう不備があります。
このため、class.classLoader.* を含むリクエストを介して ClassLoader を不正に操作可能な脆弱性が存在します。

この脆弱性を利用することで、リモートの攻撃者は、Apache Struts 2 上で動作する Web アプリケーションを一時的にサービス不能状態する、あるいは Apache Struts 2 を実行するユーザの権限で任意の Java コードが可能となります。

なお、公開されている攻撃手法では、ClassLoader を介して Apache Tomcat のアクセスログの出力先※2、ファイル名およびフォーマットを変更します。
その後、Java コードを含むリクエストを送信し、アクセスログに Java コードを書き込み、アクセスログを参照することによって、送信した Java コードを実行するという手法になります。

※1 http://struts.apache.org/development/2.x/docs/parameters-interceptor.html
※2 出力先は公開ディレクトリ、ファイル名は JSP ファイルに変更します。


5.対策
以下の Web サイトより、Apache Struts 2.3.16.1 以降を入手しアップデートすることで、この脆弱性を解消※3 することが可能です。

Apache Struts 2.3.16.1:
http://struts.apache.org/download.cgi

あるいは、設定ファイル struts-default.xml の excludeparams に ^class\.を追加し、ClassLoader を操作するために必要な文字列 "class." から始まる文字列がリクエストに含まれていた場合に拒否する設定にすることで、この脆弱性を緩和することが可能です。

※3 Apache Struts 2.3.16.1 におけるこの脆弱性に対する修正が不完全である可能性が Full Disclosure※4 で示唆されています。
このことにより、次期バージョン Apache Struts 2.3.17 では、Struts の github で公開される修正コード※5 が実装される予定です。

※4 http://seclists.org/fulldisclosure/2014/Mar/50
※5 https://github.com/apache/struts/commit/aaf5a3010e3c11ae14e3d3c966a53ebab67146be


6.ソースコード
(Web非公開)

(執筆:株式会社ラック サイバー・グリッド研究所

※Web非公開該当コンテンツ閲覧をご希望の方はScan Tech Reportにご登録(有料)下さい。

Scan Tech Report
http://scan.netsecurity.ne.jp/archives/51916302.html
《株式会社ラック デジタルペンテスト部》

関連記事

Scan PREMIUM 会員限定記事

もっと見る

Scan PREMIUM 会員限定記事特集をもっと見る

カテゴリ別新着記事

「経理」「営業」「企画」「プログラミング」「デザイン」と並ぶ、事業で成功するためのビジネスセンスが「セキュリティ」
「経理」「営業」「企画」「プログラミング」「デザイン」と並ぶ、事業で成功するためのビジネスセンスが「セキュリティ」

ページ右上「ユーザー登録」から会員登録すれば会員限定記事を閲覧できます。毎週月曜の朝、先週一週間のセキュリティ動向を総括しふりかえるメルマガをお届け。(写真:ScanNetSecurity 名誉編集長 りく)

×