EN JP CN

SV.SHARED.VAR

SV.SHARED.VAR

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

脆弱性とリスク

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

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

軽減と防止

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

例 1

17    public static class Counter extends HttpServlet {
18      static int count = 0;
19      protected void doGet(HttpServletRequest in,
20          HttpServletResponse out) throws ServletException,
21          IOException {
22        out.setContentType("text/plain");
23        PrintWriter p = out.getWriter();
24        count++;
25        p.println(count + " hits so far!");
26      }
27    }

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