IBM Support

【重要セキュリティ情報】DoS脆弱性 CVE-2011-3192のIBM HTTP Serverにおける対応について(WAS-11-036)

Flashes (Alerts)


Abstract

IBM HTTP Serverで、DoS攻撃を受ける脆弱性(CVE-2011-3192)が全面開示されました。

Content

更新ログ

(2011/09/02 17:03) 回避策手順の修正、Fixの情報を追加/V1.3を対象外に変更/V1.3の注釈を修正
(2011/09/05 20:42) 「業務アプリケーションに対する回避策の影響範囲の確認方法」を修正
(2011/09/06 11:16) IHS V6.1、V6.0、V2.0.xの方法(2)を変更
(2011/09/07 09:21) 「業務アプリに対する回避策の影響範囲の確認方法」修正、PDFの注意点追加
(2011/09/07 21:14) FixCentralからのFix提供開始について追記
(2011/09/08 10:50) V6.1の回避策(2)を修正
(2011/09/09 21:35) IHS V6.1、V6.0、V2.0.xの方法(2)の閾値変更、暫定修正のダウンロード情報の追加/参考URL追加
(2011/09/12 15:05) V8,V6.1のInterimFixリリース済み
(2011/09/14 10:05) V8のAPAR適用手順追加、誤字修正
(2011/09/14 11:24) 誤字修正
(2011/09/27 09:30) V8.0.0.1,V7.0.0.19のFixリリース情報を更新
(2011/10/18 12:42) 対応策の注意点を追加
(2011/11/16 13:06) 個々のFixリリース情報を削除し、Fixリリース情報のリンクを追加


Apache HTTP Serverで、rangeヘッダーの取り扱いに問題があり、DoS攻撃を受ける脆弱性(CVE-2011-3192)が見つかっています。
わずかなセッションでCPUリソースやメモリーリソースの枯渇をさせることが可能です。
Apache HTTP ServerをベースとしたIBM HTTP Serverでもこの脆弱性の影響を受けます。

09/01 
・英文でのFlashが発行されました。
Potential security exposure with IBM HTTP Server 8.0 and earlier (PM46234) (CVE-2011-3192)
・IBMサービス・ライン経由でFixが提供されます。
サービス契約のあるお客様はIBMサービス・ラインにお問い合わせください。
IBMサービス・ライン開設のご案内
・Fixのダウンロード開始予定日はバージョンやFixレベル毎に異なるため、英文のFlashおよび当文書の「対応策」をご確認ください。

09/07
・一部のInterim Fix(暫定修正) がWebからダウンロード可能になりました。
 詳細は、下記「対応策」をご参照ください。

【対象ソフトウェア:】
Apache HTTP Server 2.0.x/2.2.xをベースとしたIHS (IBM HTTP Server)
  IHS V2.0.x
  IHS V6.0.x
  IHS V6.1.x
  IHS V7.0.x
  IHS V8.0.x

IHS V1.3.xについて
*英文Flashでは、「V1.3.xは当脆弱性には影響しないが、他のrangeヘッダーの取り扱いの問題がある」旨が記載されています。
そのため当文書では、V1.3の回避策もご紹介します。

【対象プラットフォーム:】
全てのプラットフォーム


【回避策:】
次のWebページで提供されている不正なrange headerを排除する設定をIHSの構成ファイルに入れてください。
本文書では多少の変更を行ってます。
Apache Mailing List Archives "Advisory: Range header DoS vulnerability Apache HTTPD 1.3/2.x (CVE-2011-3192) "


------------------------
IHS V7.0およびV8.0
------------------------
方法:(25以上の区間要求値を持つRangeヘッダーを含んだHTTP要求ではRangeヘッダーを無視する設定)
1) mod_headers および mod_setenvifモジュールがアンコメントされており(行の先頭に#がついていた場合#をはずす)、以下の例のようにモジュールがロードされる状態となっていることを確認してください。

例)UNIX版の例
----- httpd.conf
LoadModule headers_module modules/mod_headers.so
LoadModule setenvif_module modules/mod_setenvif.so
-----

2) httpd.confの最後に以下の9行を追加してください。
----- httpd.conf
# Drop the Range header when more than 25 ranges.
# CVE-2011-3192
SetEnvIf Range (?:,.*?){25,25} bad-range=1
RequestHeader unset Range env=bad-range
# We always drop Request-Range; as this is a legacy
# dating back to MSIE3 and Netscape 2 and 3.
RequestHeader unset Request-Range
# optional logging.
CustomLog logs/range-CVE-2011-3192.log common env=bad-range
-----

3) IHSを再起動します。

