SV.TMPFILE

篡改临时文件路径

当未经验证的用户输入引入进行临时文件创建的 API 并作为前缀、后缀或临时文件路径时,将出现该错误。

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

漏洞与风险

这种情况可能导致路径操纵或拒绝服务攻击。通过路径操纵,用户可以操纵指向临时文件的路径,从而可以在未受保护的目录中使用它,例如 Web 根目录。用户可以让该方法报告 IllegalArgumentException(例如,如果前缀太短)。这种情况还可能导致 IOException,如果未对其进行正确处理,则会导致应用程序拒绝服务 (DoS)。

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

缓解与预防

永远不要使用用户数据作为临时文件的名称。

漏洞代码示例 1

复制
     import javax.servlet.http.*;
     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
         String name = req.getParameter("USERNAME");
         File file = File.createTempFile(name, ".tmp");
         dumpSensitiveInfoAndRunSomeApp(file);
         file.delete();
     }
 
     private void dumpSensitiveInfoAndRunSomeApp(File file) {
         // ...
     }

Klocwork 在第 4 行报告 SV.TMPFILE 缺陷,指出:name 包含来自 HTTP 请求参数的数据,因此可能已被污染(第 3 行)。此值用于在第 4 行创建临时文件,这可用于在不同位置创建临时文件,从而允许访问权限提升或 DoS。

漏洞代码示例 2

复制
     import jakarta.servlet.http.*;
     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
         String name = req.getParameter("USERNAME");
         File file = File.createTempFile(name, ".tmp");
         dumpSensitiveInfoAndRunSomeApp(file);
         file.delete();
     }
 
     private void dumpSensitiveInfoAndRunSomeApp(File file) {
         // ...
     }

Klocwork 在第 4 行报告 SV.TMPFILE 缺陷,指出:name 包含来自 HTTP 请求参数的数据,因此可能已被污染(第 3 行)。此值用于在第 4 行创建临时文件,这可用于在不同位置创建临时文件,从而允许访问权限提升或 DoS。

安全培训

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

扩展

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