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
扩展
此检查器可通过 Klocwork 知识库进行扩展。有关详情,请参阅调整 Java 分析。