zap — решение для сканирования zaproxy в Stack Overflow

Я использую zaproxy для автоматического тестирования моего сайта. В отчете о сканировании есть предупреждение P1. Я не знаю, как исправить эту ошибку. Может кто-нибудь, пожалуйста, помогите мне: —

https://example.com/index.php?id=1535&source=home&storyId=468&r=video%2Fview%22%26timeout+%2FT+5%26%22&mode=current

Parameter

r

Attack

video/view"&timeout /T 5&"

1

Решение

Итак, это временная атака.
Они склонны к ложным срабатываниям, если сервер находится под нагрузкой.

Вы всегда должны пытаться вручную проверить любую потенциальную уязвимость, о которой сообщает сканирующий инструмент, включая ZAP.

В этом случае откройте URL-адреса, на которые ссылается ваш браузер — загрузка заняла около 5 секунд? Затем измените «5» в URL-адресе на что-то намного большее, например «30» — теперь это заняло 30 секунд?

Если это займет примерно столько же времени, то это может быть ложным срабатыванием.

2

Другие решения

Деталь оповещения

Высокий (средний) удаленный ввод команд ОС
Описание

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

URL

https://example.com/index.php?id=1535&источник = дом&storyId = 468&г = видео% 2Fview% 22% 26timeout +% 2FT + 5% 26% 22&Режим = ток

Parameter

р

Attack

видео / просмотр»&тайм-аут / T 5&»

URL

https://example.com/index.php?id=1535&источник = дом&storyId = 468&г = видео% 2Fview&Режим = ток% 22% 7Ctimeout +% 2FT + 5

Parameter

Режим

Attack

текущий «| тайм-аут / T 5

URL

https://example.com/index.php?r=site/login

Parameter

userTimeZone

Attack

&спать 5с&

URL

https://example.com/js/tinymce/tinymce.min.js?version=1405493567%26sleep+%7B0%7Ds%26

Parameter

версия

Attack

1405493567&сон {0} с&

URL

https://example.com/themes/sharperax/css/sh-style.css?version=1454508637%22%26sleep+5s%26%22

Parameter

версия

Attack

1454508637″&спать 5с&»

Инстансы

5

Решение

Если это вообще возможно, используйте библиотечные вызовы, а не внешние процессы, чтобы воссоздать желаемую функциональность.

Запустите свой код в «тюрьме» или аналогичной среде песочницы, которая устанавливает строгие границы между процессом и операционной системой. Это может эффективно ограничивать доступ к файлам в определенном каталоге или какие команды могут выполняться вашим программным обеспечением.

Примеры уровня ОС включают в себя Unix chroot jail, AppArmor и SELinux. В общем, управляемый код может обеспечить некоторую защиту. Например, java.io.FilePermission в Java SecurityManager позволяет вам указать ограничения на файловые операции.

Это может быть неосуществимым решением, и оно только ограничивает влияние на операционную систему; остальная часть вашего приложения все еще может быть предметом компромисса.

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

Используйте проверенную библиотеку или инфраструктуру, которая не допускает возникновения этой уязвимости или предоставляет конструкции, облегчающие ее устранение.

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

Если вам необходимо использовать динамически генерируемые строки запроса или команды, несмотря на риск, правильно заключите в кавычки аргументы и экранируйте любые специальные символы в этих аргументах. Наиболее консервативный подход состоит в том, чтобы экранировать или отфильтровать все символы, которые не передают чрезвычайно строгий белый список (например, все, что не является буквенно-цифровым или пробелом). Если некоторые специальные символы все еще необходимы, например, пробел, заключите каждый аргумент в кавычки после шага экранирования / фильтрации. Будьте осторожны с введением аргументов.

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

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

Некоторые языки предлагают несколько функций, которые можно использовать для вызова команд. Где возможно, идентифицируйте любую функцию, которая вызывает командную оболочку, используя одну строку, и замените ее функцией, которая требует отдельных аргументов. Эти функции обычно выполняют соответствующее цитирование и фильтрацию аргументов. Например, в C функция system () принимает строку, содержащую всю команду, которая должна быть выполнена, тогда как execl (), execve () и другие требуют массив строк, по одной на каждый аргумент. В Windows CreateProcess () принимает только одну команду за раз. В Perl, если system () снабжена массивом аргументов, она будет заключать в кавычки каждый из аргументов.

Предположим, что все вводимые данные являются вредоносными. Использовать стратегию проверки входных данных «принять заведомо хорошее», т. Е. Использовать белый список допустимых входных данных, которые строго соответствуют спецификациям. Отклонить любой ввод, который не строго соответствует спецификациям, или преобразовать его во что-то, что делает. Не полагайтесь исключительно на поиск злонамеренных или искаженных данных (то есть не полагайтесь на черный список). Тем не менее, черные списки могут быть полезны для обнаружения потенциальных атак или определения того, какие входные данные настолько искажены, что их следует отклонить сразу.

При выполнении проверки входных данных учитывайте все потенциально релевантные свойства, включая длину, тип ввода, полный диапазон допустимых значений, пропущенные или дополнительные входные данные, синтаксис, согласованность по связанным полям и соответствие бизнес-правилам. В качестве примера логики бизнес-правил «лодка» может быть синтаксически допустимой, поскольку она содержит только буквенно-цифровые символы, но она недопустима, если вы ожидаете цвета, такие как «красный» или «синий».

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

Обратите внимание, что правильное кодирование, экранирование и цитирование выходных данных являются наиболее эффективным решением для предотвращения внедрения команд ОС, хотя проверка входных данных может обеспечить некоторую углубленную защиту. Это потому, что это эффективно ограничивает то, что появится в выводе. Проверка ввода не всегда препятствует внедрению команд ОС, особенно если вам требуется поддержка текстовых полей произвольной формы, которые могут содержать произвольные символы. Например, при вызове почтовой программы вам может понадобиться разрешить в поле темы вводить опасные для ввода данные, такие как «;» и символы «>», которые должны быть экранированы или обработаны иным образом. В этом случае удаление символа может снизить риск внедрения команды ОС, но это приведет к некорректному поведению, поскольку поле темы не будет записано так, как предполагал пользователь. Это может показаться незначительным неудобством, но это может быть более важно, когда программа использует хорошо структурированные строки темы для передачи сообщений другим компонентам.

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

Ссылка

http://cwe.mitre.org/data/definitions/78.html

https://www.owasp.org/index.php/Command_Injection

CWE Id

78

WASC Id

31

-1

По вопросам рекламы [email protected]