SV.DOS.ARRINDEX

このエラーは、未検証のユーザー入力が配列のインデックスとして使用されている場合や、この入力を配列のインデックスとして使用するメソッドで使用されている場合に発生します。

脆弱性とリスク

未検証のユーザー入力が配列のインデックスとして使用されている場合や、この入力を配列のインデックスとして使用するメソッドで使用されている場合、メソッドに ArrayOutOfBounds 例外をスローさせる攻撃を受ける可能性があります。さらに、これを使用してサービス拒否が引き起こされたり、規定オブジェクトを操作することにより、攻撃者に都合のよい代替制御フローが作成される可能性があります。たとえば、エラーが出力されると、このエラーから情報が攻撃者に漏洩する可能性があります。また、認証中にエラーが発生すると、オープンオンフェイル状態となり、攻撃者にセッションの不正取得を許す可能性があります。

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

軽減と防止

ユーザー入力からのサービス拒否 (DoS) 攻撃を防止するには、アプリケーションの外部からのあらゆる入力 (ユーザー入力、ファイル入力、システムパラメーターなど) を検証します。検証には、適切でアクセス可能なコンテナからの情報を使用した範囲検証を含める必要があります。

例 1

コピー
     protected synchronized void doPost(HttpServletRequest req, HttpServletResponse resp)
             throws ServletException, IOException {
         String indexString = req.getParameter("index");
         final int index;
         try {
             index = Integer.parseInt(indexString);
         } catch (NumberFormatException e) {
             resp.sendError(505, "Internal Error");
             return;
         }
 
         String key = data[index];
         resp.getOutputStream().println("Success! " + key);
     }

SV.DOS.ARRINDEX が 27 行目に対して報告されています。'indexString' は HTTP 要求から値を取得するため、汚染される可能性があります (18 行目)。汚染された 'indexString' が 21 行目で構文解析された後、その結果は 'index' に格納され、27 行目で配列要素のアクセスに使用されます。潜在的な攻撃者が大きな数値を指定することにより、ArrayOutOfBounds 例外が発生する可能性があります。 これは、アプリケーションの状態に損傷を与え、DOS 攻撃を受ける可能性があります。

拡張機能

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