27 мая 2026 года разработчики популярного PHP-фреймворка Symfony опубликовали сразу шесть бюллетеней безопасности, закрывающих критические и опасные уязвимости. Проблемы затрагивают версии с 5.4 по 8.0 и требуют срочного обновления до патченных сборок: 5.4.53, 6.4.41, 7.4.13 и 8.0.13. Владельцам сайтов и приложений на Symfony рекомендуется как можно скорее применить исправления, так как некоторые из уязвимостей позволяют атакующему получить доступ к защищённым зонам без аутентификации или подделать запросы к внутренним ресурсам.
Детали уязвимостей
Самой опасной из обнаруженных проблем стала уязвимость в компоненте безопасности Symfony, получившая идентификатор CVE-2026-48489. Она получила высокий уровень серьёзности. Проблема кроется в механизме обработки неудачных попыток входа. Когда для формы аутентификации включён параметр "failure_forward: true", система после ошибки логина перенаправляет запрос в служебный субзапрос на путь, указанный в параметре "_failure_path". Злоумышленник может передать в этом параметре любой путь, например "/admin/секретный_отчёт". Поскольку Symfony считает все субзапросы внутренними и доверенными, он не проверяет права доступа к конечному маршруту. В результате неаутентифицированный пользователь получает ответ защищённой страницы. Это особенно опасно для административных панелей, где, например, открытые GET-маршруты (экспорт данных, просмотр отчётов) становятся доступны любому, кто подделал POST-запрос к странице входа.
Вторая критическая уязвимость относится к классу SSRF (подделка запросов на стороне сервера, CVE-2026-48736). В Symfony есть декоратор "NoPrivateNetworkHttpClient", который должен блокировать любые HTTP-запросы к частным IP-адресам. Разработчики внесли в чёрный список подсети RFC1918, loopback, link-local и IPv4-mapped IPv6, но забыли про IPv6-формы перехода, которые могут содержать в себе частный IPv4-адрес. Речь идёт о префиксах 6to4 (2002::/16), Teredo (2001::/32), NAT64 (64:ff9b::/96) и совместимых с IPv4 адресах (::/96). Так, если злоумышленник укажет URL вида "http://[2002:7f00:1::]/", он попадёт на 127.0.0.1 (loopback), но функция проверки не распознает подвох. В реальных условиях такая атака работает, если сетевой маршрутизатор поддерживает эти технологии. Тем не менее, формальное обещание безопасности нарушено, и пакет может достичь цели. Разработчики добавили недостающие префиксы в чёрный список, следуя политике браузеров Chromium и Mozilla.
Ещё одна уязвимость средней степени обнаружена в компоненте маршрутизации (CVE-2026-48784). Генератор URL при создании ссылок кодирует точки (.) и двойные точки (..) в сегментах пути для защиты от их последующего удаления при нормализации по стандарту RFC 3986. Однако из-за ошибки в реализации функция "strtr" обрабатывала каждую последовательность точек только один раз. Если в URL были вложенные цепочки вида "../../../", каждая вторая подстрока оставалась неэкранированной. При соблюдении строгих правил разбора URI такой URL может привести к непредусмотренному пути, что особенно опасно, когда параметр маршрута принимает символы "." и "/" (через регулярное выражение ".+"). В таком случае атакующий может заставить ссылку указывать на другой маршрут, чем предполагал разработчик. Патч заменяет поиск на универсальный "preg_replace_callback", который обрабатывает все повторы подряд.
Четвёртая уязвимость затронула компонент интеграции с почтовым сервисом Mailomat (CVE-2026-48747). При приёме вебхуков Symfony проверяет подпись заголовка "X-MOM-Webhook-Signature". Оказалось, что алгоритм HMAC (хеш-функция с ключом) берётся прямо из заголовка запроса. Атакующий может прислать подпись с любым слабым алгоритмом - например, MD4 или MD5, для которых существуют методы существующей подделки. Если злоумышленник способен вычислить такую подпись (при условии, что ему известен ключ или он работает по открытому ключу), он может подделать любой вебхук. Разработчики жёстко зафиксировали алгоритм SHA-256 и требуют, чтобы в заголовке было указано "sha256=<хеш>". Любое другое значение теперь отвергается.
Оставшиеся две уязвимости связаны с HTML-санитайзером Symfony, компонентом для очистки пользовательского ввода от опасных конструкций. Первая из них (CVE-2026-48760) позволяет обойти фильтрацию символов двунаправленного письма (BiDi) и символов пробелов в кодировке Юникод. Санитайзер проверяет URL на наличие необработанных управляющих символов (например, U+202E), но их процентно-кодированные варианты (вроде "%E2%80%AE") проходят проверку и затем декодируются браузером или downstream-потребителями. Также регулярное выражение для пробелов не учитывает модификатор "/u", поэтому не-ASCII пробелы (неразрывный пробел, узкий пробел, разделители строк и т.п.) не отбрасываются. Это позволяет обманывать фильтры фишинга и вставлять визуальные подмены доменных имён. Патч теперь блокирует BiDi-метки и юникодные пробелы как в сыром, так и в декодированном виде.
Вторая проблема санитайзера (CVE-2026-48761) - пропуск атрибутов, содержащих URL, в некоторых HTML-тегах. В список обрабатываемых атрибутов входили "src", "href", "lowsrc", "background", "ping", "action", "formaction", "poster", "cite". Однако атрибуты "data", "codebase", "archive" и "longdesc" в тегах "<object>", "<applet>", "<iframe>" и "<img>" не проходили проверку. Если разработчик разрешал использование этих элементов (что не является настройкой по умолчанию), злоумышленник мог вставить "data="javascript:alert(1)"" без очистки. Кроме того, мета-тег "<meta http-equiv="refresh">" содержит URL внутри атрибута "content" среди других параметров, и он тоже не проверялся. Патч добавляет фильтрацию для всех пропущенных атрибутов и вводит специальный обработчик для мета-тега.
В целом ситуация серьёзная: три из шести уязвимостей затрагивают компоненты безопасности и аутентификации, а две - санитайзер, что может привести к появлению XSS (межсайтового скриптинга) на сайтах, использующих кастомизированную настройку фильтрации. Разработчикам следует немедленно обновиться до указанных версий и проверить конфигурации: отключить "failure_forward", если он не нужен, и пересмотреть списки разрешённых элементов в HTML-санитайзере. Обновление закрывает все известные векторы атак, однако специалистам стоит также отслеживать возможные побочные эффекты после применения исправлений.
Ссылки
- https://github.com/symfony/symfony/security/advisories/GHSA-38cx-cq6f-5755
- https://github.com/symfony/symfony/security/advisories/GHSA-6h46-9jf5-q59x
- https://github.com/symfony/symfony/security/advisories/GHSA-h5x3-xfc9-m39h
- https://github.com/symfony/symfony/security/advisories/GHSA-rrj9-5q2j-4gvr
- https://github.com/symfony/symfony/security/advisories/GHSA-v3wm-qf9p-c549
- https://github.com/symfony/symfony/security/advisories/GHSA-x5qj-865h-mgvm