2014-11-05 2 views
0

Я пробовал много разных подходов fileInfo, filestream и т. Д. И не может обойти уязвимость на File.Create(DirName & fileName) любых предложениях или это просто ложный позитив?HP 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 указывают на это, как уязвимость из-за переменной FileName. Я предполагаю, что PatientLastName, PatientFirstName содержит данные, предоставленные пользователем. Это означает, что злоумышленник может обмануть этот variablis что-то вроде .. \ .. \ .. \ c: это наиболее распространенная атака обхода пути. Но, похоже, вы решили эту возможность для цикла. - Я не знаю, VB, я просто догадываюсь. Если вы считаете, что решили путь, и нет пути обхода (например, ...% 2F ..% 2fc: URL Encoded form), то он просто ложный. –

ответ

0

Похоже, что уязвимость, связанная с атаками Path Traversal.

Атака на траекторию пути направлена ​​на доступ к файлам и каталогам, которые хранятся вне корневой папки в Интернете. При просмотре приложения злоумышленник ищет абсолютные ссылки на файлы, хранящиеся на веб-сервере. Путем манипулирования переменными, которые ссылаются на файлы с последовательностями «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). Это может привести к созданию этого файла на выходе из каталога.

Для смягчения вы можете заменить обратную косую черту тоже (..% 2f ..% 2f - это кодировка формы .. \ .. \! Пожалуйста, учтите это тоже). Fortify может снова отмечать эти коды как уязвимые, но на этот раз он будет ложным.

Дополнительная информация, пожалуйста, прочитайте OWASP File System статьи (https://www.owasp.org/index.php/File_System)

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