PortSwigger показал рабочий пример атаки.
Исследователь из PortSwigger Гарет Хейс представил новый способ красть данные из HTML-атрибутов прямо через inline-CSS, без селекторов и подключения внешних таблиц стилей. Открытие стало возможным благодаря поддержке условных выражений if() в браузерах на базе Chromium.
Техника опирается на комбинацию функций attr() и style(), которая позволяет проверять значение атрибута и в зависимости от результата инициировать фоновый запрос на выбранный домен. Таким образом можно «перебрать» возможные значения и вытянуть несложные данные, например идентификатор пользователя или его имя, даже если внедрение JavaScript заблокировано.
Метод развивает более ранние наработки Slonser, где для кражи информации требовалась загрузка внешней таблицы стилей. Теперь всё выполняется одной строкой в атрибуте style, а сравнение работает только с двойными кавычками. Позднее выяснилось, что для запроса вовсе не нужен url() — достаточно строки, что ещё больше упрощает CSS-атаку.
Для автоматизации подбора значений автор использовал кастомное действие в Burp Suite , генерирующее готовый HTML-код. По словам Хейса, приём пока работает только в Chromium-браузерах.
Эксперты предупреждают: появление условных выражений в CSS делает язык гораздо более гибким, но одновременно расширяет поверхность атак при CSS-инъекциях. Чтобы защититься, разработчикам рекомендуется запрещать непроверенные inline-стили, фильтровать атрибут style, использовать строгий CSP и тщательно валидировать значения data-атрибутов.
Полное исследование и примеры опубликованы в блоге PortSwigger Research.