XSS уязвимость простыми словами называют межсайтовым скриптингом — это одна из самых распространенных уязвимостей, которую можно найти на множестве веб-приложений в Интернете. Суть этой уязвимости достаточно простая — злоумышленник внедряет на страницу свой фрагмент JavaScript-кода, который не был создан разработчиками. Этот код срабатывает каждый раз после входа на страницу приложения обычными пользователями.
Далее возможны несколько вариантов развития событий:
- Злоумышленник завладевает логином и паролем пользователя, после чего успешно заходит в его аккаунт.
- Пользователя могут незаметно для него самого перенаправить на другую страницу-клон, которая будет очень похожа на тот сайт, на котором пользователь хотел оказаться изначально. Но все введенные на этом сайте личные данные окажутся у мошенников.
- Практически все, что может JavaScript, станет доступным для мошенника.
Далее разберемся подробнее с тем, как устроена и работает уязвимость. Также постараемся понять, по какой причине злоумышленник может так легко внедрить свой JavaScript в чужое приложение даже без наличия доступа к исходникам.
Как работает уязвимость?
Один из вариантов внедрения JavaScript-кода на чужой сайт — добавление его через поле ввода, через которое набранный текст сохраняется, а в дальнейшем и отображается для всех посетителей веб-ресурса. Например, это может поле для ввода комментария или отзыва на форуме. Вместе с безобидным текстом злоумышленник вводит и свой код, который также сохраняется на странице.
Обычные пользователи заходят на страницу, после чего вместе с текстом загружается и JavaScript-код хакера. Естественно, что уязвимость будет работать только в том случае, если после сохранения текст не обезопасят. Это лишь самый простой вариант внедрения уязвимости.
XSS — это вредоносный скрипт, который может активироваться после определенных действий пользователя. Например, после перехода пользователем по ссылке из электронного письма или после нажатия на определенную область сайта. Если пользователь бездействует, то вредоносный код не активируется.
Почему XSS атака встречается так часто?
Браузер не в состоянии самостоятельно отличить простой текст от того текста, который содержит JavaScript-код. Если разработчик желает, чтобы какой-либо текст только выглядел как код, но на самом деле не являлся таковым, то этот текст необходимо заблаговременно обработать перед тем, как его получит браузер. Эту обработку называют экранированием.
Экранирование предусматривает, что все специальные символы в тексте автоматически заменяются на «аналоги», поэтому браузер уже будет точно знать, что это обычный текст. Очень важно обрабатывать те тексты, которые поступают от пользователей, ведь любой юзер может оказаться хакером. Но разработчики очень часто забывают внедрять экранирование в веб-приложениях, поэтому текст выводится без какой-либо дополнительной обработки.
Для этого есть несколько причин:
- Программист не всегда запоминает все те места, из которых введенный пользователем текст окажется на странице. Также бывает, что различные части веб-сайта создаются разными людьми и в разное время. Поэтому вероятность ошибки возрастает в разы.
- Уязвимость может находиться не в коде разработчика, а коде той библиотеки, которой он пользуется. Обычно это какие-либо готовые фреймворки, используемые для разработки веб-сервисов. В данном случае разработчик может даже и не догадываться, что после подключения к проекту фреймворка он автоматически интегрирует в проект уже созданную уязвимость.
Такие риски присутствуют всегда, поэтому лучше создавать приложение полностью с нуля без использования каких-либо готовых библиотек. Но это очень долго и материально накладно, поэтому далеко не каждая фирма может позволить себе заказать разработку подобного уровня. Поэтому используют готовые библиотеки и нанимают тестировщиков.
В чем заключается опасность XSS-уязвимости?
Сама по себе уязвимость не представляет опасности для веб-ресурса и пользователей. Опасной она становится в том случае, когда ее обнаруживает злоумышленник, чтобы использовать в своих целях. Задействование данной уязвимости еще именуют «вектором атаки». В случае с XSS таких векторов очень много.
Простейший пример — кража авторизационной информации, содержащейся в cookie пользователей приложения. Обычно сайт, на котором имеется авторизационная форма, отличает пользователя по сессионной cookie. Если она отсутствует, то пользователь не прошел авторизацию. Если она имеется, то по значению данной cookie сервер способен различать пользователей.
Cookie-файлы хранятся на компьютерах пользователей — авторизация своим пользователем означает, что получится видеть лишь свое значение cookie. Чужое узнать не получится.
Это правило распространяется и на JavaScript-код, который обрабатывается в браузере юзера. Этот JavaScript-код увидит значение cookie лишь того юзера, в браузере которого этот код выполняется.
Где найти XSS, можно ли с ней бороться?
Искать XSS-уязвимости рекомендуется в тех местах сайта, где пользователь может влиять на контент. Если в какое-то место можно добавить текст, то без проблем получится добавить и вредоносный код.
Вариантов того, как можно закрыть ошибку, довольно много. Описанное выше экранирование — это далеко не единственный способ. Можно запретить JavaScript распознавать некоторые cookie-файлы. Для этой цели у самих cookie имеется специальный параметр «http only».
После обнаружения тестировщиками XSS-уязвимости следует обратиться к разработчикам-программистам. XSS атака — пример кражи личных данных пользователей, когда злоумышленники могут завладеть авторизационной информацией посетителей сайта.