.net 在我按照OWAP和Roslyn Security Guard的建议应用解决方案后,Veracode仍然报告操作系统命令注入问题
我的项目中的当前代码如下所示,Veracode报告存在OS命令注入.net 在我按照OWAP和Roslyn Security Guard的建议应用解决方案后,Veracode仍然报告操作系统命令注入问题,.net,shell,security,command-line,veracode,.net,Shell,Security,Command Line,Veracode,我的项目中的当前代码如下所示,Veracode报告存在OS命令注入 filename = Regex.Replace(filename, "[^a-zA-Z0-9_]", "_") & ".svg" ProcessStartInfo startInfo = default(ProcessStartInfo); Process pStart = new Process(); startInfo = new ProcessStartInfo(myExecutedFilePath, "\""
filename = Regex.Replace(filename, "[^a-zA-Z0-9_]", "_") & ".svg"
ProcessStartInfo startInfo = default(ProcessStartInfo);
Process pStart = new Process();
startInfo = new ProcessStartInfo(myExecutedFilePath, "\"" + filename + "\" --export-pdf=\"" + filename + "\""); **//OS command injection raises at this line**
pStart.StartInfo = startInfo;
pStart.Start();
pStart.WaitForExit();
因此,我从OWASP和Roslyn Security Guard两方面研究了解决这一问题的解决方案
- OWASP职位:
- 罗斯林保安岗:
filename = Regex.Replace(filename, "[^a-zA-Z0-9_]", "_") & ".svg"
ProcessStartInfo startInfo = default(ProcessStartInfo);
Process pStart = new Process();
startInfo = new ProcessStartInfo();
startInfo.FileName = myExecutedFilePath;
startInfo.Arguments = "\"" + filename + "\" --export-pdf=\"" + filename + "\""; **//Veracode still reports the issue at this line**
pStart.StartInfo = startInfo;
pStart.Start();
pStart.WaitForExit();
但是,Veracode仍然报告操作系统命令注入
因此,我关注的是:
我想
filename
是用户输入
从技术上讲,这是OS命令注入,但您可以说它在Veracode术语中是“通过设计缓解的”,因为文件名经过了强烈验证(T:M1,s:只有字母和数字是文件名的有效字符,其他字符将被替换)
然而,这引发了另一个漏洞的问题,即文件名或路径的外部控制(又称.path注入)。虽然在代码中的验证将减轻大部分,但是考虑边缘情况,比如已经存在的文件,或者由空字节(0)组成的文件名,或者空文件名。
例如,您的应用程序可以调用此pdf导出可执行文件,以提供生成的pdf供用户下载。如果使用已经存在的文件名调用,可能不会创建新的pdf,但可以提供现有的pdf供下载,而无需授权。这只是一个例子,类似的问题现在可能会出现,或者将来随着代码的发展可能会出现。我已经从Veracode收到了答案 “将ProcessStartInfo对象中的文件路径和参数分离是一个良好的开端,验证文件名是否仅包含字母数字字符也会有所帮助,这是正确的 静态引擎仍将此报告为缺陷的可能原因是Veracode无法识别.NET for CWE 78的任何清理函数。因此,每当我们看到用户输入被传递到表示命令“接收器”的函数时“我们将以CWE 78为旗。我们也不评估正则表达式字符串的准确性/有效性,因此即使正则表达式完全准确,我们仍然会标记该缺陷 两项建议:
我已经收到Veracode的答复。他们还建议我对这起案件提出缓解措施。