比特幣(BTC)應用程式有兩項漏洞,可能低估部分簽名交易的手續費。若使用者相信應用程式的計算結果並批准交易,實際支付的礦工手續費可能高於預期。
bitcoinjs-lib 維護者於 10 月 26 日發布兩份安全公告,將兩項漏洞的嚴重程度都列為「高」。受影響的是使用該函式庫處理 PSBT,並依賴其手續費計算或高額手續費阻擋功能的應用程式。
PSBT 是一種在多個應用程式或簽名裝置之間傳遞交易資料與簽名的格式。BIP 174 規定,PSBT 應包含交易輸入所要花費的前一筆交易輸出資訊,簽名者可據此計算手續費並顯示給使用者。
第一項漏洞會在同一筆交易輸入同時包含兩種互相矛盾的前一筆輸出紀錄時發生。簽署程序會使用實際前一筆交易的數值,但手續費計算可能採用另一筆紀錄中的較低數值。
維護者提供的重現案例中,實際手續費為 9 億聰,函式庫卻計算為 200 聰。簽名驗證仍然通過,擷取交易時也沒有出現基本手續費率警告。這些數字是漏洞重現案例,不代表使用者實際損失金額。
第二項漏洞出現在已完成簽名的交易輸入中,所有前一筆輸出數值紀錄都遭到省略時。若函式庫將該輸入值計為 0,可能因此低估手續費。
維護者的示例顯示,實際手續費為 9萬1000 聰,畫面卻顯示 1000 聰。兩個案例都顯示,手續費顯示與阻擋功能可能無法反映交易的實際數值。
漏洞本身不會產生簽名,也不會在未經批准的情況下轉移比特幣。實際損失須在有效交易獲得批准後,傳播至網路並被接受才可能發生。超出預期的手續費會支付給礦工,不會自動轉給提交 PSBT 的人。
兩項漏洞在 v5 系列中的影響版本不同:紀錄衝突問題影響 5.2.0 至 5.2.1,輸入值紀錄缺漏問題影響 5.1.0 至 5.2.1。兩項問題也影響 v6 的 6.0.0 至 6.1.8,以及 v7 的 7.0.0-rc.0 至 7.0.3。
兩項漏洞分別在 5.2.2、6.1.9 和 7.0.4 修復。bitcoinjs-lib 維護者同日另發布包含其他安全問題的 15 份公告,並建議各版本系列升級至最新修補版本:5.2.3、6.1.10 和 7.0.5。
維護者呼籲開發者檢查直接與間接依賴套件的版本。若應用程式難以升級,應獨立確認每筆交易輸入的實際前一筆輸出數值,並拒絕數值衝突或缺漏的輸入。目前尚未確認個別錢包是否受到影響,也未確認是否已有實際損失發生。
留言 0