CodeQL 文档

使用相对路径执行命令

ID: java/relative-path-command
Kind: problem
Security severity: 5.4
Severity: warning
Precision: medium
Tags:
   - security
   - external/cwe/cwe-078
   - external/cwe/cwe-088
Query suites:
   - java-security-extended.qls
   - java-security-and-quality.qls

点击查看 CodeQL 存储库中的查询

当使用相对路径执行命令时,运行时使用 PATH 环境变量来查找要运行的可执行文件。因此,任何可以更改 PATH 环境变量的用户都可以导致软件运行不同的恶意可执行文件。

建议

在大多数情况下,只需使用具有绝对路径而不是相对路径的命令。

在某些情况下,可执行文件的位置在不同的安装中可能不同。在这种情况下,请考虑使用某种形式的配置指定关键可执行文件的位置。使用此方法时,请注意配置系统本身不会受到恶意修改的攻击。

示例

class Test {
    public static void main(String[] args) {
        // BAD: relative path
        Runtime.getRuntime().exec("make");
        
        // GOOD: absolute path
        Runtime.getRuntime().exec("/usr/bin/make");

        // GOOD: build an absolute path from known values
        Runtime.getRuntime().exec(Paths.MAKE_PREFIX + "/bin/make");
    }
}

参考

  • 常见弱点枚举:CWE-78

  • 常见弱点枚举:CWE-88

  • ©GitHub, Inc.
  • 条款
  • 隐私