Межсайтовый скриптинг (XSS) – уязвимость, когда злоумышленник заставляет браузер цели выполнить вредоносный скрипт. Последствия могут включать воровство cookie сессии и выдачу себя за пользователя. Также XSS может комбинироваться с социальной инженерией для эскалации к более разрушительным атакам, таким как похищение конфиденциальных данных.
Типы XSS (общепринятая классификация):
Stored/Persistent (сохраненный) XSS
Что это:
Наиболее опасный тип межсайтового скриптинга.
Для его реализации преступник внедряет вредоносное содержимое (это называется полезной нагрузкой), чаще всего код JavaScript, в веб-сайт. Если проверка входных данных отсутствует, этот вредоносный код сохраняется веб-приложением, например, в базе данных.
Возможный сценарий:
Злоумышленник может ввести вредоносный скрипт в поле для входящих данных, например, в комментарий в блоге.
Когда пользователь открывает эту страницу, полезная нагрузка XSS передается в его браузер как часть HTML-кода (как легитимный комментарий), и тогда выполняется злонамеренный скрипт.
Reflected/Non-persistent (отображенный) XSS
Что это:
В этом случае полезная нагрузка злоумышленника должна быть частью запроса, отправленного на веб-сервер. Затем она отображается назад таким образом, чтобы HTTP-ответ содержал полезную нагрузку с HTTP-запроса.
Отраженный XSS не сохраняется, поэтому злоумышленнику необходимо внедрить полезную нагрузку для каждого пользователя отдельно.
Возможный сценарий:
Злоумышленник отправляет фишинговое письмо с вредоносной ссылкой, чтобы заманить цель к отправке запроса на сервер, после чего XSS выполняется в ее браузере.
DOM-based XSS (XSS на основе DOM)
Что это:
Это продвинутая XSS-атака, которая возможна для реализации, если скрипты на стороне клиента записывают данные, предоставленные пользователем, в модель объектов документов (DOM). После этого данные с DOM считываются веб-сайтом и выводятся в браузер.
Если они обрабатываются неправильно, злоумышленник может внедрить полезную нагрузку, которая будет сохранена как часть DOM и выполнена, когда данные будут считываться с DOM.
Атака XSS на основе DOM часто является атакой на стороне клиента, поэтому вредоносная полезная нагрузка не отправляется на сервер. Это еще больше усложняет ее обнаружение для брандмауэров веб-приложений (WAF) и инженеров безопасности, анализирующих логи сервера, поскольку они даже не увидят атаку.
Объекты DOM, которыми чаще всего манипулируют, включают URL-адрес (document.URL), часть URL-адреса якоря (location.hash) и Referrer (document.referrer).
Возможный сценарий:
Злоумышленник размещает вредоносную ссылку с компрометированным URL на стороннем ресурсе и делает SMS-рассылку с ней разным номерам. Цель заходит туда, клиентский скрипт читает URL и вставляет содержимое в DOM, после чего выполняется вредоносный код.
Относительно предотвращения XSS, у нас есть статья, с которой вы можете ознакомиться.
Обнаружение XSS
Как это делает DAST (black-box тестирование):
Динамическое тестирование безопасности приложений (например Invicti на основе Netsparker и Acunetix) собирает структуру сайта во время его выполнения, находя формы ввода и другие точки входа. Далее он внедряет безопасные полезные нагрузки, имитирующие действия хакера, таким образом проверяя, присутствует ли данная уязвимость.
Как это делает SAST (white-box тестирование):
Статическое тестирование безопасности приложений (например, от Mend.io) проверяет исходный код веб-приложения, ища там ошибки, вероятно, свидетельствующие о наличии уязвимости, грубо говоря, как в тексте.
Лучшая практика – комбинация методов
Хорошим выбором является сочетание данных практик, ведь они не взаимозаменяемы.
Во-первых, SAST не может обнаружить уязвимости, которые присутствуют только при выполнении сайта, как DAST, что уменьшает его охват; также этот метод считается менее точным.
Во-вторых, с помощью DAST нельзя просканировать всю базу кода; тестируется только запущенное веб-приложение, что делает невозможным внедрение этого метода в ранних стадиях разработки (но можно имплементировать позже).
Таким образом, лучше всего комбинировать данные техники, чтобы достичь максимальной эффективности.
Вы можете бесплатно протестировать платформы Invicti (DAST, IAST) и Mend.io (SAST, SCA, безопасность контейнеров), которые бесшовно интегрируются, для этого, пожалуйста, оставьте ваши данные в форме ниже:
Запрос на бесплатное тестирование Invicti/Mend.io
Оставьте контакты и мы с вами свяжемся







