ページの本文へ

Hitachi

Hitachi Incdent Response Team

Hitachi Incident Response Team

HIRT-PUB17006:Apache Struts 2 の脆弱性 (CVE-2017-5638) 対策

更新日: 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リリースがリリースされました。

(回避策) Content-Type / Content-Dispostion / Content-Length ヘッダに "multipart/form-data" を含む不正なリクエストの遮断

既に攻撃で使用されている Content-Type ヘッダには、OgnlContext のような文字列を含んでいることから、このような文字列を含んでいる場合には、不正なリクエストとして遮断します。

[注]
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 脆弱性識別

次の脆弱性識別番号が付与されています。


6.2 注意喚起


6.3 参考情報


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 に変更した際の検証結果
図2:JakartaStreamMultiPartRequest に変更した際の検証結果

7. 更新履歴

2017年04月17日
  • CVSSスコア、5. 製品対応状況を更新しました。
2017年03月21日
  • 6.4 脆弱性検証、S2-046を追加しました。
2017年03月17日
  • このページを新規作成および公開しました。

担当:寺田、大西