概要
脆弱性名(En) | Client-side desync attacks |
危険度 | High |
説明
Client-side desync (CSD)攻撃は、通常のリクエストスマグリングとは異なり、ブラウザのHTTP接続をターゲットとする攻撃です。
攻撃者は、被害者のブラウザにマルウェアが含まれたリクエストを送信させ、それがサーバーとの接続を不整合にします。
この不整合により、攻撃者は攻撃リクエストをサーバーに送信し、第三者に悪意のあるレスポンスを誘発させることが可能です。
この攻撃は、HTTP/1.1のコネクション再利用機能を利用しており、主にHTTP/2をサポートしていないサーバーが脆弱となります。これにより、フロントエンドとバックエンドの構成に依存しない、新しいタイプの脅威が生じます。
Client-Side Desyncの歴史と具体例
リクエストスマグリングは、2005年頃に最初に発見され、その後、サーバーとクライアント間でリクエストを混在させる手法として進化してきました。
従来のスマグリング攻撃は、フロントエンドとバックエンドのサーバー間の不一致を利用していたため、特定のアーキテクチャに依存していました。
しかし、2020年代に入り、ブラウザのリクエスト処理における不整合をターゲットとしたClient-side desync 攻撃が登場しました。実例として、攻撃者が特定のウェブサーバーへのリクエストに悪意のあるプレフィックスを挿入し、被害者がそのプレフィックスに基づいて予期せぬレスポンスを受け取るケースがあります。
リスク
Client-side desync の脆弱性を悪用されると、攻撃者はサーバーとクライアント間の通信を不正に操作し、被害者のブラウザを通じて悪意のあるリクエストを送信することができます。
これにより、クロスサイトスクリプティング(XSS)、キャッシュポイズニング、さらには機密情報の漏洩が発生する可能性があります。
また、この攻撃は単一サーバーに対しても実行できるため、従来のサーバー構成に依存しない点でより広範囲のシステムに影響を与えるリスクが高いです。
検出トリガー
- Request1・Request2で送信した結果のレスポンスに相違がある場合に検出します。
特に、リクエストのContent-Length
やTransfer-Encoding
ヘッダーを操作することで、サーバーが異なる解釈をし、予期しないレスポンスを返すかどうかをチェックします。
詳しい検証方法については、Client-side desync 検証環境を作成し、BurpSuiteでテストしてみる をご参照ください。
対策
HTTPヘッダーの厳密な検証と入力制御
リクエストヘッダー Content-Length
やTransfer-Encoding
の値を厳密に検証を行います。
攻撃者がこれらのヘッダーを利用してリクエストを分割しようとすることがあるため、ヘッダーの値が一致しているかを確認し、異常なリクエストがサーバーに到達する前にフィルタリングすることが重要です。
HTTP/2対応のサーバーにアップグレード
HTTP/1.1のコネクション再利用機能がCSD攻撃の中心的な脆弱性の一つです。HTTP/2では、リクエストの取り扱い方法が異なり、同様の攻撃を防ぐ仕組みが組み込まれています。
HTTP/2に対応することで、クライアントとサーバー間のリクエスト同期の不整合を避けることができます。
製品の定期的なアップデートとセキュリティパッチの適用
Webサーバーソフトウェアの定期的な更新を行うことで、リスクが軽減される可能性があります。
例えば、プロキシサーバーとして使用されるHAProxyにて、 バージョン 1.7.9等のバージョンで当脆弱性が存在しますが、最新バージョンにアップデートを行うことで対策されます。
関連リンク
危険度が脆弱性ツールによって異なる場合があります。