HTTPパラメータ汚染(HPP)は、攻撃者がURLまたはリクエストボディに同じ名前のパラメータを複数挿入することでHTTPリクエストを操作した場合に発生する、Webアプリケーションの脆弱性の一種です。アプリケーションが同じ名前のパラメータを適切に処理できないため、予期しない動作が発生し、エラーやセキュリティ上の欠陥につながる可能性があります。
HPPは、WebサーバーとアプリケーションがHTTPリクエストを処理する方法を悪用します。攻撃者が重複したパラメータ(同じパラメータ名で異なる値)を含むリクエストを送信すると、一部のアプリケーションでは適切に処理されない可能性があり、攻撃者はアプリケーションの動作を操作できるようになります。これは、GETリクエストとPOSTリクエストの両方で発生する可能性があります。
複数のパラメータの挿入: 攻撃者は、URLまたはリクエストボディに同じ名前のパラメータを複数含めます。例: http://example.com/page?param=value1¶m=value2
。
アプリケーション ロジックの悪用: アプリケーションがこれらのパラメータを処理する方法によっては、1 つの値を受け入れたり、リクエストを誤って処理したりして、パラメータベースのバイパスや SQL インジェクションなどの脆弱性が発生する可能性があります。
予期しない動作のトリガー: アプリケーションがパラメータを適切に検証またはサニタイズしない場合、エラー、不正アクセス、セキュリティ チェックのバイパス、またはデータ操作が発生する可能性があります。
HPP 攻撃は、特にアプリケーションが挿入されたパラメータを適切に処理できない場合に、いくつかの重大なセキュリティ リスクにつながる可能性があります。
セキュリティ フィルターのバイパス: 攻撃者は HPP を悪用して、認証チェック、入力サニタイズ、アクセス制御などの入力検証メカニズムをバイパスする可能性があります。
セッション固定とハイジャック: 攻撃者はセッションパラメータを操作することで、ユーザーセッションをハイジャックしたり、セッションを固定して正当なユーザーになりすます可能性があります。
SQL インジェクションおよびその他の攻撃: パラメータが不適切に処理され、クエリ (SQL クエリなど) で使用されると、HPP によって悪意のある SQL コードが挿入され、データの漏洩や破損が発生する可能性があります。
予期しないアプリケーションの動作: パラメータを不適切に処理すると、エラーやクラッシュが発生し、サービス拒否 (DoS) 攻撃や機密データの意図しない漏洩につながる可能性があります。
HPP 攻撃を防御し、関連するリスクを防ぐには:
入力パラメータの検証とサニタイズ: 入力パラメータが処理前に検証され、サニタイズされていることを確認します。これには、重複したパラメータや悪意のあるパラメータの防止が含まれます。
重複パラメータを拒否: アプリケーションは、同じ名前の複数のパラメータを含むリクエストを拒否するか、最初の有効なパラメータのみを受け入れる必要があります。
パラメータ化されたクエリを使用する: SQL インジェクションを防ぐために、データベースとのやり取りには常にパラメータ化されたクエリを使用し、パラメータを実行可能コードではなくデータとして扱います。
Web アプリケーション ファイアウォール (WAF) を適用する: WAF は、重複したパラメータや悪意のあるペイロードを含む疑わしいリクエストを検出してブロックし、セキュリティを強化します。
安全なフレームワークを使用する: 入力検証とサニタイズが組み込まれたフレームワークは、HTTP パラメータを安全に処理することで HPP 攻撃の可能性を減らすことができます。
HPP 攻撃を防ぐことは可能ですが、いくつかの課題があります。
重複パラメータの識別の複雑さ: すべてのアプリケーションまたはフレームワークが重複パラメータを簡単に処理または検出できるわけではないため、徹底したコードレビューや脆弱性評価によるカスタムのセキュリティ対策が必要です。
レガシーシステム: 最新のセキュリティ対策が施されていない古いWebアプリケーションは、より脆弱になる可能性があります。パラメータ検証を適切に処理できるように更新するには、大幅な変更が必要になる可能性があります。
セキュリティとパフォーマンスのバランス: パラメータ検証やその他のセキュリティ対策を実装すると、特にリクエストの重複フィルタリングが厳格に行われている場合、パフォーマンスに影響を与える可能性があります。パフォーマンスを犠牲にすることなくチェックを最適化することは困難です。
ユーザーエクスペリエンス: パラメータが正しく処理されていない場合、適切な検証によって正当なリクエストが拒否される可能性があります。検証が正当なユーザーインタラクションに悪影響を与えないようにすることが重要です。
HTTPパラメータ汚染は、WebアプリケーションがHTTPリクエスト内の重複パラメータを処理する方法を悪用する重大な脆弱性です。HPPを悪用することで、攻撃者はセキュリティ対策を回避したり、セッションを乗っ取ったり、SQLクエリなどの悪意のあるペイロードを挿入したりすることができます。HPPを防ぐには、堅牢な入力検証、重複パラメータの適切な処理、パラメータ化クエリなどの安全な手法の採用が不可欠です。これらの予防策を講じ、定期的にセキュリティ評価を実施することで、WebアプリケーションはHPP攻撃のリスクを最小限に抑え、ユーザーをより適切に保護することができます。