SV.IL.DEV

当应用程序将设计信息泄露给应用程序的 Web 接口时,会检测到该错误。

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

漏洞与风险

泄露关于应用程序的实施的详细信息是一个安全性问题,因为攻击者可以从中获取可用于进一步发动攻击的信息。类名、文件名或路径名之类的详细信息会向攻击者泄露可用于尝试其他攻击的信息。例如,在发送至 Web 接口的消息中泄露路径信息可能暴露 Web 服务器的目录层次结构的位置。攻击者可以在路径注入攻击中使用该信息。通常应该在最大程度上减少泄露给 Web 接口的信息量,尤其不应该泄露设计详细信息。

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

缓解与预防

要防止泄露设计信息,可以将其从发送给应用程序的 Web 接口的消息中删除。普通的应用程序用户并不需要此类信息,但是攻击者却可以从中获取用于进一步发动攻击的信息。设计信息泄露经常在处理 Java 异常时发生。异常信息在编程过程中很有用,但是这些信息一经发布就十分危险。务必小心地显示或发送异常信息,并且确保用户永远不会看到此类信息。应该将所有堆栈跟踪和调试信息存储在攻击者无法读取的服务器日志中。

示例 1

复制
     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
         String name = req.getParameter("userName");
         File file = new File(System.getProperty("web.root"), name + ".dat");
         try {
             FileOutputStream str = new FileOutputStream(file);
             // ...
             str.close();
         } catch (IOException e) {
             throw new ServletException("Cannot open file " + file + ":"+ e.getMessage());
         }
     }

针对第 23 行报告 SV.IL.DEV:“name”使用 HTTP 请求参数的值进行初始化,因此可能已被污染(第 16 行)。该值用于在第 17 行中创建 file。如果第 19 行中出现异常,则 file 会被包裹进 ServletException,因此会将 HTTP 请求参数的值泄露给 Web 接口。攻击者可以通过泄露的设计信息获取重要的线索。

扩展

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