Команда Angular выпустила критически важные обновления безопасности для устранения уязвимости высокой степени риска в компиляторе шаблонов Angular. Проблема, получившая идентификатор CVE-2025-66412, позволяет злоумышленникам обходить встроенные механизмы защиты и выполнять вредоносный код (malicious code) в браузере пользователя. Эксперты классифицируют эту уязвимость как хранимый межсайтовый скриптинг (Stored Cross-Site Scripting, XSS). Её корень кроется в неполной схеме безопасности внутри компилятора Angular.
Детали уязвимости
По умолчанию Angular автоматически «санирует» (sanitizes) ненадёжные данные, чтобы предотвратить внедрение злоумышленниками скриптов. Однако новый недостаток обнажил слепое пятно в обработке фреймворком определённых атрибутов анимации SVG (масштабируемая векторная графика) и MathML. Уязвимость получила высокий балл CVSS 8.5.
Механизм атаки связан с элементами анимации SVG, такими как "<animate>" или "<set>". Эти элементы используют атрибут "attributeName" для определения свойства изображения, которое должно анимироваться. Проблема существовала потому, что компилятор некорректно проверял это поле "attributeName". Злоумышленник может воспользоваться этим, привязав "attributeName" к чувствительному полю, например, «href» - стандартному атрибуту ссылки. После того как анимация нацеливается на атрибут «href», атакующий может внедрить JavaScript URL в значение анимации. Поскольку компилятор не распознаёт эту конкретную комбинацию как опасную, он пропускает обычную процедуру санизации.
Когда пользователь взаимодействует со скомпрометированным элементом, например, кликает по нему, вредоносный JavaScript выполняется. Следовательно, успешная эксплуатация этой уязвимости даёт злоумышленникам полный контроль в контексте сессии жертвы. Последствия могут быть серьёзными. Атакующие могут похитить аутентификационные токены и файлы cookie, что фактически блокирует пользователей в их учётных записях. Конфиденциальные данные, отображаемые на странице, могут быть перехвачены и отправлены на внешние серверы. Кроме того, скрипт может выполнять действия на веб-сайте от имени ничего не подозревающего пользователя.
Уязвимость затрагивает несколько основных версий пакета "@angular/compiler". Команда Angular оперативно отреагировала, выпустив исправления для версий 19, 20 и 21. Примечательно, что для версий 18 и старше в рекомендациях указано «none» для исправленных версий. Это означает, что пользователям на этих устаревших ветках строго необходимо выполнить обновление. Разработчикам настоятельно рекомендуется немедленно обновиться до последних исправленных версий: v19.2.17, v20.3.15 или v21.0.2.
Для команд, которые не могут мгновенно выполнить обновление, требуются строгие обходные решения. Необходимо гарантировать, что ненадёжные данные из API или баз данных никогда не привязываются к атрибутам анимации SVG. Дополнительно, реализация строгой политики безопасности контента (Content Security Policy, CSP), которая блокирует JavaScript URL, может эффективно нейтрализовать вектор атаки даже при наличии уязвимости в коде. Таким образом, своевременное применение патчей остаётся самым надёжным способом защиты.
Ссылки
- https://www.cve.org/CVERecord?id=CVE-2025-66412
- https://github.com/angular/angular/security/advisories/GHSA-v4hv-rgfq-gp49
- https://github.com/angular/angular/commit/1c6b0704fb63d051fab8acff84d076abfbc4893a