SV.EXEC.DIR

将未检查的用户输入用于全部或部分用来选择应用程序所执行命令的工作目录时,会检测到该错误。

漏洞与风险

通常,在应用程序之内进行外部命令的创建或执行进程时,需要考虑安全因素。如果全部或部分用于命令或进程的工作目录来自未验证的用户输入,则会出现这个特定的漏洞。攻击者可以操纵工作目录并且导致意外的行为,从而可能运行由攻击者植入的命令,而非运行预期的命令。

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

缓解与预防

可以通过验证所有来自应用程序外部的输入(例如用户输入、文件输入、系统参数等)防止来自用户输入的进程或命令注入攻击。验证应包括长度和内容。通常仅需要字母数字字符(即 A-Z、a-z、0-9)。应对任何其他接受的字符进行转义。在每个数据源处执行验证,例如从 HTTP 请求或用户界面(例如应用程序或控制台)读取每个参数时。

示例 1

复制
     public void dataQuery(ServletRequest req) throws IOException {
         String var = req.getParameter("username");
         File userRoot = new File(webRoot, var);
         Process proc = Runtime.getRuntime().exec("processRequest", null, userRoot);
         // parse results of command
         // ...
     }

针对第 18 行报告 SV.EXEC.DIR:“var”包含来自 HTTP 请求参数的数据,因此可能已被污染(第 13 行)。该值用于在第 17 行中创建类型 java.io.File 的对象,该对象随后用作第 18 行中执行的进程的工作目录。

安全培训

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

扩展

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