缺陷在于 Runtime.getRuntime().exec(cmd, env) 方法。我们已经使用 OWASP ESAPI 验证了输入。
但是 Veracode 仍然报告 OS 命令注入漏洞。
旧代码:
公共进程 exec(String[] cmd, String[] env) 抛出 IOException {
return Runtime.getRuntime().exec(cmd, env);
}
新代码:
公共进程 exec(String[] cmd, String[] env) 抛出 IOException {
String[] newCmdArr = new String[cmd.length];
String[] newEnvArr = new String[env.length];
for(int i=0;i<env.length;i++)
{
newEnvArr[i] = CSSecurity.getValidInput(ESAPIContext.OSCommand, env[i], ESAPIType.OSCommand);
}
for ( int i = 0; i < cmd.length; i++ )
{
newCmdArr[i] = CSSecurity.getValidInput(ESAPIContext.OSCommand, cmd[i], ESAPIType.OSCommand);
}
return Runtime.getRuntime().exec(newCmdArr, newEnvArr);
}