※上記の例はrangeヘッダーの区間指定の区切りに使われる","が25より多く存在する大きい場合はrange ヘッダーを削除して処理します。
該当する処理を個別のアクセスログに記録します。
またRequest-Rangeヘッダーは無条件に削除して処理します。

RFCでの定義によると、HTTPサーバーはRangeヘッダーのサポートは必須ではなく、非サポートのサーバーは単にRangeヘッダーを無視し、ファイル全体を応答すればよいことになっています。
稀にですが、Rangeヘッダーを付与したのにファイル全体をサーバーから返信されると本来の期待する動作を行えないといったクライアントが存在する可能性が考えられます。
  

------------------------
IHS V6.1、V6.0、V2.0.x
------------------------
ふたつの方法があります。

方法(1):(Rangeヘッダーを含んだHTTP要求からRangeヘッダーを除去して処理する設定)
1) mod_headers モジュールがアンコメントされており(行の先頭に#がついていた場合#をはずす)、以下のようにモジュールがロードされる状態となっていることを確認してください。

例)UNIX版の例
----- httpd.conf
LoadModule headers_module modules/mod_headers.so
-----

2) httpd.confの最後に以下の2行を追加してください。
----- httpd.conf
RequestHeader unset Range
RequestHeader unset Request-Range
-----

3) IHSを再起動します。

※方法(1)では常にHTTPリクエストのヘッダーから無条件にRangeヘッダを消します。つまり普通のHTTPリクエストとして振舞います(ファイル全体をクライアントに送信します)。
RFCでの定義によると、HTTPサーバーはRangeヘッダーのサポートは必須ではなく、非サポートのサーバーは単にRangeヘッダーを無視すれば良いことになっています。
しかし稀にですが、Rangeヘッダーを前提とした一部のクライアントではコンテンツを正常にダウンロードができなくなる可能性が考えられます。
 

方法(2):(100以上の区間要求値を持つRangeヘッダーを含んだHTTP要求を破棄する設定)
1) mod_rewriteおよびmod_headersモジュールがアンコメントされており(行の先頭に#がついていた場合#をはずす)、モジュールがロードされる状態となっていることを確認してください。

例)UNIX版の例
----- httpd.conf
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule headers_module modules/mod_headers.so
-----

2) httpd.confの先頭(※1)、および<VirtualHost>スタンザの先頭(他の全てのRewriteRuleよりも前の場所)に次の8行を記載してください。
複数の<VirtualHost>スタンザがある場合は、全ての<VirtualHost>スタンザに追加してください。
<VirtualHost>スタンザがある場合は、httpd.confの先頭と<VirtualHost>スタンザの両方に追加してください。
# Reject request when more than 100 ranges in the Range: header.
# CVE-2011-3192
#
RewriteEngine on
RewriteCond %{HTTP:Range} (?:,[^,]*){100} [NC] (※2)(※3)
RewriteRule .* - [F]

# We always drop Request-Range; as this is a legacy
# dating back to MSIE3 and Netscape 2 and 3.
RequestHeader unset Request-Range

(※1)09/08時点の英文Flashにはhtttpd.confの最後(ただし全てのRewriteRuleの前)に記載するとガイドされていましたが、先頭に変更されました。他のディレクティブの干渉を受けないために先頭に記載してください。

(※2)09/08時点の英文Flashには以下の書式がガイドされていましたが変更されました。この正規表現は、","の後に","以外の文字が1個以上のパターンが25回繰り返された場合にマッチするようになっており、","が連続する場合はマッチしません。
RewriteCond %{HTTP:Range} (?:,[^,]+){25} [NC]
","が連続するリクエストにも対応するため、下記書式をご案内いたします。この設定であれば、","の後に","以外の文字が0個以上のパターンが25回繰り返された場合にもマッチします。(+を*に変更)
RewriteCond %{HTTP:Range} (?:,[^,]*){25} [NC]

(※3)09/09時点で、英文Flashの閾値が25から100へ変更されました。

3) IHSを再起動します。

※上記の例はrangeヘッダーの区間指定の区切りに使われる","が100より多く存在する合はリクエストをリジェクト(403 Forbidden)するものです。
またRequest-Rangeヘッダーは無条件に削除して処理します。
もしも通常のリクエストがうまく処理されない(アクセスログに多数の403が記録される)場合は閾値をより大きな値に調整してください。

------------------------
IHS V1.3.x
------------------------
*英文Flashでは、「V1.3.xは当脆弱性には影響しないが、他のrangeヘッダーの取り扱いの問題がある」旨が記載されています。そのため当文書では、V1.3の回避策もご紹介します。
1) mod_rewriteモジュールがアンコメントされており(行の先頭に#がついていた場合#をはずす)、モジュールがロードされる状態となっていることを確認してください

例)UNIX版の例
----- httpd.conf
LoadModule rewrite_module modules/mod_rewrite.so
-----

