Asp.net HP Fortify File.Create引发路径操作漏洞

Asp.net HP Fortify File.Create引发路径操作漏洞,asp.net,security,fortify,Asp.net,Security,Fortify,我尝试了许多不同的方法fileInfo,filestream等等。。并且无法绕过文件.Create(DirName&fileName)上的漏洞。是否有任何建议,或者这只是一个误报 DirName=ConfigurationManager.AppSettings("DirectoryName") Dim fileName As String = PatientLastName & "_" & PatientFirstName & "_" & CurrentPatEn

我尝试了许多不同的方法
fileInfo
filestream
等等。。并且无法绕过
文件.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()

似乎该漏洞与路径遍历攻击有关

路径遍历攻击旨在访问存储在web根文件夹外的文件和目录。通过浏览应用程序,攻击者会查找存储在web服务器上的文件的绝对链接。通过操纵引用具有“点-点斜杠(../)”序列及其变体的文件的变量,可以访问存储在文件系统上的任意文件和目录,包括受系统操作访问控制限制的应用程序源代码、配置和关键系统文件。攻击者使用“./”序列向上移动到根目录,从而允许在文件系统中导航

此描述摘自OWASP。(进一步资料:)

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

还让我分享一些关于GetInvalidFileNameChars函数的信息

 The following characters are invalid in a path: 
Char    Hex Value 
",      0022 
<,      003C 
>,      003E 
|,      007C  
路径中的以下字符无效:
字符十六进制值
",      0022 
,003E
|,007C
for循环正在查找这些字符,因为我们无法在Windows操作系统的文件名中使用这些字符之一。但使用反斜杠(\)似乎没有任何障碍

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

为减轻你可以用空来替换反斜杠(.%2F…%2F是…..的编码形式。请!也请考虑一下)。


更多信息,请阅读OWASP文件系统文章()

最有可能的是,由于文件名变量的原因,加强指出这是一个漏洞。我假设PatientLastName,PatientFirstName包含来自用户提供的数据。这意味着攻击者可以欺骗此变量。这是最常见的路径遍历攻击。但似乎您通过for循环解决了这种可能性-我不知道VB,我只是在猜测-。如果你认为你解决了路径遍历,并且没有办法绕过(比如..%2F..%2fc:URL编码的表单),那么它就是误报。