در نسخههای خاصی از Angular SSR، یک آسیبپذیری امنیتی کشف شده که میتواند باعث نشت داده بین درخواستهای همزمان شود. این مشکل به دلیل استفاده از یک متغیر سراسری (global) برای نگهداری وضعیت تزریق وابستگیها (Dependency Injection) در سمت سرور رخ میدهد.
Angular برای نگهداری وضعیت مربوط به هر درخواست در SSR از یک container به نام platform injector استفاده میکند. این container بهصورت یک متغیر سراسری در سطح ماژول جاوااسکریپت تعریف شده بود. در شرایطی که چند درخواست بهطور همزمان پردازش شوند، این متغیر میتواند به اشتباه بین درخواستها به اشتراک گذاشته شود یا بازنویسی شود. نتیجهی این رفتار، ارسال دادههای مربوط به یک درخواست در پاسخ به درخواست دیگر است—که میتواند شامل اطلاعات حساس یا توکنها باشد.
ماژولهای زیر تحت تأثیر قرار گرفتهاند:
@angular/platform-server: نسخههای 16.0.0 تا قبل از 18.2.14، 19.0.0 تا قبل از 19.2.15، 20.0.0 تا قبل از 20.3.0، و 21.0.0 تا قبل از 21.0.0-next.3
@angular/ssr: نسخههای مشابه با بالا
@nguniversal/common: نسخههای 16.0.0 تا 16.2.0
Angular تغییراتی در APIهای SSR اعمال کرده تا از بروز این مشکل جلوگیری شود:
تابع bootstrapApplication اکنون نیاز به آرگومان جدیدی به نام BootstrapContext دارد.
توابع getPlatform و destroyPlatform در محیط سرور دیگر رفتار قبلی را ندارند و بهصورت امن بازنویسی شدهاند.
برای پروژههایی که از CommonEngine استفاده میکنند، آرگومان context به تنظیمات bootstrap اضافه شده است.
برای اعمال اصلاحات، میتوان از دستور ng update استفاده کرد. بهعنوان مثال:
ng update @angular/cli @angular/core
یا برای نسخههای خاص:
ng update @angular/core@19 --name add-bootstrap-context-to-server-main
غیرفعالسازی SSR در مسیرهای سرور یا تنظیمات builder
حذف رفتارهای ناهمگام در توابع bootstrap سفارشی
عدم استفاده از getPlatform() در کد برنامه
اطمینان از اینکه ngJitMode در ساخت سرور برابر false باشد
این آسیبپذیری با امتیاز 7.1 از 10 در سیستم CVSS طبقهبندی شده و در دستهی «شدید» قرار میگیرد.