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」的值,這將成爲嚴重的路徑遍歷問題。