Безопасность и скорость · обновлено 06.07.2026

Symfony UX Icons: как безопасно закрыть XSS в SVG-иконках без простоя

19 июня 2026 года Symfony сообщил о CVE-2026-55877 в UX Icons: часть версий могла небезопасно встраивать SVG. Разбираем, что проверить в рабочем Symfony-проекте и как обновиться без остановки заявок.

19 июня 2026 года Symfony опубликовал security advisory по CVE-2026-55877 в пакете Symfony UX Icons. Риск связан не с тем, что SVG-иконки сами по себе плохи, а с тем, как они попадают в HTML-страницу: если источник SVG не проверен и библиотека встраивает разметку без достаточной очистки, иконка может превратиться в XSS-вектор.

Для владельца сайта это не повод срочно выключать все иконки или менять фреймворк. Но это хороший сигнал: если проект на Symfony использует UX-пакеты, Composer-зависимости и сторонние SVG-наборы, обновления безопасности должны быть регулярной технической задачей, а не случайной командой в продакшене.

Что произошло

В официальном advisory Symfony указал, что уязвимы Symfony UX Icons в ветках 2.x и 3.x до исправленных релизов 2.36.1 и 3.2.0. Проблема затрагивала сценарии, где SVG-иконка встраивается в страницу как HTML. Если в SVG попадала опасная разметка или обработчики событий, браузер мог выполнить нежелательный код в контексте сайта.

Отдельно важно, что риск зависит от реального использования пакета. Один проект может иметь пакет в lock-файле, но не выводить иконки из внешних источников. Другой может активно использовать локальные SVG-наборы, темы, админские загрузки или удаленный источник иконок. Поэтому корректная реакция начинается не с паники, а с инвентаризации.

Публичные источники для проверки: официальный advisory Symfony по CVE-2026-55877, база GitLab Advisory Database по пакету symfony/ux-icons и общая лента Symfony Security Advisories. Их стоит использовать как точку входа, а не как замену аудиту конкретного проекта.

Почему SVG-иконки могут быть опасны

SVG — это не просто картинка. Это XML-разметка, которую браузер умеет отображать как часть документа. В безопасном сценарии SVG содержит только геометрию, цвета и атрибуты, нужные для отрисовки. В небезопасном — внутри могут оказаться скриптовые элементы, обработчики событий, подозрительные ссылки или конструкции, которые не должны попадать на страницу без очистки.

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

Для бизнеса последствия выглядят не как абстрактный CVE, а как проблемы в пользовательском сценарии: подмена интерфейса, выполнение кода в браузере пользователя, риск для сессий, падение доверия к сайту и срочная аварийная работа вместо планового обновления.

Кому нужно проверить проект в первую очередь

Проверка особенно важна, если сайт или сервис:

  • работает на Symfony и использует Symfony UX Icons;
  • выводит SVG через Twig-хелперы или компоненты интерфейса;
  • подключает иконки из сторонних наборов, тем, маркетплейсов или удаленных API;
  • имеет личный кабинет, админку, формы заявок, корзину или оплату;
  • давно не обновлял Composer-зависимости и не запускал аудит пакетов;
  • развивается несколькими подрядчиками без общего регламента обновлений.

Даже если уязвимость имеет средний уровень серьезности, для коммерческого сайта важен контекст. Лендинг без авторизации и закрытая B2B-панель с заявками, договорами и персональными данными — разные уровни риска. Поэтому один и тот же advisory может требовать разной скорости реакции.

Что проверить владельцу сайта

Первый шаг — понять, есть ли пакет в проекте. Обычно это видно по composer.lock, composer show symfony/ux-icons и списку установленных Symfony UX-пакетов. Если доступа к репозиторию нет, попросите подрядчика показать версии зависимостей и дату последнего обновления, а не просто ответить «все нормально».

Второй шаг — проверить, откуда берутся SVG. Надежнее, когда иконки лежат в репозитории, проходят ревью и обновляются вместе с кодом. Слабое место появляется там, где SVG попадает из внешних наборов, пользовательских загрузок, старых тем или временных интеграций.

Третий шаг — посмотреть, где иконки выводятся на страницах. Важно проверить публичные страницы, формы, личный кабинет, административные разделы и письма, если там используется HTML-разметка с иконками. Ошибка в редко открываемой админке тоже может быть критичной, потому что администратор обычно работает с расширенными правами.

Четвертый шаг — сопоставить версии с исправленными релизами. По публичному advisory исправления доступны в Symfony UX Icons 2.36.1 и 3.2.0. Если проект находится ниже этих версий и реально использует пакет, обновление нужно планировать как задачу безопасности.

