SMT整型溢位漏洞分析筆記

FLy_鵬程萬里發表於2018-06-19

此次漏洞發生的虛擬貨幣為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貨幣。這一過程被同樣被記錄在了以太坊的交易記錄中,如下圖最後兩條記錄所示,而後續發生的交易則是攻擊者向其他錢包進行錢幣轉移的操作。

                                                                            攻擊者賬戶交易資訊

相關文章