惡意 Electrum 伺服器以假零手續費比特幣交易替換已廣播的付款;修復已隨 4.8.3 版本發布
重點速覽
- •Electrum 發布 4.8.3 版本,修補一個涉及惡意伺服器替換已廣播付款的高嚴重性漏洞,維護者 SomberNight 於 10 月 24 日發布公告 GHSA-6jp4-8v48-cc5v,並呼籲用戶升級。
- •此攻擊之所以奏效,是因為舊版本不驗證 mempool 交易簽章,偽造的零手續費交易因此顯示為待確認,而 Replace-By-Fee 提高手續費時,受害者的錢包便以有效簽章簽署了攻擊者的版本。
- •一名使用兩台 Trezor 的 2-of-3 legacy P2SH 多重簽章受害者記錄了此事:假交易在 31 個輸入上帶有逐位元組相同的 scriptSigs,其目的地地址模仿真實地址的末四碼,結尾為 GyQ3。
- •由 commit 90fe308 引入的修復,會在將 mempool 交易加入本地歷史之前驗證錢包自有輸入的簽章,但在區塊鏈上確認之前,未確認的入帳付款仍無法由錢包完整驗證。
- •Electrum 建議無法升級的用戶在簽署任何內容(包括提高手續費)之前驗證輸出地址和金額;僅連接至自己伺服器的用戶從未受到影響。

惡意 Electrum 伺服器一直以支付到相似地址的假零手續費交易,替換用戶剛廣播的比特幣付款,並賭受害者會提高手續費而簽署攻擊者的版本。Electrum 於 10 月 24 日發布 4.8.3 版本以修補此高嚴重性漏洞。維護者 SomberNight 於同日發布公告 GHSA-6jp4-8v48-cc5v,並要求用戶升級。
攻擊如何運作
Electrum 是一個輕節點客戶端:它不運行完整的比特幣節點,而是如專案自身文件所述,依靠其伺服器取得有關未確認 mempool 交易的資訊。當用戶簽署並發送一筆交易(tx1)時,惡意伺服器可以攔截它,並向錢包交付另一筆將資金送往攻擊者地址的交易(tx2)。
Tx2 帶有無效的簽章。舊版 Electrum 不會驗證 mempool 交易的簽章,因此錢包將 tx2 顯示為待確認,並隱藏 tx1。Replace-By-Fee(RBF)允許發送者以更高的手續費重新廣播一筆未確認的交易。如果假交易的手續費被提高,錢包就會以有效簽章簽署攻擊者的版本。這使得一個例行步驟——為看似卡住的付款提高手續費——變成受害者自己的錢包簽署攻擊者交易的關鍵時刻。
偽造地址與合法目的地同樣以 GyQ3 結尾
其中一名代號為 dannydeezy 的受害者記錄了這次攻擊。其架構為使用兩台 Trezor 的 2-of-3 legacy P2SH 多重簽章,包含 31 個輸入和 1 個輸出。用戶在兩台 Trezor 上檢查了輸出後才廣播。Trezor 在真實交易離開錢包前已進行驗證;攻擊者的版本是在此之後才由惡意伺服器交付的,因此設備上的檢查從未見過它。錢包歷史隨後顯示全部金額流向一個未知地址且狀態為未確認,該條目後來轉為「Local」。在 Electrum 中,「Local」表示該交易僅為錢包所,網路上看不到。
假交易複製了真實交易的輸入、版本和 locktime,所有 31 個輸入上的 scriptSigs 逐位元組完全相同。全部 62 個簽章對真實交易驗證通過;對假交易則全部無效。幾乎所有資金都流向一個相似地址,只有一小部分被送回錢包自己的一個已使用地址。
假交易的結尾為 GyQ3——真實目的地也是如此。攻擊者已找出一個與正確地址末四碼相符的地址。ZachXBT 也曾揭露一個影響 Phantom 錢包用戶的類似地址投毒詐騙;偽造地址的設計正是為了讓人僅掃視開頭與結尾字元時無法察覺。
4.8.3 版本僅檢查錢包自有輸入的簽章
另一名用戶 Raju-K12 於 10 月 18 日私下回報,他們為假交易提高了手續費並損失資金。維護者表示,部分伺服器正在現實環境中執行此攻擊。
Commit 90fe308 新增了在將 mempool 交易加入本地歷史之前,對錢包自有「is_mine」輸入的簽章檢查。4.8.3 版本於 10 月 23 日完成 git 標記,二進位檔於次日發布。
Electrum 仍然只檢查錢包所控制的輸入,因此未確認的入帳交易不會被檢查,原因是該客戶端沒有完整的腳本解譯器。對收款者而言,這意味著待確認的入帳付款在區塊鏈上確認之前,無法僅憑錢包完整驗證。對無法升級的用戶,Electrum 的權宜做法是在簽署任何內容之前驗證輸出地址和金額,包括提高手續費時。僅連接至自己伺服器的用戶從未受到影響。
Electrum 過去也曾發布緊急修復。2018 年 1 月,在 Google 研究員 Tavis Ormandy 發現網站可偵測連接埠並盜取資金後,Electrum 關閉了一個已開放約兩年的 JSON RPC 介面。Cryptopolitan 報導,7 月出現 Coldcard 種子碼生成漏洞警告,同一天約 594 BTC(約 3,800 萬美元)從大約 500 個錢包中被盜取。