Dangling markup (висячая разметка) — вид атаки с инъекцией HTML-кода, предполагающий использование незакрытого тега или атрибута. Цель такой атаки — получить доступ к конфиденциальным данным, которые, как правило, содержатся в коде атакованной веб-страницы или вводятся в формы на ней.
Эта атака схожа с межсайтовым скриптингом и используется в тех случаях, когда политики безопасности сайта или веб-приложения не позволяют внедрять скрипты, но допускают внедрение HTML-тегов.
Техника атаки с использованием dangling markup
Язык HTML предполагает, что каждый тег или атрибут тега открывается и закрывается с помощью определенной последовательности символов. Если вся необходимая для выполнения кода информация приведена, но тег или атрибут не закрыт, браузер не выдает ошибку, а обрабатывает как часть тега или атрибута весь последующий текст до первого появления завершающей комбинации символов. При этом повторное появление открывающей комбинации браузер игнорирует. Например, если в коде страницы есть два открывающих тега <form> с разными адресами для отправки данных, то информация, которую пользователь введет в форму, будет передана на первый адрес. Эта особенность открывает киберпреступникам возможность для атаки на сайты и веб-приложения, уязвимые к внедрению тегов.
В общем случае атака выглядит следующим образом: злоумышленник внедряет в целевую страницу и оставляет незакрытым тег или атрибут, который позволяет отправить запрос или передать данные стороннему сайту (например, запросить с него изображение или отправить содержимое формы). В случае с изображением при загрузке скомпрометированной страницы браузер отправляет на указанный преступником ресурс запрос, включающий весь код, расположенный между внедренным тегом и закрывающей последовательностью символов, которая до компрометации страницы закрывала другой тег или атрибут. В случае с формой, когда пользователь ее заполнит и отправит данные, страница передаст их на сайт злоумышленника.
Теги, которые используют в атаках с dangling markup
В атаках типа dangling markup злоумышленники могут использовать теги, которые предполагают или допускают обращение к стороннему ресурсу, например:
- <img>, <video> и другие теги с атрибутом src
- <form>
- <script>
Данные, которые крадут с помощью dangling markup
В зависимости от функциональности уязвимого веб-приложения атака с использованием висячей разметки позволяет получить следующие пользовательские данные:
- Текст сообщений (для почты, мессенджеров, соцсетей), логин и пароль, данные банковской карты — все, что пользователь указывает в формах ввода на скомпрометированной странице.
- Сессионные токены CSRF, создаваемые для защиты от межсайтовой подделки запроса.
- Значения nonce, используемые политиками безопасности для определения элементов, включенных в список разрешенных, например скрипта из конкретного источника, который имеет право выполняться на странице, где в остальном запрещены сторонние скрипты. Атака на nonce позволяет злоумышленникам выполнить на такой странице свой скрипт.
- Данные, которые с помощью атрибута iframedoc подтягиваются с устройства пользователя.
Защита от dangling markup
Снизить вероятность атаки с использованием висячей разметки можно, принимая следующие меры:
- Проверка используемых веб-приложений на уязвимость к инъекции кода, в том числе HTML-тегов.
- Проверка введенных пользователями данных и их санитизация, то есть очистка от небезопасных и неправильных символов.
- Введение политик безопасности контента (CSP).
- Использование браузеров с защитой от dangling markup.