2) httpd.confの最後(ただし他の全てのRewriteRuleよりも前の場所)、および各<VirtualHost>スタンザの先頭(他の全てのRewriteRuleよりも前の場所)に次の4行を記載してください。
複数の<VirtualHost>スタンザがある場合は、全ての<VirtualHost>スタンザに追加してください。
<VirtualHost>スタンザがある場合は、httpd.confの先頭と<VirtualHost>スタンザの両方に追加してください。
----- httpd.conf
RewriteEngine on
RewriteCond %{HTTP:range} .{200} [NC,OR]
RewriteCond %{HTTP:request-range} . [NC]
RewriteRule .* - [F]
-----

3) IHSを再起動します

※上記の例はrangeヘッダーの値の文字数が200文字より多い場合、及び、request-rangeが含まれている場合は、リクエストをリジェクト(403 Forbidden)するものです。

※※Request-Rangeは標準化されておらず古い一部のブラウザからのリクエストに含まれます。通常は処理の必要性がないため安全のためにいずれの回避策でも除去します。


【業務アプリケーションに対する回避策の影響範囲の確認方法:】

既存のIHS/Apache環境が、Rangeヘッダーを使用したリクエストに対応してPartialContentを提供している場合は、回避策が影響を与えることがあります。影響方法は以下のように確認できます。

1)IHS/Apacheのアクセスログを確認し、HTTPのステータスコード "206"が記録されているかを確認する

例)
127.0.0.1 - - [05/Sep/2011:20:38:09 +0900] "GET /index.html HTTP/1.1" 206 2566

206の記録がなければ使われていないため、回避策の影響はありません。
206が記録されていれば使われています。通常はrangeヘッダーを削除して処理してもクライアント側に問題ありませんが、サーバーでrangeヘッダーを無視すると影響があるクライアントもあります。閾値の見極めのため、さらに確認が必要であれば下記2)の方法で確認してください

2)アクセスログにRangeヘッダーの値を記録する (IHS V2.0、6.0、6.1、7.0、8.0)

・調査のみであれば、httpd.confに以下の設定をしてください。
-----
LogFormat "%h %l %u %t \"%r\" %>s %T %b \"%{Referer}i\" \"%{User-Agent}i\" \"%{Range}i\"" form-CVE-2011-3192
#追加ログ(状況調査用)
CustomLog logs/access_log2 form-CVE-2011-3192
-----

・回避策を実施すると同時に、アクセスログにRangeヘッダーの値を記録する場合は、httpd.confに以下の設定をしてください。 (IHSV7/8の例)

1) mod_headers および mod_setenvifに加えてmod_rewriteモジュールがアンコメントされており(行の先頭に#がついていた場合#をはずす)、以下の例のようにモジュールがロードされる状態となっていることを確認してください。

例)UNIX版の例
----- httpd.conf
LoadModule headers_module modules/mod_headers.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule rewrite_module modules/mod_rewrite.so
-----

2) httpd.confの先頭に以下を追加してください。
----- httpd.conf
# Drop the Range header when more than 25 ranges.
# CVE-2011-3192
SetEnvIf Range (?:,.*?){25,25} bad-range=1
RequestHeader unset Range env=bad-range
# We always drop Request-Range; as this is a legacy
# dating back to MSIE3 and Netscape 2 and 3.
RequestHeader unset Request-Range

# optional logging.
RewriteEngine on
RewriteCond %{ENV:bad-range} .+
RewriteCond %{HTTP:Range} (.+)
RewriteRule .* - [E=rewrite-saved-range:%1]
LogFormat "%h %l %u %t \"%r\" %>s %T %b \"%{Referer}i\" \"%{User-Agent}i\" \"%{rewrite-saved-range}e\"" form-CVE-2011-3192

CustomLog logs/range-CVE-2011-3192.log form-CVE-2011-3192 env=bad-range
-----


【回避策の注意点:】
・PDFのアクセスについて
回避策では、Rangeヘッダーの区間要求が25を超過するリクエストに対して、IHSでの扱いを変更しています。
しかしPDFアクセスのリクエストでは、約90の区間要求をRangeヘッダーに付与することがありますので、PDFアクセスのあるシステムでは閾値を100程度に変更することをご検討ください。
(※)09/09時点で、IHS V6.1、V6.0、V2.0.xの方法(2)について、英文Flashの閾値が25から100へ変更されました。


【対応策:】
Interim Fix APAR PM46234 を適用するか、APAR PM46234 が含まれるFix Packを適用してください。
Fix Packはコンポーネント毎に提供されているため、IHSのFixPackのみを適用することも可能です。

