Blog
/
Frontend
Next.js 與 RCE 駭客攻擊
解析 RCE 攻擊程式碼駭入原理!Next.js CVE 10 漏洞
Posted at
2025年12月5日
Posted on
Frontend
CVE (常見漏洞與暴露)
Vercel 12/3 發布 CVE-2025-55182 (CVE 10) 安全漏洞,請大家盡速更新 Next.js 和 React 到較新的 patch:
https://nextjs.org/blog/CVE-2025-66478
而 CVE 揭露的究竟是一個怎樣的風險?漏洞和暴露的差別是什麼?可以將漏洞想像成 code 中真實的一個洞,這讓攻擊者能夠從這個洞繞過正門,直接取得系統的存取權限,並發動攻擊。暴露則是 code 中的另一種錯誤,賦予攻擊者潛伏在電腦中的能力,並蒐集 cookie, 憑證或個資等重要資訊。
Technical Interview ft. RCE Hacker
我朋友最近在找工程師工作,某家公司給了一份 debug 作業,叫他 clone 下來跑跑看。整份作業看起來都很正常:「公開」的 repo,也沒有要求你做什麼危險的事,面試題目也有一定的挑戰性,他就栽進去 Debug了。節錄其中一題下來:
This site is mobile-responsive. However, there's a bug in the center of the landing page that doesn't fit this, and it's immediately visible to the naked eye. Please let me know what's causing this bug and how to fix it.
說真的我遇到這樣的情境,我想也想不到會是詐騙:公開的程式碼、很認真的面試題,是我我也會直接 Clone 下來再說,丟給 Claude 幫我看看。結果 clone 下來後,應該是當天, 12/3 工程師朋友就中毒了。
中毒原始碼解析
Hint: 瀏覽此段 code 不會暴露在風險中,若要進一步挑戰,請自行負責相關風險控管。已知 Docker 環境檔不住此類 RCE 攻擊
其中的這段動態生成函式是整個攻擊的核心:
這行在做什麼?看起來像奇怪的動態錯誤處理,其實是把 require 權限交給外部字串,開啟完整 RCE 能力。只要攻擊者控制 errCode,他就能:讀檔、寫檔、掃 .env、執行 shell、安裝木馬。而傳進來的 errCode,則是來自這裡:
這代表什麼?Server 端去打外部 API,把回傳內容當成「錯誤字串」,再把這個字串當成「可執行程式碼」,只要那個 API 回傳的不是錯誤訊息,而是:
你的伺服器就會原地執行它。
而後續這個 mocki API 到底在變什麼把戲,也有神人解析出來了,感謝 Rayologist 大大。這個 API 會去 mocki.io 這個 JSON store 拿到一段 {"cookie": "<obfuscated codes>"} 的內容 (節錄)
仔細看這個 cookie 的內容,可以發現是一串被 obfuscated 的程式碼。如果上 deobfuscated.io 這類解碼工具,就可以看到部分還原後的程式碼。最先會看到幾個掃描目標清單:
各種加密貨幣錢包的 Chrome extension 設定與資料(甚至包含 seed/私鑰)
瀏覽器幫忙儲存的各網站上登入資訊
Apple Keychain 相關資料
還有一些類似的機敏資料
找到這些資料後,程式就會把它們打包並上傳到駭客的伺服器,而且上傳的伺服器 IP 和 port 是直接寫死在程式碼裡的。
接著會從駭客的伺服器下載惡意 Python 程式碼及執行環境,來在你的電腦直接執行這些惡意程式。
下載下來的兩個 Python script,本身內容是「壓縮後再做 base64 編碼」,長得像 b'T+Bac52fd' 這種形式。當嘗試解壓縮並 base64 decode 時,會再得到另一串「壓縮+base64」的字串,如此重複多次。其中一個 script 要重複解到第 64 次才會得到完整程式碼,另一個則要解到第 128 次。
最後就會執行這兩個還原出來的程式碼:一個負責再次全面搜尋電腦中的各種機敏資訊,另一個則是把電腦變成礦機,在背景持續幫駭客挖礦。
目前官方建議 Next.js 升級至 15.0.5, 15.1.9, 15.2.6, 15.3.6, 15.4.8, 15.5.7, 16.0.7
目前官方建議 React 升級至 19.0.1, 19.1.2, and 19.2.1
特別感謝 Rayologist 破譯



