从 Process.Start 注入操作系统命令

问题描述 投票:0回答:3

我的应用程序正在使用

Process.Start
打开另一个应用程序来运行。 VeraCode [安全软件扫描工具] 将此命令报告为“操作系统命令注入漏洞”。我想得到一些评论。我在网上找到了很多关于过滤输入或限制程序名称的信息;但是,我很好奇是否还有其他使用 Process.Start 的替代方法?
编辑:
感谢您的评论,这是示例之一,是的,它正在从用户那里获取输入:

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

谢谢!

c# .net code-injection process.start veracode
3个回答
4
投票
Process.Start()

。因此,该工具已将其标记为漏洞。

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

例如,创建您的函数只是为了从此路径进行检查

c:/users/docs.txt

那么该函数不应在

c:/admin/docs.txt
内执行。
这是在将用户数据直接发送到流程之前需要进行验证的方式。

有关更多信息,请参阅这些精彩链接:

[1]

使用 Process.Start 进行潜在的命令注入

[2]

CWE 78:操作系统命令注入


3
投票
Process

类只不过是一个托管包装类,本机 Create Process 及其变体,例如 Create Process As User

    处理MSDN
  • 流程 源代码
  • 我认为没有比这更好的方法来启动进程了,因为所有其他解决方案也会调用 WinAPI 函数。 (因为这个函数(或其重载和变体)是在 Windows 中启动进程的唯一方法。

就我个人而言,我没有听说过任何有关

Process.Start

的问题,请澄清问题


问候


1
投票
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(); }

	
© www.soinside.com 2019 - 2024. All rights reserved.