下記サイトからダウンロードが可能です。

以下のページから修正プログラムPM46234を入手して適用します。
PM46234: Potential Denial of Service with malicious range requests
FixCentralでAPAR番号 PM46234を指定して検索することもできます。
FixCentralのAPAR PM46234に関する修正モジュール(全てのバージョン/プラットフォーム)

Fix Packのリリース状況とダウンロード情報は下記サイトでご確認ください。
Recommended fixes for WebSphere Application Server

●分散系OS
------------------------
IHS V8.0
------------------------
方法(1)Interim Fix APAR PM46234 を適用する
方法(2)Fix Pack1以降を適用する

(※) InstallationManagerを使用したAPAR PM46234適用方法は、添付ファイルをご参照ください。
<PM46234-iFix適用.pdf>
PM46234-iFix適用.pdf

------------------------
IHS V7.0
------------------------
方法(1)Fix Pack15またはFix Pack17を適用後、Interim Fix APAR PM46234を適用する
方法(2)Fix Pack19を適用後、Interim Fix APAR PM46234を適用する
方法(3)Fix Pack21以降を適用する

------------------------
IHS V6.1~V6.1.0.39
------------------------
方法(1)Fix Pack35、Fix Pack37、Fix Pack39のいずれかを適用後、Interim Fix APAR PM46234 を適用する
方法(2)Fix Pack41以降を適用する

------------------------
IHS V6.0~V6.0.2.42
------------------------
方法 Fix Pack43を適用後、Interim Fix APAR PM46234 を適用する

※ IHS V6は2010年9月にサポート期間が終了となっております。追加のお問い合わせは延長保守契約しているお客様のみサポート対象となります。

------------------------
IHS V2.0(2.0.42および2.0.47)
------------------------
方法 IBMサービス・ライン経由に問い合わせ、PM46234 cumulative ifix を適用する

※ IHSV2.0.42および2.0.47はサポート期間が終了となっております。追加のお問い合わせは延長保守契約しているお客様のみサポート対象となります。


●z/OS (Powered by Apache版のみ対象)
------------------------
IHS V8.0
------------------------
APAR PM46234が含まれるFix Pack 8.0.0.1 以降を適用する

------------------------
IHS V7.0~V7.0.0.18
------------------------
APAR PM46234が含まれるFix Pack 7.0.0.19 以降を適用する

------------------------
IHS V6.1~V6.1.0.39
------------------------
APAR PM46234が含まれるFix Pack 6.1.0.41以降を適用する


●IBM WebSphere Application Server Hypervisor Edition
------------------------
V7.0
------------------------
この修正はV7.0.0.21 に含まれます。
V7.0.0.21以前のバージョンは、対応策"IHS V7.0"を実施してください。

------------------------
V6.1
------------------------
この修正はV6.1.0.41 に含まれます。
V6.1.0.41以前のバージョンは、対応策"IHS V6.1~V6.1.0.39"を実施してください。


【対応策の注意点:】
・Windows版のV6.0.2.43に対する修正モジュールを適用すると、iKeyman.batが上書きされiKeymanが起動しなくなる問題(JAVA_HOME、GSK_HOMEの変数が正しくセットされていないため)が報告されています。

回避方法が下記の文書内に公開されました。
PM46234: Potential Denial of Service with malicious range requests


【参考URL:】
Potential security exposure with IBM HTTP Server 8.0 and earlier (PM46234) (CVE-2011-3192)

情報処理推進機構:情報セキュリティ:脆弱性対策情報データベース(JVN)

米国国立標準技術研究所(NIST)

Apacheメールアーカイブ(最新)

Apacheメールアーカイブ(旧)

Apache HTTP Server

Apache HTTP Server ByteRange filter denial of service


以上

[{"Product":{"code":"SSEQTJ","label":"IBM HTTP Server"},"Business Unit":{"code":"BU059","label":"IBM Software w\/o TPS"},"Component":"Not Applicable","Platform":[{"code":"PF002","label":"AIX"},{"code":"PF010","label":"HP-UX"},{"code":"PF012","label":"IBM i"},{"code":"PF016","label":"Linux"},{"code":"PF027","label":"Solaris"},{"code":"PF033","label":"Windows"},{"code":"PF035","label":"z\/OS"}],"Version":"All Versions","Edition":"","Line of Business":{"code":"LOB45","label":"Automation"}}]

Historical Number

37C93CA8955399EF492578FB002DC48A

Product Synonym

対象システム:IBM HTTP Server

Document Information

Modified date:
25 September 2022

UID

jpn1J1008285