1

我的应用程序Process.Start用于打开另一个应用程序来运行。VeraCode [一种安全软件扫描工具] 将此命令报告为OS Command Injection Vulnerable。我想得到一些评论。我在网上找到了很多关于过滤输入或限制程序名称的信息;但是,我很想知道是否还有其他使用方法Process.Start

编辑:感谢您的评论,这是示例之一,是的,它正在获取用户的输入:

public static void Run(string fileName, string arguments, bool waitForExit)
{
    Process p = Process.Start(fileName, arguments);

    if (waitForExit)
        p.WaitForExit();
}

谢谢!

4

3 回答 3

2

这是一个命令注入漏洞,因为您没有从函数中过滤掉用户输入,而是直接附加到 process.start() 中,因此该工具已将其标记为漏洞。

为避免此问题,您应该使用正则表达式方法来过滤掉坏字符,并取决于该函数在运行时将要执行的操作。

例如。创建您的函数只是为了从此路径 c:/users/docs.txt 进行检查,那么不应为 c:/admin/docs.txt 执行该函数。

这是您在将用户数据直接发送到流程之前需要验证的方式。

有关更多信息,请参阅这个很棒的链接:https ://dotnet-security-guard.github.io/SG0001.htm

https://www.veracode.com/security/dotnet/cwe-78

于 2021-06-08T07:51:06.683 回答
1

The Process class is nothing else then a Managed wrapper class the the Native Create Process and its Variations like Create Process As User .

I don't think that there is another way to start a process than this, because every other solution would also call the WinAPI function. ( because this function (or its overloads and Variations) is the only way to start a process in Windows).

Personally, I have not heard anything about a problem with Process.Start please clarify the problem

regards

于 2014-10-23T20:28:51.720 回答
0

我也遇到了这个。您需要将UseShellExecute属性设置为 false。那么 Veracode 就不会认为它是一个漏洞。

using (WinProcess myProcess = new WinProcess())
{
    myProcess.StartInfo.FileName = "notepad.exe";
    myProcess.StartInfo.Arguments = Path.GetFileName(fullPath);
    myProcess.StartInfo.UseShellExecute = false;
    myProcess.StartInfo.WorkingDirectory = Path.GetDirectoryName(fullPath);
    myProcess.StartInfo.RedirectStandardOutput = false;
    myProcess.Start();
}
于 2020-11-24T10:57:49.297 回答