📌 深度解读React满分漏洞,一个前端框架怎么炸掉半个互联网【让编程再次伟大#50】

📌 深度解读React满分漏洞,一个前端框架怎么炸掉半个互联网【让编程再次伟大#50】

Original URL: https://youtu.be/LSiYdiMGS4U

📌 深度解读React满分漏洞,一个前端框架怎么炸掉半个互联网【让编程再次伟大#50】

⓵ 容易懂 Easy Know

想像一個披薩店(伺服器)用一套新的系統(React Server Components, RSC)來處理網路訂單。這套系統本來應該只做它自己內定的菜色,但它犯了一個天大的錯誤:它完全信任顧客在訂單裡寫下的任何內容。黑客發現,只要在HTTP訂單裡寫入一個特定的暗號(一個特別設計的JSON結構),就可以欺騙系統,讓它誤以為這不是一個外賣請求,而是披薩店老闆自己發出的、要求執行特定動作的「內部指令」。例如,黑客可以命令系統去偷看店裡的保險箱密碼,甚至直接刪除店裡的檔案。這個漏洞之所以拿到滿分10分,就是因為它違反了軟體開發中最基本的原則:永遠不要相信外部傳來的任何資訊。推動這項技術的公司(Vercel)因為只顧著推廣新技術,卻忽略了最基礎的防禦,結果造成了極大的安全危機。

分隔線

⓶ 總結 Overall Summary

本次影片詳細解析了發生在React Server Components(RSC)中的一個滿分10分的嚴重安全漏洞(CVE-2025-55182),該漏洞允許未經驗證的遠端程式碼執行(RCE)。此漏洞的核心發生在RSC接收前端請求後的遞迴解析(recursive parsing)階段。當解析器處理到特定結構的JSON Payload時,駭客可利用數據流中用於表示Promise($@)和Blob($B)的標籤,偽裝成一個已解析的抽象語法樹(AST)結構。由於React解析器在設計上完全沒有驗證這個AST數據是否由其自身產生,它會盲目地接受並執行Payload中包含的任意Node.js代碼,例如透過child_process模組執行系統級Bash命令。

影片指出,此漏洞反映了Vercel公司在推動極端伺服器端渲染(SSR)技術時,故意模糊前端和後端的界線,卻嚴重忽略了遠端程序呼叫(RPC)框架所需的基本安全準則。為了延緩駭客速度,React團隊在發布補丁時選擇不公開技術細節,並在補丁中混入大量無關程式碼。

此外,影片強調Next.js使用者必須手動更新框架。因為Next.js將React源碼複製到自身程式庫中,使得它向CVE提交的補丁報告(CVE-2025-66478)被標記為重複並遭拒收,導致依賴自動化修復的用戶可能會遺漏Next.js的修復。

最後,影片闡述了漏洞公布後Cloudflare發生的連鎖事故。Cloudflare為了給WAF增加防護,決定將代理快取上限從128KB提高到1MB,此舉動意外導致他們跳過了一個測試子規則,進而觸發了其舊規則引擎FL1(基於NGINX/Lua)中從未被使用過的程式碼路徑上的空指針錯誤(null pointer exception),造成服務癱瘓近半小時,間接證明了該漏洞對整個網路的影響。

分隔線

⓷ 觀點 Viewpoints

1. 最基本的安全法則被忽視:React RSC漏洞完美展示了軟體開發中最致命的錯誤,即「不要相信前端傳來的任何東西」這項基本原則遭到徹底違反,導致駭客能輕易偽造內部數據結構。
2. Vercel的策略性犧牲安全:Vercel為了推動Next.js及其雲服務的SSR技術路線,刻意模糊前後端界限,但缺乏對Remote Procedure Call (RPC) 安全機制應有的職業操守和嚴謹設計。
3. Next.js依賴機制是安全陷阱:Next.js不只是依賴React,而是直接複製其源碼,造成了補丁管理上的混亂,使得使用者必須手動更新Next.js,而非單純更新React依賴,徒增安全維護的複雜性。
4. 開源專案修復策略的局限性:React團隊試圖透過延遲公布技術細節並混入大量冗餘代碼來拖延黑客復現速度,但對於開源專案而言,這種隱蔽策略很快就會被技術社群識破。
5. Cloudflare的公式化草台班子:Cloudflare在急於提供WAF防護、調整快取大小的過程中,意外觸發了舊引擎中從未被測試的低級空指針錯誤,證明了其基礎架構在面對突發事件時的脆弱性。

