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