2014-11-05 57 views
0

我試過很多不同的方法fileInfo,filestream等等,並且無法繞過File.Create(DirName & fileName)上的漏洞提出任何建議,或者這只是一個誤報?惠普Fortify File.Create引發路徑操縱漏洞

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() 
+0

最有可能的Fortify的指出了這一點,因爲作爲文件名可變的脆弱性。我假設PatientLastName,PatientFirstName包含來自用戶提供的數據。這意味着攻擊者可以欺騙這個變種,例如.. \ .. \ .. \ c:這是最常見的路徑穿越攻擊。但似乎你用for循環解決了這種可能性。 - 我不知道VB我只是猜測。如果你認爲你解決了路徑遍歷,並且沒有辦法繞過(比如..%2F ..%2fc:URL編碼形式),那麼它只是誤報。 – 2014-11-05 19:12:56

回答

0

看起來這個漏洞與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 & fileName)函數創建該文件時。這可能會導致在out目錄下創建這個文件。

爲了緩解您可以用空替換反斜槓(..%2f ..%2f是.. \ .. \!的編碼形式,請考慮這一點)。 Fortify可能會再次將這些代碼標記爲易受攻擊者,但這次將會是誤報。

進一步信息,請閱讀OWASP文件系統的文章(https://www.owasp.org/index.php/File_System