0

我在VB.Net源代码上运行了IBM AppScan工具。我在Path.Transal类别下的File.Copy方法中遇到了一个安全问题。VB.Net中的File.Copy方法中的IBM AppScan安全性PathTraversal问题

问题详细信息 - 漏洞类型 - PathTraversal 此API接受目录,文件名或二者兼有。如果用户提供的数据用于创建文件路径,则可以操作路径以指向不应允许访问的目录和文件,或者可能包含恶意数据或代码的文件。

我该如何解决这个问题?

Imports System.Web.Security.AntiXss 
Private Function ProcessFile() As Boolean 
    Dim drive As String = String.Empty 
    Dim folder As String = String.Empty 
    Dim filename As String = String.Empty 
    Dim sourcePath As String = String.Empty 
    Dim destinationPath As String = String.Empty 
    drive = AntiXssEncoder.XmlEncode(String.Format("{0}", System.Configuration.ConfigurationManager.AppSettings("Drive").ToString())) 
    folder = AntiXssEncoder.XmlEncode(String.Format("{0}", System.Configuration.ConfigurationManager.AppSettings("Folder").ToString())) 
    filename = AntiXssEncoder.XmlEncode(String.Format("{0}", System.Configuration.ConfigurationManager.AppSettings("File").ToString())) 

    sourcePath = Path.Combine(drive, folder, filename) 
    destinationPath = Path.Combine(drive, folder, "text2.txt") 

    Try 
     If sourcePath.IndexOfAny(Path.GetInvalidPathChars()) = -1 AndAlso destinationPath.IndexOfAny(Path.GetInvalidPathChars()) = -1 Then 
      File.Copy(sourcePath, destinationPath, True) 
      Return True 
     Else 
      Return False 
     End If 

    Catch ex As Exception 
     Return False 
    End Try 
End Function 

回答

0

它可能考虑AppSettings是不可信的用户输入(我已经看到AppScan的来源做一个Java项目配置类似),所以它的抱怨,你正在做用,可能有隔板不可信的输入路径英寸

如果任何drivefolderfilename确实来自不受信任这肯定会是一个问题。然而,假设你的配置只能由受信任的管理员访问,这不算什么。将配置视为未经检查的源代码非常愚蠢,但是一般来说,污点跟踪工具非常愚蠢。

这里处理文件名是比较古怪。在使用它们之前,XML编码文件名似乎不太可能是一个好主意; ToStringFormat步骤完全是多余的;无论如何,检查“无效”字符的整个路径并不能防止单个部分的注入。这是否是尝试解决AppScan的问题? InvalidPathChars检查不会有帮助,因为它不会直接编码/验证并返回受污染的值,并且只有将该函数明确标记为验证/编码函数时,XmlEncode才会有所帮助。

令人遗憾的是,为了满足静态分析器的钝器,使代码更加破碎。你可以添加一个函数作为AppSettings值的包装,并告诉AppScan它是一个验证/编码函数,所以它不认为这些值是污染的?或者只是忽略/沉默伪造的警告?

0

System.Configuration.ConfigurationManager.AppSettings可以被认为是一个安全的来源,你可以排除调查结果,所以它不会再出现。

另一方面,该代码可以被认为具有较差的安全编码实践。如果用Web UI输入代替“System.Configuration.ConfigurationManager.AppSettings”,那么最终用户可以控制“folder”“drive”和“filename”的值,这将成为严重的路径遍历问题。