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 解析のチューニングを参照してください。