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

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

各位


JPCERT-AT-2016-0020
JPCERT/CC
2016-04-28

JPCERT/CC Alert 2016-04-28


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

https://www.jpcert.or.jp/at/2016/at160020.html


I. 概要

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

本脆弱性の実証コードがすでに公開されており、JPCERT/CC にて実証コードを用いて検証した結果、Struts アプリケーションを実行しているアプリケーションサーバの実行権限で任意のコードが実行されることを確認しました。DMI は、Apache Struts 2.3.15.2 以降ではデフォルトで無効になっていますが、DMI を有効にしている場合には、早期の対策を検討することを強く推奨します。なお、警察庁によれば、Apache Struts 2 の脆弱性を狙ったと考えられるアクセスが観測されているとのことです。

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


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

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


III. 対象

本脆弱性の影響を受ける製品は以下の通りです。
- Apache Struts 2.3.20 から 2.3.28 まで
(2.3.20.3 および 2.3.24.3 を除く)

なお、Apache Struts 2 を利用している製品も影響を受ける可能性があります。


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

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

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

【検証環境】
- アプリケーションサーバ
- CentOS 7.2.1511
- Apache Tomcat 7.0.57
- Java 1.8.0_71
- Apache Struts 2 を使用するサンプルアプリケーション

【検証結果】
- 本脆弱性の影響を受けるバージョンの Apache Struts 2 を利用しているサ
ーバ上で、任意のコード実行が可能なことを確認しました。
- 本脆弱性が修正されたバージョンの Apache Struts 2 を利用しているサー
バ上で、任意のコードが実行されないことを確認しました。
- DMI を無効に設定した場合に、Apache Struts 2を利用しているサーバ上で
任意のコードが実行されないことを確認しました。なお、DMI は、
Apache Struts 2.3.15.2 以降では、デフォルトで無効となっています。

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

| DMI 有効 | DMI 無効 |
- Apache Struts 2.3.28.1 | ○ |   |
- Apache Struts 2.3.28 | × | ○ |
- Apache Struts 2.3.24.3 | ○ |   |
- Apache Struts 2.3.24.1 | × | ○ |
- Apache Struts 2.3.24 | × | ○ |
- Apache Struts 2.3.20.3 | ○ |   |
- Apache Struts 2.3.20.1 | × | ○ |
- Apache Struts 2.3.20 | × | ○ |


V. 対策

Apache Software Foundation より、本脆弱性を修正したバージョンが公開されています。十分なテストを実施の上、修正済みバージョンを適用することを強くお勧めします。アップデートが困難な場合には、「VI. 回避策」を参考に、脆弱性の影響を受けないように設定を施してください。

- Apache Struts 2.3.20.3
- Apache Struts 2.3.24.3
- Apache Struts 2.3.28.1


VI. 回避策

本脆弱性の影響を軽減するため、十分に影響範囲を考慮の上、以下に記載する回避策の適用をご検討ください。

(1) Dynamic Method Invocation (DMI) を有効にしている場合、無効にする
詳細は、以下の情報を参照してください。

Apache Struts 2 Documentation
Dynamic Method Invocation
https://struts.apache.org/docs/action-configuration.html#ActionConfiguration-DynamicMethodInvocation

(2) 本脆弱性を修正したバージョンの Apache Strust 2 のソースコードを
もとに独自に ActionMapperを実装する
詳細は、以下の情報を参照してください。

Apache Struts 2 Documentation
ActionMapper and ActionMapping objects
https://struts.apache.org/docs/actionmapper.html#ActionMapper-Customize


VII. 参考情報

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

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

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

Apache Struts 2 Documentation
S2-032 : Remote Code Execution can be performed via method: prefix when Dynamic Method Invocation is enabled.
https://struts.apache.org/docs/s2-032.html

Apache Struts 2 Documentation
S2-019 : Dynamic Method Invocation disabled by default
https://struts.apache.org/docs/s2-019.html

JVNVU#91375252
Apache Struts2 に任意のコード実行の脆弱性
https://jvn.jp/vu/JVNVU91375252/

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

警察庁
Apache Struts 2 の脆弱性を標的としたアクセスの観測について (PDF)
https://www.npa.go.jp/cyberpolice/detect/pdf/20160427.pdf


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

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