.net 在我按照OWAP和Roslyn Security Guard的建议应用解决方案后,Veracode仍然报告操作系统命令注入问题

.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, "\""

我的项目中的当前代码如下所示,Veracode报告存在OS命令注入

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仍然报告操作系统命令注入

因此,我关注的是:

  • 在这种情况下,我是否应用了正确的解决方案来解决OS命令注入问题

  • 或者,我应该提出缓解措施吗


  • 我想
    filename
    是用户输入

    从技术上讲,这是OS命令注入,但您可以说它在Veracode术语中是“通过设计缓解的”,因为文件名经过了强烈验证(T:M1,s:只有字母和数字是文件名的有效字符,其他字符将被替换)

    然而,这引发了另一个漏洞的问题,即文件名或路径的外部控制(又称.path注入)。虽然在代码中的验证将减轻大部分,但是考虑边缘情况,比如已经存在的文件,或者由空字节(0)组成的文件名,或者空文件名。
    例如,您的应用程序可以调用此pdf导出可执行文件,以提供生成的pdf供用户下载。如果使用已经存在的文件名调用,可能不会创建新的pdf,但可以提供现有的pdf供下载,而无需授权。这只是一个例子,类似的问题现在可能会出现,或者将来随着代码的发展可能会出现。

    我已经从Veracode收到了答案

    “将ProcessStartInfo对象中的文件路径和参数分离是一个良好的开端,验证文件名是否仅包含字母数字字符也会有所帮助,这是正确的

    静态引擎仍将此报告为缺陷的可能原因是Veracode无法识别.NET for CWE 78的任何清理函数。因此,每当我们看到用户输入被传递到表示命令“接收器”的函数时“我们将以CWE 78为旗。我们也不评估正则表达式字符串的准确性/有效性,因此即使正则表达式完全准确,我们仍然会标记该缺陷

    两项建议:

  • 如果你想成为我们的一员,可以考虑安排一次咨询 应用程序安全顾问帮助验证您的更改在上下文中是否正确
  • 一旦你100%感到舒适,你的修复 针对该缺陷,我建议在缓解措施中对此进行记录。 "

  • 我已经收到Veracode的答复。他们还建议我对这起案件提出缓解措施。