PHÂN TÍCH LỖ HỔNG

CVE-2025-55182 (React2Shell)

RCE tiền xác thực trong React Server Components & Next.js — CVSS 10.0

Mức độ nghiêm trọng CVSS 10.0 / Critical
Loại lỗ hổng Insecure Deserialization → RCE
Xác thực Không cần (Pre-Auth)
Ngày công bố 03/12/2025

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.

Tại sao nguy hiểm? Chỉ cần một request HTTP duy nhất, không cần đăng nhập, kẻ tấn công có thể thực thi lệnh tùy ý trên server Node.js — dẫn đến chiếm toàn quyền hệ thống, đánh cắp credentials, leo thang sang hạ tầng nội bộ.

2. Phạm vi ảnh hưởng

Thành phầnPhiên bản bị ảnh hưởngPhiên bản đã vá
React (react-server)19.0, 19.1.0, 19.1.1, 19.2.019.0.1, 19.1.2, 19.2.1
Next.js 13.x13.3.x – 13.5.xNâng lên 14.2.35+
Next.js 14.x / 15.x / 16.xCác bản dùng RSC bị ảnh hưởng15.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)

Phần dưới đây mô tả luồng tấn công ở mức khái niệm để phục vụ mục đích nhận thức/đào tạo. Mình không cung cấp payload RCE hoàn chỉnh có thể chạy ngay, vì lỗ hổng này đang bị khai thác diện rộng trên Internet và việc phổ biến exploit có thể gây hại cho các hệ thống chưa kịp vá.
1

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.

2

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ã).

3

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.

4

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 POST bất thường tới các route Next.js có header Next-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ạng 0:["$@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ụ node gọi sh -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
Lưu ý dành cho học viên: Khi thực hành lab về lỗ hổng deserialization dạng này, chỉ thực hiện trên môi trường lab cách ly (sandbox/VM riêng), không thử nghiệm trên hệ thống production hoặc hệ thống không thuộc quyền sở hữu của bạn.

Leave a Reply

Your email address will not be published. Required fields are marked *