從BRC-20的設計原理出發,探討錢包可能存在的攻擊漏洞


在對BRC-20代碼和機制進行深入研究後,發現有可能針對大額持有者的攻擊手段。為了幫助交易所檢查流程規範問題,我們使用測試過的手段鎖定了幣安ORDI熱錢包資產,導致幣安暫停了ORDI提現。我們通知了幣安團隊,並協助恢復提現。本文從BRC-20的設計原理出發,系統性地分析了幣安暫停ORDI提現的原因,並解釋了為什麼任何人都可以鎖定BRC-20餘額。在UniSat上展示了幣安ORDI熱錢包餘額的三個部分,並解釋了BRC-20的轉移操作。

請問還有別的需要幫忙的嗎?

作者:Trustless 實驗室

在深入研究BRC-20程式碼和機制後,我們發現循環階段存在著針對大額持有者可能的攻擊手段。為了幫助交易所檢查是否有流程規範問題,同時也實踐白帽精神,我們嘗試使用測試過的手段鎖定了幣安ORDI熱錢包資產,導致幣安暫停了ORDI提現。我們第一時間通知了幣安團隊,溝通了操作細節,以幫助幣安快速恢復提現,三小時後,幣安恢復了ORDI提現。本文將從BRC-20 的設計原理出發,系統性地分析一下幣安暫停ORDI 提現的原因,幫助大家理解為什麼任何人都可以鎖定你的BRC-20 餘額。

首先我們在UniSat 看一下鏈上都發生了什麼事。

本文撰文時UniSat 上展示的幣安ORDI 熱錢包餘額,分為三個部分可轉讓、可用和餘額。這裡涉及到BRC-20 中的三個基本概念可轉讓餘額、可用餘額和總體餘額。可轉讓餘額是指可以直接轉出的餘額,可用餘額是指可以變成可轉帳餘額的餘額,總餘額是前面兩者之和,表示當前地址總餘額。看到這裡大家可能會問了,那麼當前幣安ORDI熱錢包有這麼多餘額,那為什麼還無法提現轉出呢?別急,我們繼續往下看。

BRC-20 的轉移需要兩步驟操作,第一步先記入一個轉移的Inscription ,第二步再把這個Inscription 轉給接收方,完成BRC-20 的轉移。由於Inscription 轉移是基於UTXO 的,以此,第一步記下了多少amt 的銘文,第二步就只能轉出多少amt 的BRC-20,所以前面提到的可轉移餘額也是基於UTXO 的。舉個例子方便大家理解,假設A 是一個新的創建的地址,然後你鑄造了m 個ORDI 到A 地址,或者從其他地址轉了m 個ORDI 到A 地址,接下來A 地址的可用餘額和總體餘額皆為m ,可轉讓餘額為0 。接著我們從A 位址轉n 個ORDI 到B 位址,第一步先將一個amt 為n 的燒錄到A 位址(當且僅當 n

從BRC-20的設計原理出發,分析錢包潛在的攻擊漏洞

以UniSat 上展示的幣安ORDI 熱錢包交易列表為例,以方法為inscribe-transfer 的對應上面講到的第一步操作,以方法為接收或發送的對應第二步,並以最後兩筆為例交易共同組成了一個完整的BRC-20 轉帳。另外三筆入-轉帳的交易分別記入了amt 為8,210,108 、6,099 、2,683 的三個銘文,這三個銘文共同組成了可轉讓餘額。所以如果現在要從幣安ORDI熱錢包轉出ORDI,只能轉出三筆對應amt的ORDI,當然無法滿足用戶多樣化的提現需求。

造成這種情況的原因是,任何人都可以在任意地址刻寫一個任意的銘文,因此任何人都可以透過執行BRC-20 幣轉動的第一步操作鎖定任意地址的BRC-20 餘額。如何解決目前面臨的問題?其實很簡單,只要把前面提到的三個Inscription 轉給自己,就可以把Transferable Balance 變回可用餘額,然後再根據用戶提現需求inscribe 對應amt 的Inscription 轉出。但這只能解燃眉之急,無法從根本解決問題,只有改進協議本身,解決目前BRC-20設計上存在的缺陷,方可一勞永逸。

資訊來源:0x資訊編譯自網際網路。版權歸作者Trustless Labs所有,未經許可,不得轉載

Total
0
Shares
Related Posts