【问题标题】:Path Manipulation (security vulnerability)路径操纵(安全漏洞)
【发布时间】:2012-04-10 17:19:24
【问题描述】:

Fortify 安全审查告知我们一些路径操纵漏洞。大多数都是显而易见且简单的修复,但我不明白如何修复以下问题。

string[] wsdlFiles = System.IO.Directory.GetFiles(wsdlPath, "*.wsdl");

“wsdlPath”是从文本框输入的。这是无法解决的问题吗?我可以验证路径是否存在等,但这对漏洞有何帮助?

【问题讨论】:

  • 该代码是如何运行的?如果它是使用输入 wsdlPath 的用户凭据运行的 Windows 应用程序,我看不出有什么问题。如果它在 Windows 服务中运行或作为网站的一部分运行,则会出现问题。
  • Fortify 审查是否提供了注入的字符串?
  • @AndersAbel - 网络应用程序。经过身份验证的用户输入路径,如果它是有效路径,则被接受。
  • @Tung - 他们没有提供字符串,他们认为任何字符串都可能是坏的。

标签: c# .net security path-manipulation


【解决方案1】:

如果数据总是从内容由用户决定的文本框中获取,并且代码使用该用户的权限运行,那么唯一的威胁就是用户攻击自己。这不是一个有趣的威胁。

该工具试图提醒您注意的漏洞是,如果低信任恶意代码可以确定该字符串的内容,那么恶意代码可以尝试发现有关用户的事实机器,例如“我碰巧知道的某个程序是否已安装和未修补安全漏洞?”或“这台机器上是否有名为‘admin’的用户?”等等。

【讨论】:

  • 唯一可以访问此页面的用户是系统管理员。只有少数人具有管理员级别的访问权限。我想这足以“损害控制”来考虑这个漏洞“低”。我只是看不出有什么方法可以让这变得比现在更强大。感谢您的意见。
  • 我将此标记为答案,因为输入此信息的经过身份验证的用户不会获得任何对他们有用的信息。最终用户,是的,绝对是……但这里不是这样。
  • @Induster - 通过确保过滤输入以仅允许有效路径和文件名,您可以使其更强大。是的,管理员访问权限只能缓解问题,但如果攻击者获得管理员访问权限,这可能会让他们获得对服务器本身的访问权限,而不仅仅是您的应用程序。
  • @MystereMan:如果攻击者通过某种方式获得管理员访问权限,那么攻击者就不需要通过应用程序进行攻击。这匹马已经在特洛伊城墙内,攻击者正在打开大门,让他们的 Myrmidions 军队入侵。纵深防御是个好主意,但敌对的管理员只会绕过你的防御;这就是成为管理员意味着:成为管理员正是拥有绕过保持系统安全的正常规则的能力
  • 也就是说,区分站点管理员和服务器管理员是有一定价值的。但是,很容易在不经意间造成安全漏洞,从而将站点管理员变成事实上的服务器管理员。
【解决方案2】:

您不应该将任何内容直接提供给未经过滤的 OS API。您应该清理输入,确保它不包含路径(即“../../../somefile”并确保它截断长名称,并且只包含有效的文件名字符(例如,有各种与国际字符有关的错误)。

【讨论】:

  • 正在按应有的方式处理输入。这显然是红色标记的,因为它源自用户输入。但这需要保持不变。对我来说,除了消除用户输入之外,我们似乎无能为力,这不是一个选择。也许有人可以在这里看到我看不到的东西。
  • @Induster - 你的回答令人费解。 “输入正在按应有的方式处理”是什么意思?你的 cmets 表明它不是。您必须清理输入以确保您没有将非法数据输入到操作系统 api 或不应允许的文件的路径中。如果你认为用户输入是完全可以接受的,比如系统密码文件,那么嘿..忘了我说了什么。
【解决方案3】:

使用该代码,任何经过身份验证和授权使用该功能的用户都可以访问服务器上的文件系统。访问将使用运行 Web 应用程序的服务帐户的凭据来完成。

根据返回数据的使用方式,恶意用户可能能够获取更多信息或使服务器以非预期方式运行。

您应该将允许的路径集限制为仅包含一个或几个精心选择的目录。使用 Path 类中的函数将字符串组合到路径中 - 它们负责处理用户为您输入 c:\allowedpath\..\windows\system32 之类的事情。

【讨论】:

    【解决方案4】:

    这种场景需要编码和解码,以确保数据不会在任何地方被操纵。因为在解密时,如果数据被改变,你会得到错误的结果。

    您可以创建自己的编码和解码。我是使用 System.Security.Cryptography 提供的 RijndaelManaged 和 PasswordDeriveBytes 类完成的;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-24
      • 2011-12-17
      • 1970-01-01
      • 1970-01-01
      • 2013-10-05
      • 1970-01-01
      相关资源
      最近更新 更多