Что такое XSS-уязвимость и как тестировщику не пропустить её
Что такое XSS-уязвимость и как тестировщику не пропустить её
XSS-уязвимость может привести к потере репутации сайта, краже информации пользователей и наступлению юридической ответственности. Рассказываем, как обнаружить уязвимости и предотвратить их в будущем.
Межсайтовый скриптинг (Cross-Site Scripting, XSS) — это уязвимость на веб-сайте, пользуясь которой злоумышленники могут получить доступ к данным пользователей. Уязвимости позволяют маскироваться под пользователя, выполнять от его имени любые действия. Обычно XSS есть на всех сайтах, где нужна регистрация. Например, уязвимости есть во «ВКонтакте», в Telegram, на «Госуслугах» и в других сервисах. Поэтому пользователям рекомендуют не переходить по сомнительным ссылкам, проверять адрес сайта, прежде чем вводить свои данные в форму регистрации или при входе в личный кабинет.
Тестировать XSS-уязвимости учат на курсе «Инженер по тестированию». За пять месяцев студенты с нуля учатся тестировать веб-сайты и мобильные приложения, писать SQL-запросы, работать с таблицами и др. По итогам обучения студенты будут иметь восемь учебных проектов для портфолио, проект от Яндекса и диплом о профессиональной переподготовке.
Злоумышленник может создать вредоносную ссылку для внедрения файла JavaScript на веб-сайт. Когда жертва нажимает на ссылку, вредоносный код отправляет файл cookies на другой сервер. Бывает, что вредоносный код перенаправляет пользователя на сайт-копию с формами для кражи данных.
Представьте пользователя, у которого есть cookies для доступа к сайту. Обычно JavaScript имеет доступ к cookies, в том числе к авторизационной. Предположим, пользователь уже открыл сайт, в который злоумышленник уже внедрил вредоносный Java-код. Этот код читает значение авторизационной cookies и делает Ajax-запрос на сайт злоумышленника, на котором все URL-запросы пишутся, к примеру, в базу данных. Ajax — это метод JavaScript, который передаёт данные на сервер без перезагрузки страницы. Таким образом, в чужие руки попадает информация авторизованного пользователя. Всё, что нужно сделать злоумышленнику, — добавить данные cookies пользователя при авторизации на сайте.
Существует три основных вида XSS-атак.
1. Сохранённые XSS-атаки: вредоносный скрипт сохраняется на сервере, затем отображается пользователям, когда они посещают определённую страницу. Скрипт может храниться на целевых серверах — например, в базе данных, доске объявлений, журнале посетителей, поле комментариев и т. д. Когда другие пользователи заходят на страницу, где был сохранён этот код, он выполняется в их браузере.
2. Отражённые XSS-атаки: вредоносный скрипт передаётся пользователю через URL или форму регистрации, заказа и т. д. Например, такой вид атак распространён в соцсетях, когда пользователю отправляют ссылку с просьбой принять участие в голосовании. Вредоносные ссылки также используют в комментариях, в письмах на электронную почту и SMS-сообщениях. Как правило, ссылки похожи на адрес сайта, но в них могут быть изменены или добавлены буквы.
3. XSS на основе DOM: вредоносный код выполняется непосредственно в браузере жертвы с использованием JavaScript для манипуляции с содержимым веб-страницы. Злоумышленник может вставить вредоносный код в URL или в данные, которые обрабатываются на странице. Этот код может изменять содержимое DOM — программного интерфейса для HTML- и XML-документов.
Перечислим самые частые последствия XSS-атак.
● Кража информации. Злоумышленники внедряют вредоносный код на веб-страницу, чтобы получить доступ к пользовательским данным — например, к паспортным и учётным данным для входа, почтовому ящику, банковским или инвестиционным счетам, деловой переписке. Полученная информация может использоваться для мошенничества, кражи денег, оформления кредитов, документов и т. д.
● Перехват сеанса. Злоумышленник похищает файл cookies или токен сеанса, выдаёт себя за пользователя и выполняет действия от его имени: например, совершает несанкционированные транзакции, меняет настройки учётной записи или доступ к конфиденциальным данным. Чаще всего перехват сеанса происходит в сфере электронной коммерции. С помощью украденной сессии злоумышленники совершают покупки от имени пользователя.
● Повреждение страниц и внедрение вредоносного контента. Происходит замена внешнего вида веб-сайта или контента. Например, контент может содержать оскорбительную или фейковую информацию. Это может нанести вред репутации компании, подорвать доверие пользователей и в некоторых случаях привести к юридическим последствиям.
● Распространение вредоносного ПО. Ссылка может перенаправить пользователей на веб-сайты, на которых размещено вредоносное ПО, или инициировать принудительную загрузку программного обеспечения на компьютер. С помощью вредоносного ПО злоумышленники могут получить доступ к камере компьютера, переписке, приложениям, личной информации.
● Фишинговые атаки. Злоумышленники обманом заставляют пользователей раскрывать конфиденциальную информацию, маскируясь под надёжный сайт: например, при входе на сайт может отображаться поддельная форма входа, предлагающая пользователям ввести учётные данные. Фишинговые атаки часто используются в соцсетях, на государственных сайтах и в интернет-магазинах.
Тестировать сайты на наличие уязвимостей можно вручную или с помощью специальных программ. Например, есть такие программы, как Bug Bounty, XSSer, DOMinator, XSStrike и др. Мы покажем, как искать уязвимости вручную и с помощью сканера IWS.
Проведём тестирование ввода данных и файлов на примере сайта интернет-магазина запчастей для грузовых автомобилей.
1. Неправильная проверка ввода. На сайте магазина присутствует форма ввода для заявки, но отсутствует валидация — проверка кода на необходимые нормы. В нашем случае не указан формат ввода номера телефона — через +7 или через восьмёрку.
Чтобы проверить форму ввода на уязвимости, введём в поля случайные символы и нажмём кнопку «Отправить». При отсутствии защиты сайт не отреагирует на неправильные символы и отправит их в базу данных. Так и случилось с магазином запчастей. Сайт проигнорировал неверные символы и оповестил, что с пользователем скоро свяжутся. Это значит, что сайт не безопасен. Злоумышленники или конкуренты магазина могут воспользоваться уязвимостью и ввести свою заражённую ссылку.
2. Неограниченная загрузка файла опасного типа. Если на сайте нет валидации файлов, которые загружают пользователи, этим тоже могут воспользоваться злоумышленники. На сайте магазина запчастей есть форма загрузки файлов без ограничений по формату. Если загрузить в неё файл, например, формата DOCX, то он не отреагирует и отправит заявку в обработку. Это значит, что на сайт можно загружать в числе прочего вредоносные файлы.
Чтобы понять, попал ли файл в обработку, нужно посмотреть код сайта. Для этого нажмите правой кнопкой мыши и выберите «Посмотреть код». В правой части экрана откроется форма с кодом. Нажмите «Сеть» и найдите данные отправленной формы.
Рассмотрим пример поиска на специальной площадке для поиска веб-уязвимости bwapp. Сайт изначально содержит все распространённые XSS. Для работы необходима авторизация, чтобы это сделать безопасно, используйте Яндекс Браузер с заполнением Cookies Editor и удалением cookies. Затем введите логин и пароль.
После авторизации сайт откроет страницу BWAPP. Для поиска уязвимостей разработчики рекомендуют ввести в адресной сроке BWAPP/aim.php, сохранить ссылку в блокноте и экспортировать её в Cookies Editor.
Так выглядит сохранение ссылки в Cookies Editor. Источник
Теперь нужно открыть сканер, создать новый объект сканирования и установить режим. Система автоматически запустит окно режима сканирования. В полях нужно выбрать режим «Карта сайта», вставить ссылку из блокнота и нажать кнопку старта.
Сканирование может занять несколько минут. Когда результат будет готов, нажмите на ссылку. После этого нужно обновить карту сайта. Нажмите «Режим сканирования» — «Обновить карту сайта» — «Начать сканирование».
После завершения сканирования запустим сканер обнаруженных ресурсов. Нажмите «Режим сканирования» — «Быстрое сканирование обнаруженных ресурсов» — «Начать сканирование». Когда работа завершится, нажмите ссылку результата.
При переходе по ссылке с результатом нажмите внизу экрана вкладку html. На ней будут отражены страница с уязвимостью или её фрагменты. На вкладке «Код страницы» будет отображаться исходный код, а на вкладке «Информация» — сущность уязвимости и её подробное описание.
Теперь нажмите кнопку «Сформировать отчёт». Документ будет сформирован в формате html и будет содержать список уязвимых страниц, запросы к серверу и фразы в запросах, которые свидетельствуют о наличии уязвимости.
Защитить сайт от XSS совсем не получится, но можно снизить количество уязвимостей с помощью трёх действий.
1. Проверять экранирование текста пользователя: текст должен преобразовываться, чтобы они он интерпретировался как специальные команды или управляющие символы. Тогда внедрить вредоносный код не получится.
2. Применять HTTP-only cookies: это значение появляется, когда сервер просит клиента установить cookies.
3. Убирать лишние данные из cookies: разграничивать доступные в Google данные, которые должны и не должны быть доступны для JavaScript.
Читать также: