CWE-79: Межсайтовый скриптинг

Характеристики

Распространенность Высокая Последствия Выполнение кода, обход защиты
Стоимость восстановления Низкая Простота обнаружения Просто
Частота атаки Часто Осведомлённость атакующего Высокая

 

Межсайтовый скриптинг (XSS) –  одна из наиболее распространенных, трудно контролируемых и опасных уязвимостей в веб-приложениях (CWE-79). Это в значительной степени неизбежно, когда вы объединяете не использующие информацию о состоянии HTTP, смесь данных и скрипта в HTML, большие объемы данных, передаваемые между веб-сайтами, различные схемами кодирования и многофункциональные веб-браузеры. Невнимательность может привести к тому, что злоумышленники могут внедрить Javascript или другой исполняемый браузером контент в веб-страницу, генерируемую вашим приложением. Затем при доступе к вашей веб-странице другими пользователями, их браузеры выполняют вредоносный скрипт, как если бы он пришел от вас (потому что, вообще-то, он и пришел от вас). И вдруг ваш веб-сайт обслуживает код, который вы не писали. Злоумышленник может использовать различные методы, чтобы осуществить ввод непосредственно в вашем сервере или использовать ничего не подозревающую жертву как посредника в технической версии игры «почему вы продолжаете себя бить?».

Уязвимости, связанные с межсайтовым скриптингом (XSS), возникают при:

1. Вводе недоверенных данных в веб-приложение, обычно по веб-запросу.

2. Динамической генерации веб-приложением веб-страницы, содержащей эти недоверенные данные.

3. При генерации веб-страницы приложение не ограничивает данные по контенту, исполняемому браузером, например, JavaScript, HTML-тэги, HTML аттрибуты, события мыши, Flash, ActiveX и т.д.

4. Жертва через браузер посещает сгенерированную веб-страницу, содержащую вредоносный скрипт, внесенный недоверенными данными.

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

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

 

Типы ошибок межсайтового скриптинга (cwe 79):

Тип 1: Отраженный межсайтовый скриптинг (или непостоянный)

Сервер получает данные непосредственно от HTTP запроса и отсылает их обратно в НТТР ответе. Эксплуатация отраженных XSS возникает, когда злоумышленник  вынуждает жертву отравить опасный контент в уязвимое веб-приложение, который по возвращении выполняется ее же веб-браузером. Наиболее распространенный механизм доставки вредоносного контента – это его включение как параметра в URL, который открыто опубликован или высылается в e-mail жертве.

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

 

Тип 2: Хранимый XSS (или постоянный)

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

 

Тип 0: DOM XSS

В этом типе XSS клиент осуществляет инъекцию XSS на страницу, в отличие от других типов, когда XSS-инъекция производится сервером. Обычно DOM XSS использует доверенный, управляемый сервером скрипт, высылаемый клиенту, например, Javascript, осуществляющий проверку работоспособности  формы перед тем, как ее подает пользователь. Если скрипт сервера обрабатывает данные, вводимые пользователем, и затем вставляет их обратно в веб-страницу (например, с динамическим HTML), что делает возможным реализацию DOM XSS.

 

Возможность возникновения ошибки:

  • При проектировании и разработке структуры ПО
  • При внедрении

Используемые платформы:

Языки – все

Архитектура – веб (обычно)

Классы технологий – веб-серверы (обычно)

Вероятность возникновения: от высокой до очень высокой

Общие последствия

Обход защитных механизмов; доступ к данным приложений: наиболее распространенная атака, проводимая через межсайтовый скриптинг, включает обнаружение информации, хранимой в пользовательских cookies.  Обычно злоумышленник создает скрипт для клиентской стороны, который (при интерпретации веб-браузером) выполняет какую-то деятельность (например, высылает все cookies сайта по определенному e-mailадресу). Этот скрипт загружается и запускается у каждого пользователя, посещающего веб-сайт. Поскольку загружаемый сайт имеет доступ к cookies, о которых идет речь, то и у вредоносного скрипта он имеется.

Выполнение неавторизованного кода или команд:  при определенных условиях становится возможным выполнение произвольного кода на компьютере жертвы, когда межсайтовый скриптинг комбинируется с другими уязвимостями

Выполнение неавторизованного кода или команд; обход защитных механизмов; доступ к данным приложений:  последствия XSS атаки одинаковы в независимости от того. хранимая она или отражаемая. Разница только в том, как «груз» попадает на сервер.

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

 

Факторы, способствующие эксплуатации:

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

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

 

Способы обнаружения

Автоматический статический анализ

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

Это не идеальное решение, поскольку 100% достоверность и охват на практике недостижимы, особенно при большом количестве компонентов.

Эффективность – средняя.

 

Черный ящик

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

Эффективность – средняя.