Cảnh báo: Lỗ hổng Angular SSR nghiêm trọng rò rỉ dữ liệu

Một lỗ hổng Angular SSR nghiêm trọng đã được phát hiện, có khả năng dẫn đến việc rò rỉ dữ liệu nhạy cảm khi hệ thống xử lý nhiều yêu cầu đồng thời. Lỗ hổng này, được theo dõi dưới mã định danh CVE-2025-59052, phát sinh từ một điều kiện tranh chấp toàn cục (global race condition) trong platform injector, gây ra hiện tượng rò rỉ dữ liệu giữa các yêu cầu (cross-request data leakage).
Phân tích Lỗ hổng CVE-2025-59052 trong Angular SSR
Các tổ chức đang sử dụng các phiên bản Angular bị ảnh hưởng cần cập nhật hệ thống ngay lập tức hoặc triển khai các biện pháp khắc phục được khuyến nghị để ngăn chặn nguy cơ rò rỉ dữ liệu tiềm tàng do lỗ hổng Angular SSR này gây ra.
Cơ chế Lỗi: Điều kiện Tranh chấp Toàn cục trong Angular SSR
Angular’s Server-Side Rendering (SSR) sử dụng một container tiêm phụ thuộc (dependency injection container) gọi là platform injector để lưu trữ dữ liệu cụ thể cho từng yêu cầu trong quá trình render. Trong quá khứ, container này được định nghĩa là một biến toàn cục (module-scoped global variable).
Khi hai hoặc nhiều yêu cầu render xảy ra đồng thời, chúng có thể chia sẻ hoặc ghi đè lên trạng thái toàn cục của injector này. Đây chính là gốc rễ của điều kiện tranh chấp gây ra lỗ hổng Angular SSR. Hệ quả là, thông tin dành cho phiên làm việc của một người dùng, ví dụ như mã thông báo xác thực (authentication tokens), cài đặt người dùng hoặc kết quả truy vấn cơ sở dữ liệu, có thể xuất hiện trong phản hồi của người dùng khác.
Kịch bản Khai thác Lỗ hổng
Kẻ tấn công có quyền truy cập mạng có thể khai thác lỗ hổng này bằng cách gửi các yêu cầu SSR lặp đi lặp lại. Mục tiêu là kiểm tra các trang được render hoặc các tiêu đề phản hồi, tìm kiếm dữ liệu thuộc về các phiên làm việc khác. Điều này cho phép kẻ tấn công thu thập thông tin nhạy cảm của người dùng khác.
Theo báo cáo từ GitHub Security Advisory GHSA-68×2-mx4q-78m7, lỗ hổng CVE này không yêu cầu đặc quyền đặc biệt hoặc tương tác từ người dùng. Điều này khiến nó trở nên dễ khai thác và đặc biệt nguy hiểm đối với các ứng dụng Angular SSR có lưu lượng truy cập cao.
Ảnh hưởng và Các Thay đổi API Sau Bản Vá
Tác động của Rò rỉ Dữ liệu
Việc rò rỉ dữ liệu giữa các yêu cầu có thể dẫn đến hậu quả nghiêm trọng. Dữ liệu nhạy cảm như thông tin định danh cá nhân (PII), cấu hình cá nhân hoặc dữ liệu kinh doanh quan trọng có thể bị lộ. Các ứng dụng web sử dụng Angular SSR cần đặc biệt lưu ý đến rủi ro này, vì chúng có thể vô tình làm lộ thông tin cá nhân của người dùng, vi phạm các quy định bảo mật dữ liệu và gây ra các vấn đề pháp lý.
Cập nhật API của Angular
Một số API của Angular đã dựa vào hành vi trước đây của platform injector và yêu cầu thay đổi trong môi trường máy chủ. Các bản vá của Angular giới thiệu những thay đổi đột phá này chỉ cho mã nguồn phía máy chủ, nhằm khắc phục triệt để lỗ hổng Angular SSR.
- Hàm
bootstrapApplicationđược sử dụng bởi các ứng dụng độc lập (standalone applications) hiện yêu cầu một đối sốBootstrapContexttường minh. Điều này đảm bảo rằng injector chính xác được sử dụng cho mỗi yêu cầu, ngăn chặn tình trạng chia sẻ trạng thái không mong muốn. - Hàm
getPlatformkhông còn trả về thể hiện nền tảng được tạo cuối cùng trên máy chủ mà luôn trả vềnullđể tránh nhầm lẫn. - Hàm
destroyPlatformđã được chuyển đổi thành một no-op (no-operation) khi được gọi trong quá trình SSR, để đảm bảo tính nhất quán.
Đối với bootstrapApplication, nhà phát triển cần thêm đối số mới để phù hợp với bản cập nhật:
bootstrapApplication(AppComponent, {
providers: [
{ provide: ApplicationConfig, useValue: appConfig }
],
// Đảm bảo BootstrapContext rõ ràng cho SSR
bootstrapContext: new ServerBootstrapContext(platformInjector)
});
Biện pháp Khắc phục và Cập nhật Bản vá để Bảo mật Angular SSR
Để bảo vệ các triển khai lỗ hổng Angular SSR khỏi lỗ hổng CVE có mức độ nghiêm trọng cao này và duy trì quyền riêng tư dữ liệu người dùng, việc áp dụng các bản cập nhật chính thức hoặc tuân thủ các biện pháp khắc phục được khuyến nghị là điều cần thiết.
Cập nhật Khuyến nghị
Vấn đề này đã được khắc phục trong tất cả các dòng phát hành Angular đang hoạt động, bao gồm cả các phiên bản tiền phát hành (prerelease versions). Nhà phát triển nên nâng cấp lên các phiên bản sau:
@angular/platform-server: 18.2.14, 19.2.15, 20.3.0, hoặc 21.0.0-next.3.- Nâng cấp các gói tương ứng như
@angular/ssrvà@nguniversal/commonnếu áp dụng.
Angular cung cấp các schematics tự động để áp dụng các điều chỉnh mã này thông qua lệnh ng update cho các phiên bản 18, 19 và 20, giúp quá trình vá lỗ hổng Angular SSR trở nên dễ dàng hơn.
Biện pháp Giảm thiểu Tạm thời
Trong khi chờ đợi các bản vá được triển khai hoàn chỉnh, các nhóm phát triển có thể áp dụng các biện pháp giảm thiểu sau để giảm thiểu rủi ro rò rỉ dữ liệu do trạng thái của platform injector:
- Vô hiệu hóa SSR bằng cách sử dụng định tuyến máy chủ (server routing) hoặc các tùy chọn builder.
- Loại bỏ hành vi bất đồng bộ từ các hàm
bootstraptùy chỉnh. - Loại bỏ các cuộc gọi đến
getPlatform(). - Buộc tắt chế độ JIT (Just-In-Time) trong các bản dựng máy chủ (server builds).
Những biện pháp này giúp giảm thiểu nguy cơ rò rỉ trạng thái của platform injector giữa các yêu cầu, tăng cường an toàn thông tin cho ứng dụng của bạn. Lỗ hổng Angular SSR nhấn mạnh tầm quan trọng của việc cô lập dữ liệu theo từng yêu cầu trong các framework phía máy chủ.









