HP Fortify File.Create会引发路径操纵漏洞

时间:2014-11-05 16:22:53

标签: asp.net security fortify

我尝试了很多不同的方法fileInfofilestream等等。并且无法解决File.Create(DirName & fileName)任何建议的漏洞,或者这只是误报?

DirName=ConfigurationManager.AppSettings("DirectoryName")
Dim fileName As String = PatientLastName & "_" & PatientFirstName & "_" & CurrentPatEntityID & ".pdf"
For Each c In Path.GetInvalidFileNameChars()
    If fileName.Contains(c) Then
        fileName = fileName.Replace(c, String.Empty)
    End If
Next

Dim stream As FileStream = File.Create(DirName & fileName)
stream.Write(FinalContents, 0, FinalContents.Length)
stream.Flush()
stream.Close()
stream.Dispose()

1 个答案:

答案 0 :(得分:0)

似乎该漏洞与Path Traversal攻击有关。

  

Path Traversal攻击旨在访问存储在Web根文件夹之外的文件和目录。通过浏览应用程序,攻击者可以查找存储在Web服务器上的文件的绝对链接。通过操作引用带有“dot-dot-slash(../)”序列及其变体的文件的变量,可以访问存储在文件系统上的任意文件和目录,包括应用程序源代码,配置和关键系统文件,受系统操作访问控制的限制。攻击者使用“../”序列移动到根目录,从而允许通过文件系统进行导航。

这个描述来自OWASP。 (更多信息:https://www.owasp.org/index.php/Path_Traversal

我假设PatientLastName,PatientFirstName变量在用户(攻击者)控制之下。这意味着我们不能相信这些变量。

另外,让我分享一些有关GetInvalidFileNameChars函数的信息。

 The following characters are invalid in a path: 
Char    Hex Value 
",      0022 
<,      003C 
>,      003E 
|,      007C  

for循环查找这些字符,因为我们无法在Windows操作系统上使用其中一个文件名。但似乎没有障碍使用反斜杠(\)。

我们假设PatientLastName变量包含“.. \ .. \ .. \ test”。因此fileName变量类似于“.. \ .. \ test_DATA_DATA.pdf”。当您尝试使用File.Create(DirName&amp; fileName)函数创建该文件时。这可能会导致在out out目录中创建此文件。

为了缓解你也可以用空替换反斜杠(..%2f ..%2f是.. \ .. \!的编码形式,请考虑这一点)。 Fortify可以将此代码再次标记为易受攻击,但这次它将是误报。

更多信息,请阅读OWASP文件系统文章(https://www.owasp.org/index.php/File_System