.net - 在我将解决方案作为 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 研究了解决此问题的解决方案。
- OWASP 帖子:https ://www.owasp.org/index.php/OS_Command_Injection_Defense_Cheat_Sheet
- Roslyn 安全卫士帖子:https ://dotnet-security-guard.github.io/SG0001.htm
这是我根据这些帖子修改后的代码。
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 仍然报告操作系统命令注入。
所以我在这里担心的是:
在这种情况下,我是否应用了正确的解决方案来解决操作系统命令注入?
或者,我应该为此建议缓解吗?
解决方案
我收到了 Veracode 的答复。
“您说得对,将 ProcessStartInfo 对象中的文件路径和参数分开是一个好的开始,并且验证文件名仅包含字母数字字符也应该有所帮助。
静态引擎仍将其报告为缺陷的可能原因是 Veracode 无法识别用于 CWE 78 的 .NET 的任何清理功能。因此,每当我们看到用户输入被传递给表示命令的函数时“ sink" 我们将标记为 CWE 78。我们也不评估正则表达式字符串的准确性/有效性,因此即使正则表达式完全准确,我们仍然会标记该缺陷。
两个建议:
- 如果您希望我们的应用程序安全顾问之一帮助验证您的更改在上下文中是否正确,请考虑安排一次咨询。
- 一旦您 100% 确信您的修复解决了该缺陷,我建议您在缓解措施中记录这一点。"
推荐阅读
- javascript - JS,Express:无论遵循以下指南,都无法在目录中查找视图
- angular - 理解角度分量的问题
- cypress - 检查页面上是否存在记录
- sql - 无法使用 spark SQL 创建表:创建 Hive TABLE (AS SELECT) 需要 Hive 支持;
- php - remove index.php codeigniter in localhost/folder/my_codeigniter/
- django-channels - 使用 django 通道动态地向子类别的消费者发送通知
- c# - 为什么使用firesharp将值发布到firebase实时数据库显示错误
- php - 在 Windows 10 和 PHP 7.3 中安装 AMQP
- cdn - http2 域分片而不损害性能
- jquery - 使用 Ajax 和 MVC 更新数据修复 POST 404(未找到)