Проблема IBM PathScan Security PathTraversal в методе File.Copy в VB.Net

Я запустил инструмент IBM AppScan на источнике VB.Net. У меня возникает одна проблема безопасности в методе File.Copy в категории Path Traversal.

Сведения о проблеме - Тип уязвимости - 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

2 ответа

Это, вероятно, учитывая AppSettings быть ненадежным пользовательским вводом (я видел, что AppScan Source делает то же самое с config в проекте Java), поэтому жалуется, что вы делаете путь с ненадежным вводом, в котором могут быть разделители.

Если какой-либо из drive, folder а также filename действительно из ненадежных, это определенно будет проблемой. Однако при условии, что ваша конфигурация доступна только доверенным администраторам, это ничего. Довольно глупо, что конфиг обрабатывается как непроверенный источник, но в целом инструменты отслеживания заражений довольно глупы.

Обработка имен файлов здесь довольно дурацкая. Кажется очень маловероятным, что имена файлов в кодировке XML перед их использованием - хорошая идея; ToString а также Format шаги совершенно лишние; и проверка всего пути на наличие "недопустимых" символов в любом случае не защищает от внедрения из отдельной части. Является ли этот материал попыткой обойти AppScan? Проверка InvalidPathChars не поможет, так как она не кодирует / проверяет напрямую и не возвращает испорченное значение, а XmlEncode поможет, только если эта функция была явно помечена как функция проверки / кодирования.

Грустно делать код более испорченным в попытке удовлетворить тупой инструмент статического анализатора. Не могли бы вы добавить функцию, которая будет использоваться в качестве оболочки AppSettings значения и сказать AppScan, что это функция проверки / кодирования, так что он не думает, что значения испорчены? Или просто игнорировать / заставить замолчать поддельное предупреждение?

System.Configuration.ConfigurationManager.AppSettings можно рассматривать как безопасный источник, вы можете просто исключить результаты, чтобы они больше не появлялись.

С другой стороны, этот код может рассматриваться как имеющий плохую практику безопасного кодирования. Если вы замените "System.Configuration.ConfigurationManager.AppSettings" на что-то вроде ввода веб-интерфейса, то конечный пользователь сможет контролировать значения "папка", "диск" и "имя файла", что станет серьезной проблемой обхода пути.

Другие вопросы по тегам