运行静态扫描时收到一个Veracode错误:不正确地中和OS命令中使用的特殊元素(“OS命令注入”)(CWEID78)
应用程序调用带有我从前端接收到的参数的进程(应用程序在内部使用,这是一个userId)。
ProcessBuilder pb = new ProcessBuilder(PROCESS, "-A", argument);
Process p = pb.start(); // Veracode is mentioning this line我怎样才能解决这个Veracode问题?是否有一种“安全”的方法来运行一个过程?
发布于 2017-11-10 09:11:56
想必您的userId有一个定义良好的格式(数字、十六进制数字、字母数字、.),也许它总是相同的长度。
您必须通过regex将userId匹配到适当的字符类来验证它,并拒绝任何不符合的内容,否则,您将面临以下攻击:
Enter Username: diginoise; rm -rf /
发布于 2017-11-10 23:11:50
听起来这是应用程序中的一个架构问题。我非常肯定,您不希望以OS命令的形式执行由用户传递的假定userid作为请求参数。这将是通过设计的OS命令注入。
理想的解决方案是避免创建新的OS进程,并使用内置的Java功能来实现您的目标。
如果您必须运行外部进程,请不要将用户输入包含到正在运行的进程中。例如,如果要运行静态字符串ps aux,并在Java中执行"grep“位,那么Veracode查找就会消失,而且它将更加安全。
如果您绝对必须包括用户输入,请确保它是非常严格的验证。注意,对于OS命令注入,有时字母可能就足够了,尽管验证已经到位,Veracode将正确地将其标记为易受攻击。在这种情况下,如果您确信通过验证,不可能运行任何恶意的操作,则可以将Veracode中的发现标记为“通过设计减轻”。
https://stackoverflow.com/questions/47218854
复制相似问题