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.

Публикации на схожие темы