IT+HA - Что такое XSS?

Что такое XSS?

Уязвимость XSS (Cross-Site Scripting) - это уязвимость веб-приложений, которая позволяет злоумышленникам внедрять и исполнять на сайте вредоносный код, который может украсть или повредить данные пользователей, или даже получить полный контроль над сайтом.

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

Виды XSS:

Stored XSS: злоумышленник закладывает вредоносный код на страницу, который сохраняется на сервере. Когда другие пользователи просматривают эту страницу, код выполняется в их браузере.

Reflected XSS: злоумышленник отправляет пользователю ссылку на страницу с вредоносным кодом. Когда пользователь переходит по этой ссылке, код выполняется в его браузере.

DOM-based XSS: злоумышленник изменяет содержимое страницы, используя JavaScript, который выполняется внутри DOM (Document Object Model).

Хранимые XSS (Stored XSS)

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

Этот тип XSS отличается от его рефлективного (Reflected XSS) с тем, что злоумышленный скрипт сохраняется на сервере, а не отправляется на сервер в каждом запросе. Он может быть внедрен различными способами, например, через комментарии, форумы, блоги или другие области, где пользователи могут отправлять данные на сервер.

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

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

Процесс тестирования хранимого XSS может включать следующие шаги:

1.Анализ форм ввода пользователем на данные, которые хранятся в серверной части, а затем отображаются приложением.

·Страница пользователя

·Корзина

·Блог

·Форум, доска объявления.

·И др.

2.Анализ HTML кода приложения

Отправка тестовых запросов.

Отраженные XSS (Reflected XSS)

Это тип атаки на веб-приложения, при которой злоумышленник вводит вредоносный скрипт в параметры запроса, который затем отображается на странице и выполняется в браузере жертвы.

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

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

Тестирование на отражённые XSS состоит из 3 этапов:

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

2.Ввод ошибок – попробуйте ввести в полях ввода сайта различные ошибочные данные, например, вводить вместо e-mail фрагменты тегов HTML, скрипты.

3.Ввод вредоносных данных – попытайтесь ввести в полях ввода вредоносные данные, вызывающие XSS-атаки. 

Dom-XSS (DOM-based Cross-Site Scripting)

Это уязвимость интернет-приложений, которая позволяет злоумышленникам выполнить скрипты на клиентской стороне (т.е. в браузере пользователя) путем манипуляции с деревом объектной модели документа (DOM) веб-страницы.

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

Dom-XSS может быть использована злоумышленниками для кражи конфиденциальных данных, перехвата учетных данных, взлома сайтов и т.д. Для предотвращения этой уязвимости веб-разработчики должны тщательно проверять и фильтровать входные данные на стороне клиента и сервера, а также использовать соответствующие механизмы защиты, такие как Content Security Policy (CSP) и Input Validation.

С помощью XSS и отправки различных полезных нагрузок, злоумышленники могут достичь следующих целей:

1.Получение доступа к личным данным пользователей: злоумышленник может получить доступ к личным данным пользователей, таким как имена, пароли, адреса электронной почты, номера телефонов и т.д.

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

3.Межсайтовая подделка запроса (CSRF): злоумышленник может использовать XSS для выполнения CSRF-атак, когда злоумышленник заставляет пользователей выполнить некоторые действия на сайте, который они доверяют.

4.Распространение вредоносного кода: злоумышленник может распространять вредоносный код, используя XSS для установки вредоносных программ на компьютерах пользователей.

5.Отказ в обслуживании (DoS): злоумышленник может использовать XSS для передачи огромного количества данных на сервер, что может привести к отказу в обслуживании.

6.Раскрытие конфиденциальной информации: злоумышленник может получить доступ к конфиденциальным данным, таким как данные банковских карт или номера социального страхования, что может привести к кражам личных данных.

Для защиты от XSS можно использовать следующие подходы:

1.Фильтрация ввода данных. Все полученные пользователем данные должны быть проверены на наличие вредоносных скриптов и очищены от них.

2.Использование безопасных браузерных API. Это могут быть такие API, как innerText, которые не выполняют JavaScript-код, а только изменяют содержимое страницы.

3.Использование Content Security Policy (CSP), чтобы определить, какие источники данных могут использоваться на странице, и запретить любые другие источники.

4.Экранирование символов. Все пользовательские данные должны быть экранированы перед использованием на странице.

5.Использование токенов CSRF (Cross-Site Request Forgery), чтобы предотвратить выполнение запросов от имени пользователя без его согласия.

6.Обновление системы и использование последних обновлений безопасности, для того, чтобы устранить уязвимости, которые могут быть использованы злоумышленниками.