SV.SHARED.VAR

このエラーは、メソッドでの同期なしに値が static フィールドからアクセスされ、このメソッドがサーブレットの doPost メソッドまたは doGet メソッドから推移的に呼び出される場合に表示されます。サーブレットクラスの 1 つのインスタンスが複数のスレッドで共有されるため、この問題はスレッドセーフです。

脆弱性とリスク

サーブレットはマルチスレッドであり、共有された static 変数は同時アクセスから保護されていないため、脆弱性が存在します。これは、J2EE アプリケーションにおける典型的なプログラムミスです。マルチスレッドはフレームワークによって処理されるためです。共有変数の使用は、攻撃者による情報の取得やサービス拒否 (DoS) 攻撃に利用される可能性があります。この共有データに機密情報が含まれる場合には、別のユーザーセッションで操作または表示されることがあります。このデータがアプリケーションの制御に使用された場合、その値が操作され、アプリケーションのクラッシュや低パフォーマンスの動作が発生する可能性があります。

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

軽減と防止

サーブレット間での static 変数の使用を取りやめるか、共有アクセスが絶対に必要な場合に保護を提供することにより、共有変数の脆弱性を回避できます。この場合、アクセスを同期化する必要があります。

例 1

コピー
    public static class Counter extends HttpServlet {
      static int count = 0;
      protected void doGet(HttpServletRequest in,
          HttpServletResponse out) throws ServletException,
          IOException {
        out.setContentType("text/plain");
        PrintWriter p = out.getWriter();
        count++;
        p.println(count + " hits so far!");
      }
    }

SV.SHARED.VAR が 24 行目および 25 行目に対して報告されています。static 変数である 'count' への非同期アクセスがサーブレットコードから利用可能です。

セキュリティトレーニング

Secure Code Warrior が提供しているアプリケーションセキュリティトレーニング教材。