作者:騰訊湛瀘實驗室
來源:https://weibo.com/ttarticle/p/show?id=2309404232782242012923#_0

此次漏洞發生的虛擬貨幣為SmartMesh(簡稱SMT),目前該貨幣以以太坊智能合約的形式發布,Token為0x55f93985431fc9304077687a35a1ba103dc1e081,最初觸發漏洞的交易記錄位于下圖所示的交易記錄上:

異常交易記錄

根據圖中Input Data中的信息,定位到SMT中發生錯誤的智能合約函數transferProxy,該函數主要用于沒有以太幣的SMT幣擁有者,將簽署過的交易信息交由第三方節點進行發布,而消息的發送節點會收到SMT幣作為酬勞。

漏洞函數截圖

該函數的第一行對于此次交易轉出者的余額進行校驗。交易記錄中的0-6變量依次對應于該函數的7個參數,此處的_feeSmt + _value實際為:

0x7000000000000000000000000000000000000000000000000000000000000001 +

0x8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

運算結果會被映射為uint256型數據,因此會發生無符號整型數據的上溢,使計算結果為0,從而繞過了此處檢查。這最終將導致msg.sender(發送交易消息的節點)和_to(錢幣接受者)代表的錢包在記賬時分別記入feeSmt(0x7000......)和_value(0x8FFF......)個SMT貨幣。這一過程被同樣被記錄在了以太坊的交易記錄中,如下圖最后兩條記錄所示,而后續發生的交易則是攻擊者向其他錢包進行錢幣轉移的操作。

攻擊者賬戶交易信息


Paper 本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.bjnorthway.com/591/