セキュリティブログ

【情報流出】【Apache Struts 2 脆弱性】東京都都税クレジットカード支払サイトおよび独立行政法人住宅金融支援機構の団体信用生命保険特約料クレジットカード支払いサイトで不正アクセスによる情報流出の可能性

2017.03.14

GMOペイメントゲートウェイ株式会社、トヨタファイナンス株式会社は3月10日、同社が運営受託する東京都都税クレジットカード支払サイトおよび独立行政法人住宅金融支援機構の団体信用生命保険特約料クレジットカード支払いサイトで不正アクセスによる情報流出(クレジットカード情報70万件)の可能性があると発表しています。

・GMOペイメントゲートウェイ株式会社さん/不正アクセスに関するご報告と情報流出のお詫び

・トヨタファイナンス株式会社さん/不正アクセスに関するご報告とお詫び

IPAさん、及びJP-CERTさんからの「Apache Struts 2 の脆弱性に関する注意喚起」を確認し発見されたとの報ですが、同じ脆弱性で郵政さんにもトラブルがあったようです。

・「国際郵便マイページサービス」における不正アクセス及び情報流出の可能性について

Apache Struts 2 の脆弱性に関する注意喚起につきましては、以下にJP-CERTさんページを転載しておきます。

※以下、JP-CERTさんウェブサイト/3月21日更新

各位


                                                   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 は、パーサをデフォルトの Jakarta
Multipart 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/