SV.INT_OVF

被污染的数据可能导致整数溢出

可以将被污染的数据追溯到算术运算时,会出现该错误。

从 2023.2 版本开始,此检查器将支持 Jakarta EE。

漏洞与风险

整数溢出可能导致某些重要的安全性检查失败,这可能导致特权升级,或者导致拒绝服务 (DoS) 攻击。例如,如果请求大量对象,则循环计数器可能导致无限循环或非常长的循环,或者导致过度的内存分配。不仅仅是加法和乘法,所有运算都可能产生问题。

Klocwork 安全漏洞 (SV) 检查器可识别可能创建危险数据的调用;这些调用被视为不安全的来源。用户所提供的任何数据都可能是不安全的来源,因为用户可能是攻击者,或者可能引入人为错误。

缓解与预防

确保所处理的任何 int 值都在正确的范围中,而如果它们是大小值,则务必进行检查以保证这些值不是负值,然后再次检查允许的上限。

漏洞代码示例 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 知识库进行扩展。有关详情,请参阅调整 Java 分析。