JPCERT コーディネーションセンター

Apache Struts 2 の脆弱性 (S2-045) に関する注意喚起

各位


JPCERT-AT-2017-0009
JPCERT/CC
2017-03-09(新規)
2017-03-21(更新)

JPCERT/CC Alert 2017-03-09


Apache Struts 2 の脆弱性 (S2-045) に関する注意喚起

https://www.jpcert.or.jp/at/2017/at170009.html


I. 概要

Apache Software Foundation が提供している Apache Struts 2 には脆弱性(S2-045/CVE-2017-5638) が存在します。遠隔の攻撃者が、細工した HTTP リクエストを送信することで、Apache Struts 2 を使用するアプリケーション (Strutsアプリケーション) を実行しているサーバにおいて、任意のコードを実行する可能性があります。脆弱性の詳細については、Apache Software Foundation の情報を確認してください。

本脆弱性の実証コードが公開されており、JPCERT/CC にて実証コードを用いて検証した結果、Struts アプリケーションを実行しているユーザの実行権限で任意のコードが実行されることを確認しました。

本脆弱性は、Struts 2 で標準で使用される Jakarta Multipart parser *1)の処理に起因し、Struts の設定ファイル (struts.xml など) で使用するパーサを特に指定していない場合は、本脆弱性の影響を受けることを JPCERT/CCで確認しています。

*1) Jakarta Multipart parser
multipart/form-data 形式のリクエストを処理するために Struts 2 に標
準で組み込まれているパーサ。デフォルトでは、本パーサが使用される。
https://cwiki.apache.org/confluence/display/WW/File+Upload#FileUpload-AlternateLibraries

Apache Software Foundation から、本脆弱性に対する修正済みソフトウェアが提供されています。影響を受けるバージョンのソフトウェアを利用している場合には、「V. 対策」を参考に、早期の対応を行うことを強く推奨します。

** 更新: 2017年 3月17日追記 ****************
JPCERT/CC では、本脆弱性を悪用したと考えられる攻撃に関する報告を継続して受け取っています。Struts アプリケーションを実行しているサーバにおいて、影響を受けるバージョンのソフトウェアを利用している場合には、「V. 対策」を参考に、早期の対応を行うことを強く推奨します。
**************************************************

** 更新: 2017年 3月21日追記 ****************
本脆弱性に関連する情報として、Apache Software Foundation からアドバイザリ (S2-046) が公開されています。脆弱性識別番号 (CVE-2017-5638) は既に公開されているアドバイザリ (S2-045) と同じであり、修正バージョンの変更はありません。
なお、アドバイザリ (S2-046) では、 回避策 (Jakarta Multipart parser/JakartaStreamMultiPartRequest の修正用プラグイン) が追加で案内されています。

Possible RCE when performing file upload based on Jakarta Multipart parser (similar to S2-045)
https://struts.apache.org/docs/s2-046.html
**************************************************


II. 想定される攻撃シナリオ

Struts アプリケーションに対して、細工した HTTP リクエストを送信することで、Struts アプリケーションを実行しているサーバ上で任意のコードが実行されます。


III. 対象

本脆弱性の影響を受ける製品は以下の通りです。
- Apache Struts 2.3.5 から 2.3.31 まで
- Apache Struts 2.5 から 2.5.10 まで


IV. JPCERT/CC による検証結果

JPCERT/CC では、本脆弱性に対する実証コードを用いて、以下の検証を実施しました。

【検証内容】
- Struts アプリケーションを Apache Tomcat 上に配備し、実証コードを用
いて、細工した HTTP リクエストを送ることで、Struts アプリケーション
を実行しているサーバ上で任意のコードが実行されるか確認しました。

【検証環境】
- CentOS 7.1
- Apache Tomcat 8.5.11
- Java 1.8.0_121

【検証結果】
- 本脆弱性の影響を受けるバージョンの Apache Struts 2 を利用している場
合、任意のコード実行が可能なことを確認しました。
- 本脆弱性が修正されたバージョンの Apache Struts 2 を利用している場合、
任意のコードが実行されないことを確認しました。
- 使用するパーサをデフォルトの Jakarta Multipart parser から
JakartaStreamMultiPartRequest に変更した場合、任意のコードが実行さ
れないことを確認しました。

○:実証コードが動作しないことを確認
×:実証コードが動作し、任意のコード実行が可能であることを確認

- Apache Struts 2.3.31            : ×
- Apache Struts 2.3.31 (使用するパーサ変更時) : ○
- Apache Struts 2.3.32            : ○
- Apache Struts 2.5.10            : ×
- Apache Struts 2.5.10.1            : ○

なお、JPCERT/CC では、サーブレットフィルタ *2) を用いて不正なリクエストの制限を行った場合でも、実証コードが動作しないことを確認しています。

