首页 > 解决方案 > 在我将解决方案作为 OWAPS 和 Roslyn 安全卫士的建议应用后,Veracode 仍然报告操作系统命令注入问题

问题描述

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

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 研究了解决此问题的解决方案。

这是我根据这些帖子修改后的代码。

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

所以我在这里担心的是:

  1. 在这种情况下,我是否应用了正确的解决方案来解决操作系统命令注入?

  2. 或者,我应该为此建议缓解吗?

标签: .netshellsecuritycommand-lineveracode

解决方案


我收到了 Veracode 的答复。

“您说得对,将 ProcessStartInfo 对象中的文件路径和参数分开是一个好的开始,并且验证文件名仅包含字母数字字符也应该有所帮助。

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

两个建议:

  1. 如果您希望我们的应用程序安全顾问之一帮助验证您的更改在上下文中是否正确,请考虑安排一次咨询。
  2. 一旦您 100% 确信您的修复解决了该缺陷,我建议您在缓解措施中记录这一点。"

推荐阅读