SV.LOG_FORGING

未验证的用户在系统日志文件中输入信息时,会出现该错误。

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

漏洞与风险

日志记录是组织实施的安全性措施的重要部分。日志条目可实现在出现安全性故障时创建自动警报工具、获取统计信息或者跟踪攻击者。日志伪造使攻击者可以通过添加虚假条目来操纵日志记录。这可能会对自动扫描实用工具造成干扰,并且导致攻击者可以在不被发觉的情况下发动攻击,或者在发动攻击之后误导审阅者。

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

缓解与预防

应该针对所有对特定日志具有特殊意义的字符(例如用于文本日志的 CR,或者用于 XML 日志的尖括号)进行字符串转义,并且应该针对所有非文本字符进行筛选。

示例 1

复制
     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
         String amount = req.getParameter("amount");
         try {
             int iAmount = Integer.parseInt(amount);
             processAmount(iAmount);
         } catch (NumberFormatException e) {
             req.getSession().getServletContext().log("Incorrect int value specified for the 'amount' " + amount);
         }
     }

针对第 20 行报告 SV.LOG.FORGING:在第 15 行将未验证的用户输入存储在 amount 变量中,然后在第 20 行将此变量与常数字符串相串联,并且将其写入日志。此序列可能导致日志伪造。

安全培训

应用程序安全培训材料由 Secure Code Warrior 提供。

扩展

此检查器可通过 Klocwork 知识库进行扩展。有关详情,请参阅调整 Java 分析。