Common Security Issues in Crypto Wallets
三句話摘要
加密錢包(瀏覽器擴充套件與行動端)常見安全漏洞的成因分析與防禦設計建議。 加密錢包的安全邊界在於每一層的訊息驗證與 UI 資訊完整性,任何一環的鬆懈都可能讓攻擊者繞過用戶授權或隱藏關鍵交易細節,防禦設計必須從架構入口貫穿至顯示層。 訊息驗證不足可完全繞過用戶審核:瀏覽器擴充套件錢包的內部流程依賴 post message 串接多個 UI 步驟,若後台腳本未嚴格驗證訊息來源與類型,攻擊者可構造訊息直接跳至「簽名執行」階段,跳過確認介面。
重點整理
重點- 1
訊息驗證不足可完全繞過用戶審核:瀏覽器擴充套件錢包的內部流程依賴 post message 串接多個 UI 步驟,若後台腳本未嚴格驗證訊息來源與類型,攻擊者可構造訊息直接跳至「簽名執行」階段,跳過確認介面。
- 2
origin 欄位不可信,必須使用瀏覽器事件的只讀 origin:`postMessage` 中的 `origin` 欄位可被 iframe 任意偽造,錢包若依賴它顯示「請求來源站點」,將給用戶呈現假的合法域名,應改用 `MessageEvent.origin` 並對照白名單驗證。
- 3
用戶新增網路時 chain ID 驗證邏輯存在缺陷:部分錢包從 RPC 端點動態取回 chain ID 與用戶輸入比對,但若 RPC 被攻擊者控制,兩者皆為惡意值,比對永遠通過,錢包就會接受偽造網路並顯示假餘額與交易記錄。
- 4
Token UI 資訊不完整可觸發實際資產損失:惡意代幣合約可將 `transfer()` 設計為 payable,當 UI 未顯示 `value` 欄位,網站可在簽名時附加大額 ETH,用戶看到的只是普通 ERC20 轉帳,實際執行卻損失主網幣。
實用技巧與重點
乾貨- 威脅來源分類:① 惡意網頁/開發者(post message 偽造) ② 實體存取(記憶體轉儲、KDF 暴力破解) ③ UI 欺騙用戶
- 擴充套件架構層:Provider → Content Script → Background Script(可加 Service Worker)
- 行動端輸入向量:URI scheme、Intent filter,需在流程入口嚴格驗證傳入內容
- 漏洞類別一:訊息類型驗證(Message Type Validation)
- 漏洞類別二:來源驗證(Origin Verification)—— 應使用 `MessageEvent.origin`(只讀),不信任訊息體內的 origin 欄位
- 漏洞類別三:來源可見性(Origin Visibility)—— 防禦方式:對域名字串做 normalize + sanitize,UI 顯示不截斷
- 漏洞類別四:惡意 RPC 注入假 chain ID —— 防禦方式:chain ID 唯一性檢查應基於用戶輸入而非 RPC 回傳值
- 漏洞類別五:Token UI 缺少 `value` 欄位顯示
- 攻擊案例流程:惡意網站查餘額 → 發少量 USDT → 誘導用戶「轉回」1 USDT → 合約 payable transfer 附加大額 ETH → 資產被鎖定
- 防禦工具:Token Risk API(分析多鏈代幣、標記高風險 token,於錢包 UI 層顯示警示)
結論
結論“加密錢包的安全邊界在於每一層的訊息驗證與 UI 資訊完整性,任何一環的鬆懈都可能讓攻擊者繞過用戶授權或隱藏關鍵交易細節,防禦設計必須從架構入口貫穿至顯示層。”
完整解析
詳細加密錢包正成為絕大多數用戶進入 Web3 世界的第一道門,但這個「門」本身卻存在大量源自架構設計與環境誤解的安全缺陷。來自 Hex 的安全研究員 Andy 在這場演講中,系統性地拆解了瀏覽器擴充套件錢包與行動端錢包的攻擊面,並以具體漏洞案例說明問題的根因與防禦方向。
錢包面臨的威脅可分為三類:惡意網頁或開發者透過 post message 傳遞偽造請求;具備設備實體存取權的攻擊者可轉儲記憶體、暴力破解 KDF 派生密碼或篡改 OS 安全儲存;以及利用 UI 資訊不完整來欺騙用戶做出錯誤決策。擴充套件錢包的架構是:網頁透過 Provider 發出請求,Content Script 作為中間傳遞層,Background Script 負責實際的授權與敏感操作決策。行動端則透過 URI scheme 與 Intent filter 接收外部請求,攻擊面不同,但「嚴格驗證輸入」的核心要求一致。
第一個大類漏洞是訊息驗證不足。錢包內部的多個 UI 步驟(例如「切換網路確認」→「代幣轉帳確認」)依靠 post message 串接,Background Script 必須清楚區分訊息來自 Content Script 還是內部 UI 元件。若驗證不足,攻擊者可以構造精心設計的訊息,跳過「顯示授權介面」這一步,直接觸發「執行簽名」的 handler,使錢包誤以為用戶已審核並批准交易。第二個問題是來源驗證:postMessage 訊息體中的 `origin` 欄位可被頁面內的 iframe 任意設定(例如偽稱自己是 `build.devxy`),若錢包以此欄位來顯示「請求站點」,UI 就會呈現假的合法域名。正確做法是使用瀏覽器提供的只讀 `MessageEvent.origin`,並對照白名單,拒絕來自 iframe 或不可信上下文的訊息。此外,即使 origin 驗證正確,攻擊者仍可利用同形字符(homograph attack)或不可見填充字符讓惡意域名在視覺上與受信任域名完全相同,防禦方式是對域名字串進行規範化(normalize)並在 UI 中完整顯示不截斷。
網路新增流程也存在根本性缺陷。部分錢包在用戶添加自定義網路時,會從 RPC 端點動態取回 chain ID 並與用戶輸入比對,但若 RPC 端點由攻擊者控制,兩個值皆為惡意值,比對永遠通過。同時,重複性檢查若只比對名稱與 URL 而非 chain ID,攻擊者仍可注入重複 chain ID 的惡意網路,讓錢包顯示假餘額、假交易記錄,並在廣播前對用戶交易進行前置或後置操作。最後一個問題出在 Token UI:許多錢包的 ERC20 代幣轉帳介面未顯示 `value` 欄位。惡意代幣合約可將 `transfer()` 設計為 `payable`,網站在誘導用戶簽署看似無害的「1 USDT 轉帳」時,附加大額 ETH 作為 msg.value,合約執行後鎖定這部分資產,用戶毫不知情。Andy 的團隊因此建立了 Token Risk API,在多條鏈上分析代幣行為並於錢包 UI 層顯示風險標示,讓錢包從「簽名工具」升級為「風險感知介面」。
關鍵時刻
Pipeline v2帶時間戳的重點,會在逐字稿層級分析上線後產生。目前請先透過原始影片觀看。
事實查核
Pipeline v2說法查證是下一次管線升級的一部分。KeyFrame 只會顯示它真正能驗證的內容。