Как обновляться без простоя

Безопасное обновление не должно начинаться с команды на production-сервере. Нормальный порядок такой:

  1. Зафиксировать текущие версии PHP, Symfony, UX-пакетов, Node-сборки и фронтенд-зависимостей.
  2. Сделать резервную копию базы и артефактов, если проект хранит загруженные SVG или пользовательские темы.
  3. Поднять обновление на тестовом контуре или staging-среде.
  4. Обновить symfony/ux-icons до исправленной ветки, не ломая ограничения остальных пакетов.
  5. Пересобрать фронтенд, очистить кеш Symfony и прогнать smoke-тесты.
  6. Проверить страницы с иконками, формы, авторизацию, личный кабинет, корзину, оплату и административные сценарии.
  7. Подготовить план отката: предыдущий релиз, кеши, миграции, конфиги, очереди и CDN.
  8. Выпустить обновление в спокойное окно и после деплоя проверить логи ошибок.

Такой порядок кажется длинным, но он дешевле аварии. Проблемы после обновления чаще возникают не из-за самого security fix, а из-за накопленного технического долга: старой версии PHP, незафиксированных зависимостей, ручных правок в vendor, отсутствия тестового контура и непонятного процесса деплоя.

Что не стоит делать

Не стоит просто удалять все SVG или менять библиотеку без анализа. Это может сломать интерфейс, админку, сборку фронтенда и визуальные состояния форм.

Не стоит обновлять весь проект «до последнего» за один вечер, если до этого зависимости не трогали годами. В таком режиме security-задача превращается в большой рефакторинг с непредсказуемым сроком.

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

Не стоит считать, что Composer-аудит заменяет ручную проверку. Он помогает найти известные уязвимости, но не отвечает на вопрос, какие источники SVG подключены в вашем проекте и где они реально выводятся.

Как OpenStart подходит к таким задачам

В поддержке Symfony-проектов мы разделяем работу на понятные этапы: инвентаризация зависимостей, оценка риска, тестовое обновление, проверка критичных сценариев, production-деплой и контроль после релиза. Такой подход удобен для владельца сайта: видно, что именно меняется, зачем это нужно и как быстро можно вернуться назад, если проявится несовместимость.

Если проект живой и на нем идут заявки, обновления безопасности лучше включать в регулярный регламент. Тогда команда не спорит каждый раз, кто отвечает за Composer, кто проверяет формы, кто делает backup и кто смотрит логи после выкладки. Есть очередь задач, понятные приоритеты и история изменений.

Отдельная зона внимания — проекты, которые давно развиваются разными подрядчиками. В них часто встречаются старые UX-пакеты, кастомные Twig-расширения, самописные компоненты интерфейса, неочевидные источники SVG и неполный composer.lock. В такой ситуации полезнее начинать с короткого технического аудита, чем сразу покупать часы на обновление.

Практический чек-лист

Попросите техническую команду ответить на несколько вопросов:

  • установлен ли symfony/ux-icons и какая версия указана в composer.lock;
  • есть ли в проекте Symfony UX Live Component, Autocomplete и другие UX-пакеты;
  • откуда берутся SVG-иконки: репозиторий, npm-пакеты, темы, загрузки из админки, удаленный сервис;
  • есть ли тестовая среда, где можно проверить обновление до production;
  • какие страницы и сценарии обязательно проверяются после деплоя;
  • кто отвечает за резервную копию, откат и мониторинг логов;
  • как часто запускаются composer audit, проверка npm-зависимостей и ревизия устаревших пакетов.

Если на часть вопросов нет ответа, это уже результат проверки. Значит, риск не только в одной уязвимости Symfony UX Icons, а в отсутствии процесса поддержки. Сегодня это SVG-иконки, завтра — Twig, API, форма заявки, платежный модуль или интеграция с CRM.

Вывод

CVE-2026-55877 в Symfony UX Icons — хороший пример уязвимости, которую нельзя оценивать только по названию пакета. Для одного сайта она может быть быстро закрыта плановым обновлением, для другого — показать, что в проекте давно не контролируются зависимости, источники фронтенд-ресурсов и сценарии деплоя.

Если ваш Symfony-проект использует UX-пакеты, SVG-иконки, личный кабинет или сложные формы, проверьте версии и источники иконок сейчас. А если нет уверенности в состоянии зависимостей, OpenStart может провести техническую диагностику, подготовить безопасный план обновления и закрыть уязвимости без остановки заявок.

Нужна техническая диагностика?

Проверим скорость, безопасность, CMS, резервные копии и интеграции, а затем дадим понятный план работ.

Заказать диагностику

Еще по теме