【问题标题】:Mitigaing OS Injection attack vulnerability on ASP.NET缓解 ASP.NET 上的操作系统注入攻击漏洞
【发布时间】:2017-01-31 15:12:02
【问题描述】:
我正在开发一个在代码发布到生产环境之前由 Burp 工具扫描的应用程序。最近的扫描导致了操作系统注入攻击漏洞。
在研究过程中,我看到的操作系统注入攻击的唯一例子是针对 unix、java、php 应用程序。
这些攻击是否可能针对 ASP.NET (MVC) 应用程序?如果是这样,您如何降低这种风险? ASP.NET(和/或 MVC)本身是否可以防止操作系统注入攻击?
【问题讨论】:
标签:
asp.net
asp.net-mvc
security
【解决方案1】:
框架本身不易受到操作系统注入攻击。您使用此框架编写的代码可能容易受到攻击。例如,如果您有一个控制器操作执行从外部作为参数传递的命令,您的应用程序立即变得容易受到攻击。考虑这个例子:
public ActionResult Index(string fileName, string arguments)
{
Process.Start(fileName, arguments).WaitForExit();
return View();
}
因此,基本上无论您使用什么框架或编程语言来开发您的应用程序,您都不应该相信用户输入并在接受它之前执行适当的清理。
【解决方案2】:
操作系统注入为defined by the OWASP Foundation,如下:
操作系统命令从您的应用程序调用外部应用程序。
[...]
我们应该寻找的是应用程序和操作系统之间的关系。利用底层操作系统功能的应用程序。
在使用 Runtime 对象的 java 中,java.lang.Runtime 执行此操作。在 .NET 中,诸如 System.Diagnostics.Process.Start 之类的调用用于调用底层操作系统函数。在 PHP 中,我们可能会寻找诸如 exec() 或 passthru() 之类的调用。
当然,你的研究已经表明了这一点。
这些攻击是否可能针对 ASP.NET/MVC 应用程序?
所以,是的,您使用的任何地方,或您使用的任何库使用System.Diagnostics.Process.Start(),无论是直接或间接提供用户输入,您都处于危险之中。
如果是这样,您如何降低这种风险?
像往常一样,在必要时适当地转义和清理用户输入。这不仅包括查询字符串或路由参数,还包括 cookie、HTTP 标头等。