Что такое XSS-уязвимости и зачем они нужны?

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

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

Что такое XSS-уязвимость?

XSS-уязвимость или межсайтовый скриптинг – тип уязвимости веб-приложения, который позволяет злоумышленнику внедрять скрипты или вредоносный код (обычно на языке JavaScript) в веб-страницы, которые просматривают другие пользователи. Уязвимость возникает, когда веб-приложение недостаточно фильтрует или экранирует ввод пользователя, позволяя внедрение кода, который будет выполнен на клиентской стороне. По этим же причинам становится возможной реализация других инъекционных типов атак на веб-приложения.

В результате эксплуатации XSS-уязвимости злоумышленник может получить доступ к личным данным пользователей, сеансовым файлам, украсть аутентификационные данные, осуществить перенаправление на вредоносный сайт или выполнить другие опасные действия.

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

Классификация по вектору атаки

По вектору атаки XSS-уязвимости разделяют следующим образом:

  • Отраженные или непостоянные XSS: внедренный вредоносный скрипт отражается в результатах или ответе веб-приложения, то есть выполняется при открытии страницы. Эта уязвимость обнаруживается только при попытке атаки.
  • Хранимые или постоянные XSS: скрипт злоумышленника внедряется на сервер и хранится там на протяжении длительного времени, что приводит к выполнению вредоносного кода каждый раз при отображении страницы.
  • DOM XSS: вредоносный скрипт внедряется при выполнении скрипта в браузере, оказывая влияние на DOM сайта, из-за чего код выполняется непосредственно в контексте сайта.
XSS-уязвимости
Изображение сгенерировано нейросетью Stable Diffusion

Классификация по каналам внедрения скрипта

Так как способов использования XSS-уязвимостей существует несколько, угрозы можно разделить по каналам внедрения вредоносного кода в систему:

  • Ошибки в браузере: если браузер достаточно новый, ошибки в его работе могут привести к возможности выполнения злоумышленником вредоносного кода. Например, становится возможным нарушение правила ограничения домена, являющегося одним из ключевых в безопасной работе сайтов.
  • Отсутствие экранирования спецсимволов HTML: в языке HTML есть специальные символы, которые постоянно применяются. Они являются управляющими, поэтому воспринимаются не как обычные символы, а часть синтаксиса языка HTML. Если не заэкранировать строку с этими символами, то пользователь сможет вводить команды, позволяющие выполнять вредоносный код на сайте.
  • Отсутствие фильтрации атрибутов и их значений в разрешенных тегах: на форумах и многих других сайтах, позволяющих пользователю размещать свой контент, механизмы публикации пользовательского контента передают веб-приложению HTML-код. Это создает проблему, ведь отсутствие фильтрации поступающих сообщений может вызвать проблемы в работе ресурса.
  • Подмена кодировки в заголовке страницы: так как многие браузеры пытаются определить кодировку страницы в процессе её открытия, эта кодировка должна быть где-либо указана в HTML-коде ресурса. В случае использования некоторых структур кода страницы злоумышленнику открывается возможность вставить вредоносный код в кодировке UTF-7 и обойти фильтрацию некоторых управляющих символов.
  • Внедрение SQL-кода: SQL-инъекции – это отдельный вид атак на веб-ресурсы. Он предполагает возможность использования языка SQL на сайте, что открывает возможность управления базами данных веб-приложения, в том числе внедрение вредоносных скриптов, которые будут воздействовать на устройства пользователей, когда сайт будет обращаться к зараженной строке базы данных.

По способу воздействия XSS-уязвимости делятся всего на два типа:

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

Как тестировщику найти XSS-уязвимость?

Для нахождения XSS-уязвимостей опытные тестировщики используют разнообразный арсенал инструментов, тактик и стратегий, которые они выработали за время своей работы.

Например, для нахождения XSS-уязвимостей можно воспользоваться таким инструментом, как XSStrike. Это сканер, написанный на языке программирования Python. Для работы с ним понадобится установленный Python и несколько библиотек. Сам инструмент достаточно прост в обращении: нужно ввести ссылку исследуемого сайта, а программа выдаст число обнаруженных уязвимостей вместе с информацией о них. Помимо этого, XSStrike имеет разнообразный функционал, позволяющий более подробно изучить безопасность выбранного ресурса.

Также опытными тестировщиками предлагается метод по поиску XSS-уязвимостей ресурсов, о процессах в которых нет подробной информации. Вот инструкция:

  1. Поместить испытательную строку во всевозможные поля и параметры сайта.
  2. Исследовать DOM на наличие удаленных следов вредоносного кода или программы.
  3. Проверить, экранированы ли все управляющие символы.
  4. Продолжить поиск уязвимостей.

В поисках отлично поможет ранее упомянутый XSStrike, либо же другие сканеры, вроде Dalfox и Burp Suite.

Также удобно пользоваться набором подготовленных испытательных строк. Это поможет не тратить время на подготовку строк для тестов XSS-уязвимостей.

Заключение

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

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

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *