0

IBM AppScanツールをVB.Netソースで実行しました。Path TraversalカテゴリのFile.Copyメソッドでセキュリティ問題が発生しています。IBM AppScan Security PathTraversalの問題(VB.NetのFile.Copyメソッド)

問題の詳細 - 脆弱性の種類 - 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

おそらく(私はAppScanのソースは、Javaプロジェクトの設定と似てやる見てきました)信頼できないユーザー入力するAppSettingsを考慮していますので、それはあなたがセパレータを持っている可能性があり、信頼できない入力してパスを作っていることを訴えています

drive,folderおよびfilenameのいずれかが信頼できない場合は、これが間違いなく問題になります。しかし、あなたの設定は信頼された管理者だけがアクセス可能であると仮定すると、これは何もありません。 configがチェックされていないソースとして扱われるのはかなり馬鹿だが、それで汚れ追跡ツールは一般的にはかなりばかげている。

ここでのファイル名の扱いはかなり不愉快です。それらを使用する前にXMLエンコーディングのファイル名が良い考えであることはほとんど考えられません。 ToStringおよびFormatの手順は完全に余計です。とにかく個々の部分からの注入を防ぐわけではありません。これはAppScanを回避する試みですか? InvalidPathCharsチェックは直接的にエンコード/検証して汚染された値を返さないため、XmlEncodeはその関数が検証/エンコード関数として明示的にマークされている場合にのみ役立ちます。

スタティックアナライザの鈍器を満足させるために、コードをもっと壊してしまうのは残念です。 AppSettingsの値にラッパーとして使用する関数を追加し、AppScanに検証/エンコーディング関数なので、値が汚染されているとは思わないでしょうか?または、偽の警告を無視/沈黙させるだけですか?

0

System.Configuration.ConfigurationManager.AppSettingsは安全なソースと見なすことができますが、結果が再び出てこないように除外できます。

一方、このコードは、安全でないコーディング慣行が悪いとみなすことができます。 "System.Configuration.ConfigurationManager.AppSettings"をWeb UI入力のようなものに置き換えると、エンドユーザーは "folder" "drive"と "filename"の値を制御できます。これは深刻なパストラバーサルの問題になります。

関連する問題