SV.HTTP_SPLIT

このエラーは、HTTP ヘッダーに書き込むメソッドに HTTP クライアントやデータベースの値が検証なしで表示される場合に報告されます。SV.XSS.* チェッカーも同様の攻撃に対応します。

このチェッカーは、入力検証が矛盾なく使用されていることを確認するのに便利です。特定の検証ユーティリティを使用してコードが設計され、適切な注釈がナレッジベースファイルに追加されていると、このチェッカーにより、検証が行われなかったコードパスの指摘が報告されます。 Java 解析のチューニング を参照してください。

脆弱性とリスク

HTTP 応答分割 は、アプリケーションの攻撃技法の 1 つです。これにより、Web キャッシュポイゾニング、クロスユーザー改ざん、機密のユーザー情報を持つページのハイジャック、クロスサイトスクリプティング (XSS) などの新たな攻撃が可能になります。この攻撃手法およびここから派生した攻撃は、ほとんどの Web 環境で起こり得ます。これらは、悪意のある文字や予期しない文字が含まれる不正なユーザー入力を拒否しないアプリケーションが原因となって発生します。

HTTP 応答分割とは、Web サーバーに出力ストリームを強制的に構成させる単一の HTTP 要求を攻撃者が送信し、ターゲットからは、通常の単一応答ではなく、2 つの HTTP 応答に解釈されるように仕込まれていることです。最初の応答は、攻撃者によって部分的に制御されている場合もありますが、それほど重要ではありません。重要な点は、2 番目の応答 (ヘッダー) の形式を攻撃者が完全に制御していることです。これが可能になると、攻撃者は、ターゲットを経由して 2 つの要求を送信することにより、攻撃を完成させることができます。最初の要求は Web サーバーから 2 つの応答を引き出し、2 番目の要求は Web サーバー上の無防備なリソースを利用します。しかし、ターゲットによる 2 番目の要求は、攻撃者に完全に制御された 2 番目の HTTP 応答と対応付けられます。このようにして、攻撃者は、2 番目の要求によって指定された Web サーバー上の特定のリソースがサーバーの HTTP 応答 (サーバーのコンテンツ) であるとターゲットに信じ込ませます。もちろん、これは Web サーバー経由で偽造されたデータ (2 番目の応答) です。

Klocwork セキュリティ脆弱性 (SV) チェッカーは、潜在的に危険なデータを生成する呼び出しを特定します。このような呼び出しは安全でないソースと考えられます。ユーザーは攻撃者になる可能性があり、ヒューマンエラーを取り込む可能性があるため、安全でないソースはユーザーが指定した任意のデータである可能性があります。

軽減と防止

やや信頼できるソース (データベースなど) からの入力を含め、すべての入力データを検証します。特に、キャリッジリターンとその後に続くラインフィードの組み合わせ (CRLF) についてチェックします。

例 1

コピー
     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
         String url = req.getParameter("HIDDEN_URL");
         if (url.length() == 0) {
             generatePage(req, resp);
         } else {
             resp.sendRedirect(url);
         }
     }
 
     private void generatePage(HttpServletRequest req, HttpServletResponse resp) throws IOException {
         PrintWriter wr = resp.getWriter();
         wr.print("Hello, World!");
     }

SV.HTTP_SPLIT が 20 行目に対して報告されています。'url' は HTTP 要求パラメーターからデータを取得するため、汚染される可能性があります (16 行目)。この値は、20 行目で HTTP リダイレクトの送信に使用されます。

拡張機能

このチェッカーは、Klocwork knowledge base (ナレッジベース) を利用して拡張できます。詳細については、Java 解析のチューニングを参照してください。