更新日: 2017年04月17日
1. 概要
Apache Struts 2 の Jakarta Multipart parser には、Content-Type ヘッダに "multipart/form-data" を含む不正な HTTP 要求を受信した場合に、任意のコード実行を許してしまう脆弱性 (CVE-2017-5638) が存在し、結果として、脆弱性を悪用される可能性があります。
報告された脆弱性 (CVE-2017-5638) は既に侵害活動に利用されていますので、すみやかに対策版にアップデートしてください。
2017年03月06日
Jakarta Multipart parser の脆弱性に関するセキュリティ情報(S2-045)が公開されました。同日、簡易的な検証コード(1)がリリースされました。
2017年03月07日
攻撃コード作成につながる検証コード(2)がリリースされました。
2017年03月07日 10:12 CST
任意のコマンド実行が可能で、攻撃に利用できる検証コード(3)がリリースされました。
2017年03月07日 06:21 UTC
Metasploit-frameworkから検証コード(3)をベースとした検証コードがリリースされました。
2017年03月07日 15:36 UTC
検証コード(3)をベースとした検証コードがリリースされました。
2017年03月08日
Struts 2.5.10.1、Struts 2.3.32がリリースされました。
2017年03月21日
Jakarta Multipart parser の脆弱性に関するセキュリティ情報(S2-046)が公開されました。
CVSSによる深刻度
CVE-2017-5638: Jakarta Multipart parser の脆弱性により、任意のコードが実行される
CVSSv2 基本値
CVSS:2.0/AV:N/AC:L/Au:N/C:C/I:C/A:C
AV:攻撃元区分= ネットワーク
AC:攻撃条件の複雑さ= 低
Au:攻撃前の認証要否= 不要
C:機密性への影響 (情報漏洩の可能性)= 全面的
I:完全性への影響 (情報改ざんの可能性)= 全面的
A:可用性への影響 (業務停止の可能性)= 全面的
CVSSv3 基本値
CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H/E:H/RL:O/RC:C
AV:攻撃元区分= ネットワーク
AC:攻撃条件の複雑さ= 低
PR:必要な特権レベル= 不要
UI:ユーザ関与レベル= 不要
S:影響の想定範囲= 変更あり
C:機密性への影響 (情報漏洩の可能性)= 高
I:完全性への影響 (情報改ざんの可能性)= 高
A:可用性への影響 (業務停止の可能性)= 高
現状値 (2017年03月16日時点)
E:攻撃される可能性= 容易に攻撃可能
RL:利用可能な対策のレベル= 正式
RC:脆弱性情報の信頼性= 確認済
図1:S2-045 Struts RCE Content-Type: Malicious の概要
2. 影響を受けるシステム
+ cpe:/a:apache:struts:2.3.5 - cpe:/a:apache:struts:2.3.31
+ cpe:/a:apache:struts:2.5 - cpe:/a:apache:struts:2.5.10
3. 想定される影響
Apache Struts 上で稼働するアプリケーションが不正な HTTP 要求を受信した場合、そのサーバ上で任意のコード実行、アプリケーション、データなどに対する不正な操作を許してしまう可能性があります。
4. 対策
Apache Struts を修正バージョンにアップデートしてください。
4.1 Apache Foundation
(対策) 修正バージョンへのアップデート
2017年03月08日、Apache Struts 2.5.10.1、Struts 2.3.32リリースがリリースされました。
Struts 2.5.10.1
http://struts.apache.org/download.cgi#struts25101
Struts 2.3.32
http://struts.apache.org/download.cgi#struts-23x
(回避策) Content-Type / Content-Dispostion / Content-Length ヘッダに "multipart/form-data" を含む不正なリクエストの遮断
既に攻撃で使用されている Content-Type ヘッダには、OgnlContext のような文字列を含んでいることから、このような文字列を含んでいる場合には、不正なリクエストとして遮断します。
S2-045: Possible Remote Code Execution when performing file upload based on Jakarta Multipart parser. (2017年03月06日)
http://struts.apache.org/docs/s2-045.html
S2-046: Possible RCE when performing file upload based on Jakarta Multipart parser (similar to S2-045) (2017年03月21日)
http://struts.apache.org/docs/s2-046.html
[注]
S2-045では、パーサを JakartaMultipartRequest から他のパーサに変更する回避策を提示しています(You can also switch to a different implementation of the Multipart parser.)。このうち、Struts 2.3.18 からサポートされた JakartaStreamMultiPartRequest については、稼働条件によっては、迂回できる攻撃手法を確認しましたので、修正バージョンへのアップデートを推奨します。
2017年03月15日:JakartaStreamMultiPartRequest に変更しても攻撃可能なことを確認
2017年03月16日:JPCERT/CC、IPA に通知
2017年03月17日:JPCERT-AT-2017-0009 の更新を確認、HIRT-PUB17006 の公開
2017年03月21日:S2-046と同じ問題であることを確認
5. 製品対応状況
日立製品ならびに、日立が提供する他社品(*印)の対応状況は、次の通りです。
2017年03月17日
セキュリティ情報 HIRT-PUB17006 を公開しました。
2017年04月14日
+ HiRDB Control Manager - Server
hitachi-sec-2017-110: HiRDB Control Manager - Serverにおける脆弱性
6. 参考情報
6.1 脆弱性識別
次の脆弱性識別番号が付与されています。
CVE-2017-5638
http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-5638
JVNDB-2017-001621
http://jvndb.jvn.jp/ja/contents/2017/JVNDB-2017-001621.html
JVNVU#93610402
6.2 注意喚起
IPA
Apache Struts2 の脆弱性対策について (CVE-2017-5638)(S2-045) (2017年03月08日)
http://www.ipa.go.jp/security/ciadr/vul/20170308-struts.html
JPCERT/CC
JPCERT-AT-2017-0009: Apache Struts 2 の脆弱性 (S2-045) に関する注意喚起 (2017年03月09日)
http://www.jpcert.or.jp/at/2017/at170009.html
6.3 関連情報
ソフトバンク・テクノロジー
Apache Struts 2 のマルチパーサー「jakarta」の脆弱性により、リモートから任意のコードが実行可能な脆弱性(CVE-2017-5638)(S2-045)に関する調査レポート (2017年03月08日)
https://www.softbanktech.jp/information/2017/20170308-01/
NTTセキュリティ・ジャパン
特に「36.45.172 [dot] 93」のIPアドレスから多数の組織で攻撃を確認しています。 (2017年03月08日)
https://twitter.com/NTTSec_JP/status/839132398210031616
NTTセキュリティ・ジャパン
3月7日の17時には攻撃を検知、20時に1度目のピーク (2017年03月09日)
https://twitter.com/NTTSec_JP/status/839833649839128576
ラック
Apache Struts 2における脆弱性 (S2-045、CVE-2017-5638)の被害拡大について (2017年03月10日)
https://www.lac.co.jp/lacwatch/alert/20170310_001246.html
6.4 脆弱性検証
JakartaStreamMultiPartRequest パーサに変更しても攻撃可能なことを確認しました。
検証環境は、次の通りです。
+ Ubuntu 16.04.1 (Linux 4.4.0-66-generic)
+ Tomcat 8.0.32
+ Struts 2.3.30
HTTP 要求ヘッダに addHeader('X-Check-Struts', 'S2-045 VULNERABLE!!') を設定して送信した結果、指定した通りに HTTP 応答ヘッダに設定されました。
図2:JakartaStreamMultiPartRequest に変更した際の検証結果
7. 更新履歴
2017年04月17日
2017年03月21日
2017年03月17日
担当:寺田、大西