*2) Web アプリケーション (サーブレット) に対するリクエストの前処理を行
うための機能。
http://otndnld.oracle.co.jp/document/products/as10g/1013/doc_cd/web.1013/B28596-01/filters.htm


V. 対策

Apache Software Foundation より、本脆弱性を修正したバージョンが公開されています。十分なテストを実施の上、修正済みバージョンを適用することを強くお勧めします。

- Apache Struts 2.3.32
- Apache Struts 2.5.10.1

また、Apache Software Foundation は、パーサをデフォルトの JakartaMultipart parser (JakartaMultiPartRequest) から変更することも対策として呼びかけています。速やかなアップデートが難しい場合は、本対策の適用をご検討ください。
他のパーサとして、Struts 2.3.18 から標準で組み込まれているJakartaStreamMultiPartRequest や、追加のプラグインとして Pell Multipart
Plugin が挙げられており、Struts の設定ファイル (struts.xml など) で"struts.multipart.parser" パラメータを設定することで変更が可能です。

設定方法などの詳細は、以下を参照してください。
https://cwiki.apache.org/confluence/display/WW/File+Upload#FileUpload-AlternateLibraries

** 更新: 2017年 3月17日追記 ****************
JPCERT/CC では、Jakarta Multipart parser の代替として挙げられていたJakartaStreamMultiPartRequest についても、本脆弱性の影響を受け、攻撃が実行可能な場合があるとの情報を受け取りました。検証を行った結果、本脆弱性の影響を受けるバージョンを使用している場合、パーサを、JakartaStreamMultiPartRequest に変更しても、攻撃が可能なことを確認しました。修正済みのバージョンを適用することを強く推奨します。

また、Apache Software Foundation より、File Upload Interceptor を無効化する回避策が追加で案内されています。本回避策は、Struts 2.5.8 から2.5.10 に対して有効とのことです。回避策を適用する場合は、十分な検証の上、実施してください。

S2-045 : Possible Remote Code Execution when performing file upload based on Jakarta Multipart parser.
Workaround
https://struts.apache.org/docs/s2-045.html
**************************************************

** 更新: 2017年 3月21日追記 ****************
アドバイザリ (S2-046) で公開された脆弱性について、既に公開されているアドバイザリ (S2-045) と、脆弱性識別番号 (CVE-2017-5638) は同じであり、修正バージョンの変更はありませんが、回避策 (Jakarta Multipart parser/JakartaStreamMultiPartRequest の修正用プラグイン) が追加で案内されています。詳細は Apache Software Foundation の情報を参照してください。

Struts Extras
https://struts.apache.org/download.cgi#struts-extras
**************************************************


VI. 参考情報

Apache Struts 2 Documentation
Version Notes 2.3.32
https://struts.apache.org/docs/version-notes-2332.html

Apache Struts 2 Documentation
Version Notes 2.5.10.1
https://struts.apache.org/docs/version-notes-25101.html

Apache Software Foundation
Download a Release of Apache Struts
https://struts.apache.org/download.cgi

Apache Struts 2 Documentation
S2-045 : Possible Remote Code Execution when performing file upload based on Jakarta Multipart parser.
https://struts.apache.org/docs/s2-045.html

Apache Struts 2 Documentation
Alternate Libraries
https://cwiki.apache.org/confluence/display/WW/File+Upload#FileUpload-AlternateLibraries

独立行政法人情報処理推進機構 (IPA)
Apache Struts2 の脆弱性対策について(CVE-2017-5638)(S2-045)
https://www.ipa.go.jp/security/ciadr/vul/20170308-struts.html

JVNVU#93610402
Apache Struts2 に任意のコードが実行可能な脆弱性
https://jvn.jp/vu/JVNVU93610402/

** 更新: 2017年 3月21日追記 ****************
Apache Struts 2 Documentation
Possible RCE when performing file upload based on Jakarta Multipart parser (similar to S2-045)
https://struts.apache.org/docs/s2-046.html

Apache Software Foundation
Struts Extras
https://struts.apache.org/download.cgi#struts-extras
**************************************************

今回の件につきまして当方まで提供いただける情報がございましたら、ご連絡ください。

________
改訂履歴
2017-03-09 初版
2017-03-17 「I. 概要」および「V. 対策」の修正
2017-03-21 「I. 概要」および「V. 対策」、「VI. 参考情報」の修正

==============================
一般社団法人 JPCERT コーディネーションセンター (JPCERT/CC)
MAIL: info@jpcert.or.jp
TEL: 03-3518-4600 FAX: 03-3518-4602
https://www.jpcert.or.jp/
Topへ
最新情報(RSSメーリングリストTwitter