CSS в ИБ

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

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

  1. Встроенный или внешний CSS может быть модифицирован для включения вредоносного кода. Это происходит, когда разработчики не фильтруют пользовательский ввод, который попадает в стили. В этом сценарии злоумышленники могут попытаться внедрить в CSS свои директивы.

  2. Когда веб-сайты позволяют загрузку CSS-файлов с внешних источников, это может быть использовано для запуска атак на уровне протокола, таких как DNS-ребайндинг или атаки по промежуточным звеньям.

  3. Clickjacking: CSS может использовать для маскировки вредоносных элементов интерфейса, делая их невидимыми или замаскированными.

  4. Самый распространенный пример — это фишинг. Злоумышленники просто копируют известные ресурсы, повышая вероятность обмана и кражи конфиденциальной информации.

  5. В CSS есть возможность подключения шрифтов или других ресурсов с использованием URL. Потенциально это можно использовать для загрузки вредоносного контента или отслеживания пользователей.

Что можно сделать, чтобы обезопасить веб-приложение в контексте CSS?

  1. Включить CSP в заголовки ответов сервера. Это ограничит ресурсы (скрипты, стили, изображения и т. д.), которые могут загружаться на страницу. По сути это главный шаг против инъекций.

  2. Фильтровать и санировать пользовательский ввод. Это тоже поможет предотвратить внедрение вредоносных данных и CSS-инъекции.

  3. Использовать методологии BEM (Блок, Элемент, Модификатор) и CSS модули, компонентные подходы (например, в React с styled-components или Emotion). Это поможет избежать переопределения стилей и обеспечить модульность и изолированность.

  4. Сократить использование inline-стилей, так как это потенциальный вектор для атак.

  5. Использовать HTTPS, чтобы исключить возможность для MITM.

  6. Проверять файлы CSS, загружаемые с серверов или CDN. Это поможет заметить подмену содержимого или добавление вредоносного кода.

  7. Обновить браузеры и инструменты. Ну это база.

  8. Ограничить доступ на сервере таким образом, чтобы только авторизованные пользователи могли загружать или изменять CSS и другие ресурсы сайта.

Last updated