-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA256 各位 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/ -----BEGIN PGP SIGNATURE----- iQEcBAEBCAAGBQJY0MFxAAoJEDF9l6Rp7OBIxmoH/jhKFca2kTsDO+v3vKxXYyK7 VBnxTLSAQcQn9Kj7Ifl5spb4YiUSIS/uY/tERoOfnB27U06WzZKj6sAgSQkNnEY9 P0gzecYYlK8iSUDFywrkq5ZUYhBS+u3Uyxx+VpX2Q5DzbKw+26SjwyYVvXKunI4A 3+njjstyevZYx/P3B9+7bp0aiYCCQ6VZHsmFYvjFXTwh2GmZmAk9C6X065wO5w1Q Zhfh19Z52tdVY4RifbJmmAziQAcHmRfDRemcax8OunwmCcVGCxne5DO5TWO29fte +i1Qlre4fqcCUHcK9kslRBqmgBv3DSYxSlfLctv9EobNlMtiuAk7g/AK2ukX7Ks= =qjKE -----END PGP SIGNATURE-----