SV.INT_OVF

汚染データが整数オーバーフローを引き起こす可能性があります

このエラーは、汚染データを算術演算まで追跡できる場合に表示されます。

リリース 2023.2 の時点で、このチェッカーは Jakarta EE をサポートしています。

脆弱性とリスク

整数オーバーフローにより重要なセキュリティチェックが失敗することがあり、その場合には、特権昇格やサービス拒否 (DoS) 攻撃につながる可能性があります。たとえば、膨大な数のオブジェクトが要求された場合、ループカウンタによって無限ループや非常に長いループが生じることや、過剰なメモリ割り当てが発生する可能性があります。加算や乗算のみではなく、すべての演算が問題につながる可能性があります。

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

軽減と防止

取り扱うすべての整数値が正しい範囲内であることを確認し、それらがサイズ値であると期待される場合には、値が負ではないことを常にチェックし、許容可能な上限を再度チェックします。

脆弱コード例 1

コピー
   import javax.servlet.http.*;
    protected void doPost(HttpServletRequest req,
        HttpServletResponse resp) throws ServletException,
        IOException {
      String amount = req.getParameter("creditAmount");
      int value = Integer.parseInt(amount);
      int prevCreditBalance = getCreditBalance(req
          .getParameter("user"));
      // maximum credit is 5000
      if (prevCreditBalance + value > 5000) {
        // transaction
        dosomething();
      }
      // ...
    }

Klocwork は次の報告を出力します。

com/klocwork/examples/Example_117.java:10:Severe(2): SV.INT_OVF: Tainted data value from getParameter().$RET used in arithmetic operation '+' can cause integer overflow or unexpected result -> getParameter().$RET at com/klocwork/examples/Example_117.java:5 -> amount at com/klocwork/examples/Example_117.java:5 10 -> parseInt().$RET at com/klocwork/examples/Example_117.java:6 -> value at com/klocwork/examples/Example_117.java:6 10

脆弱コード例 2

コピー
   import jakarta.servlet.http.*;
    protected void doPost(HttpServletRequest req,
        HttpServletResponse resp) throws ServletException,
        IOException {
      String amount = req.getParameter("creditAmount");
      int value = Integer.parseInt(amount);
      int prevCreditBalance = getCreditBalance(req
          .getParameter("user"));
      // maximum credit is 5000
      if (prevCreditBalance + value > 5000) {
        // transaction
        dosomething();
      }
      // ...
    }

Klocwork は次の報告を出力します。

com/klocwork/examples/Example_117.java:10:Severe(2): SV.INT_OVF: Tainted data value from getParameter().$RET used in arithmetic operation '+' can cause integer overflow or unexpected result -> getParameter().$RET at com/klocwork/examples/Example_117.java:5 -> amount at com/klocwork/examples/Example_117.java:5 10 -> parseInt().$RET at com/klocwork/examples/Example_117.java:6 -> value at com/klocwork/examples/Example_117.java:6 10

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

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

拡張機能

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