EN JP CN

SV.INT_OVF

SV.INT_OVF

このエラーは、汚染データを算術演算までトレース可能な場合に表示されます。

脆弱性とリスク

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

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

軽減と防止

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

例 1

19    protected void doPost(HttpServletRequest req,
20        HttpServletResponse resp) throws ServletException,
21        IOException {
22      String amount = req.getParameter("creditAmount");
23      int value = Integer.parseInt(amount);
24      int prevCreditBalance = getCreditBalance(req
25          .getParameter("user"));
26      // maximum credit is 5000
27      if (prevCreditBalance + value > 5000) {
28        // transaction
29        dosomething();
30      }
31      // ...
32    }

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

com/klocwork/examples/Example_117.java:27: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:22 -> amount at com/klocwork/examples/Example_117.java:22 23 -> parseInt().$RET at com/klocwork/examples/Example_117.java:23 -> value at com/klocwork/examples/Example_117.java:23 27

拡張機能

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