HTTPパラメータ汚染
From Wikipedia, the free encyclopedia
| HTTP |
|---|
| 主要項目 |
| リクエストメソッド |
| ヘッダーフィールド |
| ステータスコード |
| 認証方式 |
| セキュリティホール |
HTTPパラメータ汚染(英語:HTTP Parameter Pollution、略称:HPP)は、既存のパラメータにエンコードされたクエリ文字列デリミタを注入することによって悪用される、Webアプリケーション脆弱性である。HTTPパラメータポイゾニングとも呼ばれる。この脆弱性は、Webアプリケーションが出力する際に、ユーザー入力が正しくエンコードされていない場合に発生する[1]。この脆弱性により、Webアプリケーションが作成したURLにパラメータを注入することが可能になる。2009年にポーランドで開催された会議OWASP EU09にて、ステファノ・ディ・パオラとルカ・カレットーニによって初めて公にされた[1]。このような脆弱性の影響は様々であり、単なる迷惑な影響からWebアプリケーションの意図された動作の完全な破壊に至るまで多岐にわたる。Webアプリケーションの動作を変更するためのHTTPパラメータの上書き、入力およびアクセス検証のチェックポイントのバイパス、その他の間接的な脆弱性などは、HPP攻撃によって引き起こされる可能性のある結果である[1]。
共通脆弱性タイプではCWE-235に分類される。複数のパラメータが渡された場合の処理について、RFCの標準規格は存在しない。HPPは、クロスチャネル・ポリューション、CSRF保護やWAFの入力検証チェックのバイパスに利用される可能性がある[2]。
同じ名前の複数のパラメータが渡された場合、様々なバックエンドがどのように動作するかを以下に示す[3]。
| 技術 | 解析結果 | 例 |
|---|---|---|
| ASP.NET/IIS | すべての出現をカンマで連結 | param=val1,val2 |
| ASP/IIS | すべての出現をカンマで連結 | param=val1,val2 |
| PHP/Apache | 最後の出現のみ | param=val2 |
| PHP/Zeus | 最後の出現のみ | param=val2 |
| JSP, Servlet/Apache Tomcat | 最初の出現のみ | param=val1 |
| JSP, Servlet/Oracle Application Server | 最初の出現のみ | param=val1 |
| JSP, Servlet/Jetty | 最初の出現のみ | param=val1 |
| IBM Lotus Domino | 最後の出現のみ | param=val2 |
| IBM HTTP Server | 最初の出現のみ | param=val1 |
| mod_perl,libapreq2/Apache | 最初の出現のみ | param=val1 |
| Perl CGI/Apache | 最初の出現のみ | param=val1 |
| mod_wsgi (Python)/Apache | 最初の出現のみ | param=val1 |
| Python/Zope | リスト(配列)内のすべての出現 | param=['val1','val2'] |
種類
対策
適切な入力検証とHPPに関するWebテクノロジーへの理解が、HTTP Parameter Pollutionに対する防御となる[5]。