分隔線

⓸ 摘要 Abstract

📌 React Server Components (RSC) 爆發滿分10分的嚴重安全漏洞 CVE-2025-55182。
⚠️ 漏洞允許駭客透過構造特殊 JSON Payload 實現在伺服器端任意程式碼執行 RCE。
✅ 漏洞的根本原因在於 RSC 解析器盲目信任並執行前端傳入的偽造 AST 數據。
🚨 攻擊者利用解析器對 $@ (Promise) 和 $B (Blob) 的特殊處理路徑來繞過安全檢查。
🛡️ React 團隊修補策略包含混入近千行無關代碼,以增加駭客定位漏洞源頭的難度。
📌 Next.js 使用者必須手動更新框架,因其將 React 源碼複製到內部,且 CVE 報告被拒收。
⚠️ Cloudflare 在為 React 漏洞添加 WAF 防護時,因調整 Proxy 緩存上限引發連鎖錯誤。
🔥 Cloudflare 故障是因關閉 WAF 測試規則後,觸發了 FL1 Lua 引擎中的空指針錯誤 (Null Pointer Exception)。

分隔線

⓹ FAQ 測驗

Q1 React Server Components (RSC) 滿分漏洞的核心機制是什麼?
A 駭客成功注入惡意代碼,假裝成一個已經通過加密驗證的資料流。
B 伺服器端解析器未對前端傳來的 AST 數據進行驗證,導致執行了偽裝成 Blob 的惡意代碼。
C Promise 狀態($@)被錯誤地設定為 PENDING,造成服務逾時崩潰。
D 緩存機制($Q)設計缺陷,使駭客能讀取快取中的機密資訊。
正確答案:B
解釋:漏洞發生在解析器未驗證輸入的 AST 結構,特別是透過偽造 $@(Promise)和 $B(Blob)標籤,直接進入執行流程。

Q2 為什麼 Next.js 使用者僅更新獨立的 React 依賴不足以修復此次漏洞?
A Next.js 使用了客製化的 React 版本,需要專門的補丁包。
B Next.js 的路由系統(Routing)才是漏洞的實際入口。
C React 補丁與 Next.js 的其他依賴存在版本衝突。
D Next.js 將 React 的全部源碼複製進自己的程式庫,因此必須更新 Next.js 框架本身。
正確答案:D
解釋:Next.js 的特殊性在於它不是單純依賴,而是內建了 React 的源代碼副本,因此修復需要透過更新 Next.js 框架。

Q3 Cloudflare 在此次 React 漏洞事件後服務癱瘓的直接技術原因是什麼?
A 駭客成功利用 React 漏洞攻擊了 Cloudflare 的內部伺服器。
B NGINX 代理快取上限從 128KB 增加到 1MB,造成記憶體溢出。
C 規則引擎 FL1 (Lua) 執行時,由於跳過測試子規則,觸發了空指針錯誤。
D 新的 FL2 引擎(Rust 重寫)在測試中未能成功處理大流量請求。
正確答案:C
解釋:Cloudflare 在嘗試部署 WAF 防護時,因跳過測試規則,導致舊的 FL1 Lua 引擎在總結子規則結果時,Rule Result 為空值,進而發生空指針錯誤。

✡ Oli小濃縮 Summary bot 為您濃縮重點 ✡

▶ https://youtu.be/LSiYdiMGS4U