1. Tổng quan
CVE-2025-55182, còn được gọi là React2Shell (liên quan đến CVE-2025-66478 trên Next.js), là lỗ hổng thực thi mã từ xa (RCE) không cần xác thực, ảnh hưởng đến cơ chế React Server Components (RSC) — nền tảng cho nhiều framework React 19 như Next.js, và các bundler/framework liên quan. Lỗ hổng được Meta và Vercel công bố chính thức vào ngày 03/12/2025, với điểm CVSS tuyệt đối 10.0/10.
Theo các báo cáo từ Datadog, Microsoft và Trend Micro, ngay sau khi thông tin được công bố, các nhóm tấn công đã quét và khai thác hàng loạt máy chủ trên Internet — chủ yếu để cài coin miner, nhưng cũng ghi nhận các hoạt động liên quan đến nhóm APT (UNC5174, các nhóm có liên hệ Trung Quốc/Triều Tiên) và ransomware.
2. Phạm vi ảnh hưởng
| Thành phần | Phiên bản bị ảnh hưởng | Phiên bản đã vá |
|---|---|---|
| React (react-server) | 19.0, 19.1.0, 19.1.1, 19.2.0 | 19.0.1, 19.1.2, 19.2.1 |
| Next.js 13.x | 13.3.x – 13.5.x | Nâng lên 14.2.35+ |
| Next.js 14.x / 15.x / 16.x | Các bản dùng RSC bị ảnh hưởng | 15.0.5+, 15.1.9+, 15.2.6+, 15.3.6+, 15.4.8+, 15.5.7+, 16.0.7+ |
Ghi chú: danh sách framework liên quan còn bao gồm các bundler/runtime sử dụng RSC khác
(Waku, Parcel RSC, react-server-dom-webpack…). Nếu bạn quản lý nhiều dự án Next.js/React 19,
nên kiểm tra toàn bộ package-lock.json / pnpm-lock.yaml để rà soát phiên bản.
3. Cơ chế lỗi (Root Cause)
React Server Components sử dụng một giao thức nội bộ gọi là RSC “Flight” protocol để truyền dữ liệu (props, state, kết quả Server Function) giữa client và server dưới dạng một luồng đối tượng được serialize. Khi client gọi một Server Action / Server Function, request POST gửi lên server sẽ chứa payload Flight được serialize, và server sẽ deserialize payload đó để khôi phục lại tham số gọi hàm.
Vấn đề nằm ở chỗ: cơ chế deserialize này tin tưởng dữ liệu đầu vào ở mức “mặc định” (default trust giữa các thành phần RSC) mà không kiểm soát chặt loại đối tượng được khôi phục. Bằng cách tạo một payload Flight đặc biệt, kẻ tấn công có thể:
- Gây prototype pollution trên object runtime phía server.
- Chèn cấu trúc dữ liệu khiến quá trình deserialize thực thi một đoạn JavaScript do attacker kiểm soát.
- Đoạn JS này chạy trực tiếp trong tiến trình Node.js của server (không phải sandbox) → RCE hoàn chỉnh.
4. Luồng khai thác (PoC ở mức khái niệm)
Xác định endpoint RSC
Kẻ tấn công rà quét các endpoint có gọi POST kèm header
Next-Action hoặc RSC: 1 — đặc trưng của Server Actions
trong Next.js App Router. Ngay cả app được tạo bằng create-next-app
với template mặc định cũng có endpoint này.
Gửi payload Flight độc hại
Một request POST được gửi tới endpoint Server Action, trong đó phần body chứa dữ liệu được serialize theo định dạng RSC Flight, đã được chỉnh sửa để khi server deserialize sẽ tạo ra một đối tượng “nguy hiểm” (gây prototype pollution hoặc trỏ tới một hàm thực thi mã).
Server deserialize và thực thi
Khi server xử lý request, logic deserialize của RSC tái tạo lại đối tượng từ payload mà không kiểm tra nguồn gốc/kiểu dữ liệu. Cấu trúc độc hại khiến runtime gọi tới một hàm JavaScript do attacker chỉ định.
Thực thi lệnh hệ thống
Theo Microsoft Security Blog, kẻ tấn công sau khi có RCE thường chạy lệnh để tải và thực thi script (reverse shell, coin miner), tạo persistence (cron job, systemd service, scheduled task trên Windows), và dò quét mạng nội bộ.
5. Dấu hiệu nhận biết bị khai thác (IOC / Detection)
-
Request
POSTbất thường tới các route Next.js có headerNext-Action, đặc biệt với body chứa cấu trúc Flight lạ (chuỗi bắt đầu bằng số thứ tự + JSON, ví dụ dạng0:["$@1", ...]). - Tiến trình con (child process) được spawn từ tiến trình Node.js của ứng dụng web (ví dụ
nodegọish -c,curl,wget,powershell). - Kết nối ra ngoài (outbound) bất thường tới IP/domain lạ ngay sau request POST đáng ngờ.
- Xuất hiện file binary coin miner (XMRig và biến thể) hoặc cron job/service mới không do đội vận hành tạo.
- Log error đặc trưng của RSC deserialization fail trên các bản chưa vá (có thể dùng để xác định server có bị “exposed” hay không, theo phương pháp scanner của Cymulate).
6. Khuyến nghị xử lý & vá lỗi
Ưu tiên 1 — Vá ngay
Nâng cấp React lên 19.0.1 / 19.1.2 / 19.2.1 và Next.js lên phiên bản đã vá tương ứng (14.2.35+, 15.x bản mới nhất, 16.0.7+).
Ưu tiên 2 — Giảm thiểu tạm thời
Nếu chưa vá được ngay: tạm vô hiệu hóa Server Actions/Server Functions nếu nghiệp vụ cho phép, hoặc chặn các request có header Next-Action tại WAF/reverse proxy.
Ưu tiên 3 — WAF rules
Bật rule WAF chặn payload Flight chứa pattern prototype-pollution / JS-injection (Cloud Armor, Cloudflare WAF, Datadog WAF đều đã có rule mẫu công khai).
Ưu tiên 4 — Săn tìm dấu vết
Threat hunting trên các host chạy Next.js/RSC: kiểm tra process tree của Node.js, scheduled tasks/cron mới, kết nối outbound bất thường từ khoảng 03–09/12/2025 trở đi.
7. Tài liệu tham khảo
- React Blog — Critical Security Vulnerability in React Server Components (03/12/2025)
- Datadog Security Labs — CVE-2025-55182 (React2Shell): RCE in RSC and Next.js
- Microsoft Security Blog — Defending against CVE-2025-55182 (React2Shell)
- Trend Micro Research — Critical React Server Components Vulnerability CVE-2025-55182
