В одном из самых популярных в мире фреймворков для веб-разработки Angular обнаружена опасная уязвимость типа «межсайтовый скриптинг» (Cross-Site Scripting, XSS). Проблема, получившая идентификатор CVE-2026-32635 и оценку высокой степени серьёзности, затрагивает механизмы интернационализации (i18n) и позволяет обходить встроенные системы защиты. Эксплуатация этой уязвимости ставит под угрозу миллионы веб-приложений по всему миру, открывая путь к краже сессий пользователей, утечке данных и несанкционированным действиям. Между тем, разработчики уже выпустили критические обновления безопасности.
Детали уязвимости CVE-2026-32635
Суть проблемы кроется в ядре и компиляторе Angular. В обычных условиях фреймворк автоматически обрабатывает (санитизирует) пользовательский ввод, привязываемый к HTML-атрибутам, что предотвращает выполнение произвольного кода в браузере жертвы. Однако, как выяснили исследователи, при использовании функции интернационализации для определённых атрибутов этот защитный механизм полностью отключается. Конкретно уязвимость срабатывает, когда разработчик добавляет префикс "i18n-" к чувствительному атрибуту, например, "href" в ссылке или "src" в теге изображения, и затем привязывает к этому атрибуту данные из ненадёжного источника.
Таким образом, для успешной атаки необходимо сочетание двух условий: использование интернационализированного атрибута и подстановка в него непроверенных пользовательских данных. К подтверждённо уязвимым атрибутам, помимо уже упомянутых "href" и "src", относятся "action", "background", "data" и "formaction". Низкая сложность эксплуатации и возможность атаки через сеть обусловили высокий рейтинг опасности CVE-2026-32635. Если злоумышленнику удаётся внедрить свой скрипт, он получает возможность действовать в контексте домена уязвимого приложения.
Последствия такой атаки могут быть крайне серьёзными. Во-первых, это перехват сессии: внедрённый скрипт может незаметно похитить файлы cookies и токены аутентификации, что ведёт к полному захвату учётной записи пользователя. Во-вторых, возможна утечка конфиденциальных данных, поскольку скрипт способен собирать вводимую информацию, включая пароли или платёжные реквизиты, и отправлять её на контролируемый злоумышленником сервер. Кроме того, атакующие могут манипулировать интерфейсом приложения, заставляя его выполнять действия от имени ничего не подозревающей жертвы, например, осуществлять переводы средств или менять настройки безопасности.
Уязвимость затрагивает пакеты "@angular/compiler" и "@angular/core" в нескольких основных ветках разработки. Под угрозой находятся приложения, использующие версии фреймворка от 17.0.0 до 22.0.0-next.2 включительно. Команда Angular оперативно отреагировала на угрозу и выпустила патчи, устраняющие опасный байпас. Разработчикам настоятельно рекомендуется обновить свои проекты до защищённых версий: 22.0.0-next.3, 21.2.4, 20.3.18 или 19.2.20. Однако стоит отметить, что на момент публикации новости версии 17 и 18 основной ветки остаются без официальных исправлений. Организациям, которые по каким-либо причинам используют эти релизы, необходимо срочно применять обходные меры для защиты своих сред.
Для команд, которые не могут немедленно установить официальные обновления, существует несколько эффективных стратегий смягчения рисков. Ключевая рекомендация - полностью исключить привязку данных из ненадёжных источников к уязвимым атрибутам. Это означает, что значения для атрибутов вроде "href" или "src" не должны формироваться на основе пользовательского ввода, ответов внешних API или параметров URL. Если же использование непроверенных данных неизбежно, необходимо убедиться, что соответствующий атрибут не помечен для интернационализации, то есть не содержит префикса "i18n-". Кроме того, можно принудительно применить ручную санитизацию, пропуская все неподтверждённые данные через встроенную утилиту Angular "DomSanitizer" перед их отображением в интерфейсе.
Обнаружение такой фундаментальной уязвимости в столь распространённом инструменте, как Angular, служит важным напоминанием для всего сообщества разработчиков. Оно подчёркивает, что даже в зрелых и надёжных фреймворках могут обнаруживаться тонкие и опасные изъяны, особенно на стыке сложных функций, таких как интернационализация и безопасная обработка данных. Для специалистов по кибербезопасности и DevOps-инженеров этот инцидент должен стать триггером для проведения внеочередного аудита используемых версий фреймворков и библиотек в своих проектах. Своевременное обновление зависимостей остаётся одной из самых эффективных практик защиты, однако в её отсутствие критически важно понимать логику работы приложения и иметь чёткий план по применению временных мер, которые могут заблокировать вектор атаки до момента получения официального исправления.
Ссылки
- https://www.cve.org/CVERecord?id=CVE-2026-32635
- https://github.com/angular/angular/security/advisories/GHSA-g93w-mfhg-p222
- https://github.com/angular/angular/pull/67541
- https://github.com/angular/angular/pull/67561