公開日:2016/07/19 最終更新日:2016/11/02

JVNVU#91485132
CGI ウェブサーバがヘッダ Proxy の値を環境変数 HTTP_PROXY に設定する脆弱性

概要

CGI または類似のコンテキストで動作しているウェブサーバには、クライアントが指定したヘッダ Proxy の値を内部の環境変数 HTTP_PROXY に登録してしまう脆弱性が存在します。この脆弱性によって、内部のサブリクエストに中間者攻撃 (man-in-the-middle attack) を受けたり、サーバを任意のホストに接続させられたりする可能性があります。

影響を受けるシステム

  • CGI または類似のコンテキストで動作しているウェブサーバ

詳細情報

信頼できない入力値によるセキュリティ判定 (CWE-807) および 外部入力による重要な変数またはデータの初期化 (CWE-454)
CGI または類似のコンテキストで動作しているウェブサーバには、クライアントが指定したヘッダ Proxy の値を内部の環境変数 HTTP_PROXY に登録する脆弱性が存在します。

HTTP リクエストヘッダの情報を環境変数に設定する場合、RFC3875 では次のような命名規則を規定しています。結果として、名前衝突が発生します。

  • 大文字に変換する
  • "-" を "_" に変換する
  • 先頭に "HTTP_" を追加する
研究者によると、次のような状況のウェブサーバが脆弱とのことです:
  1. プログラミング言語またはフレームワーク (また稀にアプリケーション自身) が、ユーザのリクエストに含まれるヘッダ Proxy または類似の変数をもとに環境変数 HTTP_PROXY を設定している (無害なリクエストデータが潜在的に有害な環境変数に変わる)
  2. ウェブアプリケーションが HTTP_PROXY または類似の変数を (リクエスト形式を正しくチェックしていないなど) 適切に使用していないことにより、攻撃者の制御下にあるプロキシが使用される (HTTP_PROXY が安全に使用されていない)
細工されたリクエストを脆弱なサーバに送信することで、遠隔の第三者が内部のサブリクエストに対する中間者攻撃 (man-in-the-middle attack) を行ったり、サーバから任意のホストに接続させたりする可能性があります。さらに詳しい情報は、httpoxy.org を参照してください。

想定される影響

遠隔の第三者によって、内部のサブリクエストに対する中間者攻撃 (man-in-the-middle attack) を受けたり、サーバから任意のホストに接続させられたりする可能性があります。

対策方法

アップデートする
本脆弱性に対する各製品やコンポーネントの対策版が存在する場合、アップデートを適用してください。対策版は、各製品開発者へご確認ください。
アップデートやパッチが存在しない場合、本脆弱性の影響を回避するため、次のワークアラウンドを実施してください。

リクエストヘッダ Proxy をフィルタする
製品ごとのフィルタ方法に関する情報が、研究者やコミュニティから公開されています。
 

Apache/CGI
mod_headers を使用している場合は、次の設定でヘッダ Proxy を削除可能です:
  • RequestHeader unset Proxy
mod_security を使用している場合は次のようなルールを設定することが可能です:
  • SecRuleEngine On
  • SecRule &REQUEST_HEADERS:Proxy "@gt 0"
  • "id:1000005,log,deny,msg:'httpoxy denied'"
詳しくは、Apache が提供する情報を参照してください。
 
HAProxy
  • httprequest delheader Proxy
Nginx/FastCGI
PHPFPM や PHPPM などでヘッダ Proxy をブロックするために次の設定を使用してください:
  • fastcgi_param HTTP_PROXY "";
Nginx with proxy_pass
Nginx で proxy_pass を使用している場合は次の設定を使用してください:
  • proxy_set_header Proxy "";

Microsoft は、影響を受けるサードパーティ製のフレームワークを使用した IIS サーバ向けのガイダンスを提供しています。
 
回避手順
apphost.config に次のルールを追加してください:
<system.webServer>
   <rewrite>
        <rules>
            <rule name="Erase HTTP_PROXY" patternSyntax="Wildcard">
                <match url="*.*" />
                <serverVariables>
                    <set name="HTTP_PROXY" value="" />
                </serverVariables>
                <action type="None" />
            </rule>
        </rules>
    </rewrite>
</system.webServer>

ベンダ情報

ベンダ ステータス ステータス
最終更新日
ベンダの告知ページ
NTT-CERT 該当製品無し 2016/07/20
アライドテレシス株式会社 該当製品無し 2016/09/13
ジェイティ エンジニアリング株式会社 該当製品無し 2016/07/19
センチュリー・システムズ株式会社 脆弱性情報提供済み 2016/07/19
ビー・ユー・ジーDMG森精機株式会社 該当製品無し 2016/07/19
ミラクル・リナックス株式会社 該当製品あり 2016/07/22
ヤマハ株式会社 脆弱性情報提供済み 2016/07/19
ユミルリンク株式会社 脆弱性情報提供済み 2016/07/19
富士通株式会社 該当製品あり 2016/08/31
日本電気株式会社 該当製品あり 2016/11/01
株式会社インターネットイニシアティブ 該当製品無し 2016/07/19
株式会社ジャストシステム 脆弱性情報提供済み 2016/07/19
株式会社バッファロー 脆弱性情報提供済み 2016/07/19
株式会社東芝 脆弱性情報提供済み 2016/07/19

参考情報

  1. CERT/CC Vulnerability Note VU#797896
    CGI web servers assign Proxy header values from client requests to internal HTTP_PROXY environment variables
  2. httpoxy
    A CGI application vulnerability
  3. RFC3875
    The Common Gateway Interface (CGI) Version 1.1

JPCERT/CCからの補足情報

JPCERT/CCによる脆弱性分析結果

謝辞

関連文書

JPCERT 緊急報告
JPCERT REPORT
CERT Advisory
CPNI Advisory
TRnotes
CVE CVE-2016-5385
CVE-2016-5386
CVE-2016-5387
CVE-2016-5388
CVE-2016-1000109
CVE-2016-1000110
JVN iPedia

更新履歴

2016/07/19
複数の開発者のベンダステータスを更新しました
2016/07/20
NTT-CERTのベンダステータスが更新されました
2016/07/22
ミラクル・リナックス株式会社のベンダステータスが更新されました
2016/08/04
富士通株式会社のベンダステータスが更新されました
2016/08/31
富士通株式会社のベンダステータスが更新されました
2016/09/14
アライドテレシス株式会社のベンダステータスが更新されました
2016/11/02
日本電気株式会社のベンダステータスが更新されました