# Lỗ hổng XSS nghiêm trọng trong Angular Ivy renderer

Nhóm Angular vừa phát hành bản vá cho một lỗ hổng bảo mật nghiêm trọng mới được phát hiện trong Angular framework, ảnh hưởng đến cơ chế quốc tế hóa (i18n) của framework này và có khả năng tác động đến hàng nghìn ứng dụng web trên toàn cầu.

### Thông tin chi tiết

*   *Định danh lỗ hổng:* [**CVE-2026-32635**](https://www.cve.org/CVERecord?id=CVE-2026-32635)
    
*   *Điểm CVSS (4.0):* **8.6**
    
*   *Mức độ nghiêm trọng:* HIGH - Nghiêm trọng cao
    
*   *Mô tả:* Lỗ hổng Cross-Site Scripting (XSS) được xác định trong Angular runtime và compiler, xảy ra khi ứng dụng sử dụng một thuộc tính HTML nhạy cảm về bảo mật (ví dụ `href` trên thẻ anchor) kết hợp với khả năng quốc tế hóa thuộc tính `i18n` của Angular. Việc bật quốc tế hóa cho thuộc tính nhạy cảm bằng cách thêm `i18n-<attribute>` sẽ bỏ qua cơ chế sanitization (làm sạch dữ liệu) tích hợp của Angular, khi kết hợp với data binding từ dữ liệu do người dùng tạo ra không đáng tin cậy, cho phép kẻ tấn công chèn mã độc hại.  
    Mặc dù lỗ hổng không yêu cầu xác thực, tuy nhiên cần có sự tương tác của người dùng, chẳng hạn như truy cập vào một trang web độc hại chứa chức năng khai thác của kẻ tấn công.
    
*   *Phiên bản bị ảnh hưởng:* **@angular/core**, **@angular/compiler** các phiên bản Angular từ `17.0.0-next.0` đến trước các phiên bản: `22.0.0-next.3`, `21.2.4, 20.3.18` và `19.2.20`.
    

Angular là một framework phát triển web phổ biến, được trang bị cơ chế DomSanitizer — lớp bảo vệ tự động làm sạch dữ liệu đầu vào trước khi render lên giao diện, nhằm ngăn chặn các script độc hại thực thi trong trình duyệt người dùng. Ví dụ, khi người dùng nhập một đường dẫn `javascript:alert(1)` vào một trường `href`, DomSanitizer sẽ chặn và vô hiệu hóa giá trị này trước khi nó được hiển thị.

![](https://cdn.hashnode.com/uploads/covers/669e7a2f2c109ecd663148bd/b8042844-3154-4931-bdde-a232691f42c8.png align="center")

Angular cũng hỗ trợ tính năng quốc tế hóa (i18n) — cho phép ứng dụng hiển thị nội dung bằng nhiều ngôn ngữ khác nhau. Để đánh dấu một thuộc tính cần dịch, developer thêm tiền tố `i18n-` vào trước tên thuộc tính, ví dụ `i18n-href`.

**CVE-2026-32635** phát sinh chính xác tại điểm giao giữa hai tính năng này: khi một thuộc tính nhạy cảm được đánh dấu quốc tế hóa bằng tiền tố `i18n-`, Angular compiler sẽ xử lý thuộc tính đó thông qua pipeline i18n thay vì pipeline thông thường — và codepath này hoàn toàn bỏ qua bước sanitization. Kết quả là: dữ liệu đầu vào không đáng tin cậy được gắn vào một thuộc tính nhạy cảm có thể thực thi JavaScript tùy ý trong trình duyệt của nạn nhân.

Ví dụ minh họa: một template Angular được định nghĩa như sau:

```html
<a [href]="userUrl" i18n-href>Nhấn vào đây</a>
```

Nếu `userUrl` chứa giá trị `javascript:alert(document.domain)` do người dùng kiểm soát, Angular sẽ render thành `<a href="javascript:alert(document.domain)">Nhấn vào đây</a>`. Khi người dùng click vào liên kết, mã độc lập tức được thực thi trong ngữ cảnh của ứng dụng.

Khi bị khai thác thành công, lỗ hổng có thể dẫn đến: chiếm đoạt phiên đăng nhập (session hijacking), đánh cắp dữ liệu nhạy cảm, thực hiện hành động trái phép thay mặt người dùng, và đánh cắp thông tin xác thực từ LocalStorage, IndexedDB hoặc cookie.

### Khuyến nghị & Khắc phục

Đội ngũ **FPT Threat Intelligence** khuyến nghị các tổ chức và nhà phát triển đang sử dụng Angular cần kiểm tra ngay phiên bản hiện tại và thực hiện cập nhật lên phiên bản đã được vá. Đối với các hệ thống không thể cập nhật ngay lập tức, cần áp dụng các biện pháp giảm thiểu tạm thời theo hướng dẫn bên dưới.

| Phiên bản Angular | Trạng thái | Hành động cần thực hiện |
| --- | --- | --- |
| 19.x, 20.x, 21.x, 22.x-next | Đã có bản vá | Cập nhật lên phiên bản 19.2.20 / 20.3.18 / 21.2.4 / 22.0.0-next.3 tương ứng |
| 17.x, 18.x | Không có bản vá (End-of-Life) | Áp dụng biện pháp giảm thiểu thủ công hoặc nâng cấp lên phiên bản được hỗ trợ |

**Hướng dẫn cập nhật (đối với phiên bản có bản vá):**

*   ***Bước 1:*** Kiểm tra phiên bản Angular hiện tại của dự án:
    

```bash
grep '"@angular/core"' package.json
```

*   ***Bước 2:*** Cập nhật lên phiên bản đã được vá tương ứng:
    

```bash
npm install @angular/core@19.2.20 --save

# hoặc

npm install @angular/core@20.3.18 --save

# hoặc

npm install @angular/core@21.2.4 --save
```

*   ***Bước 3:*** Xác minh phiên bản sau khi cập nhật:
    

```plaintext
npm list @angular/core
```

**Biện pháp giảm thiểu tạm thời (đối với phiên bản 17.x và 18.x không có bản vá):**

*   Rà soát toàn bộ codebase, tìm kiếm các thuộc tính nhạy cảm (`href`, `src`, `action`, `formaction`, `data`, `background`) đang đồng thời sử dụng cả data binding và tiền tố `i18n-`.
    
*   Gỡ bỏ tiền tố `i18n-` khỏi các thuộc tính nhạy cảm nếu có thể, hoặc tách riêng nội dung cần dịch ra khỏi các thuộc tính này.
    
*   Sử dụng `DomSanitizer.bypassSecurityTrustUrl()` một cách có kiểm soát, kết hợp với whitelist đầu vào nghiêm ngặt.
    
*   Triển khai Content Security Policy (CSP) nghiêm ngặt, cấm thực thi `unsafe-inline` và chặn scheme `javascript:` để vô hiệu hóa vector tấn công chính.
    
*   Bật Trusted Types trong cấu hình ứng dụng để buộc trình duyệt từ chối các phép gán chuỗi nguy hiểm vào DOM sink.
    

### Tham khảo

*   [CVE-2026-32635](https://nvd.nist.gov/vuln/detail/CVE-2026-32635)
    
*   GitHub Security Advisory: [https://github.com/angular/angular/security/advisories/GHSA-g93w-mfhg-p222](https://github.com/angular/angular/security/advisories/GHSA-g93w-mfhg-p222)
    
*   Angular Pull Request Fix: [https://github.com/angular/angular/pull/67541](https://github.com/angular/angular/pull/67541)
