2015-08-25 2 views
1

Я этот код, который хранит файл на сервере:Veracode обход каталогов Проблема с #

function void StoreFile(string inputFileName) { 
    ... 

    var extension = Path.GetExtension(inputFileName); 
    if(extension == ".csv") { 
     var fileName = string.Format("{0}_{1}{2}", Session.SessionID, new Guid(), extension); 

     var dataFileServerPath = _documentService.getPath(fileName, UserProfile.UserName, UserProfile.SourceID); 

     if(!string.IsNullOrEmpty(dataFileServerPath)) { 
      try { 
       using(FileStream dataFile = new FileStream(dataFileServerPath, FileMode.Create)) { .... } 
      } 
      cathc(Exception e) { ... }  
     } 
    }  
    else { 
     throw new NotSupportedFormatError(); 
    } 
} 

Aftrer Veracode анализа я получаю каталог Траверс выпуск на линии FileStream dataFile = new FileStream(dataFileServerPath, FileMode.Create)

Почему я получаю этот вопрос там, я проверено, является ли расширение файла действительным для моего случая и передал это значение в fileName. Являются ли эти проблемы безопасности и как решить эту проблему?

_documentService.getPath просто добавляет путь из web.config и имени файла для конкретного пользователя, он не связан с вводом пользователя.

ответ

2

В соответствии с кодом, который вы разместили здесь, это выглядит как ложноположительный.

Veracode, по-видимому, отслеживает переменную inputFileName (которая, как я полагаю, содержит неутвержденный пользовательский ввод), и отмечает, что она влияет на переменную extension. Так как позднее вы вставляете extension прямо в имя файла и читаете файл, на который указывает, Veracode видит, что злоумышленник может внедрить частичный путь в inputFileName, который затем изменит каталог целевого файла ...

В этом случае Veracode пропускает тот факт, что вы уже выполнили проверку ввода (проверка extension == ".csv") и полностью привязали соответствующую часть ввода к узкому белому списку.

Предполагая, что в вашем вопросе нет других соответствующих битов кода, это безопасно отмечать как ложные положительные.

+0

Спасибо за ответ. Ps. Как я могу проверить ввод пользователя (например, inputFileName) в других случаях и не получать проблемы с Veracode? – freshbm

+0

Ну, так как в момент вставки вы уже знаете, что значение, которое вы вставляете, это «.csv», почему бы просто не вставить это напрямую? :-) – AviD

+0

Кроме того, в общем случае это похоже на ошибку в Veracode, в зависимости от того, как определено правило. Другие продукты позволяют уточнить правила проверки, а не уверены в текущем решении для Veracode. В общем, ваш подход должен состоять в том, чтобы убедиться, что вы сделали проверку правильности, и не беспокоитесь об инструменте, который там проверяется. – AviD

1

Нет никакого реального способа для статических анализаторов надежно проверить, что вы фактически являетесь не с использованием пользовательского ввода. Они склонны ошибаться на стороне чрезмерной осторожности, создавая ложноположительные предупреждения.

Смежные вопросы