合約安全(2):Bancor Network權限配置錯誤漏洞

Abstract

2020年6月16日,BancorV2上線以太坊主網。
2020年6月18日,Bancor Network團隊發現了其BancorV2智能合約的安全漏洞。
Bancor團隊發現漏洞
漏洞導致攻擊者可盜取Bancor合約用戶的資產。
本文將介紹一下攻擊的細節和這次安全事件的始末。

漏洞原理

本次安全事件一共涉及三個有漏洞的智能合約。

  • 0x8dfeb86c7c962577ded19ab2050ac78654fea9f7
  • 0x5f58058C0eC971492166763c8C22632B583F667f
  • 0x923cab01e6a4639664aa64b76396eec0ea7d3a5f

三個合約內容相似,都實現了 TokenHandler contract
該合約關鍵functions如下:
TokenHandler Fucntions可見實現了三個關鍵函數

safeApprove
safeTransfer
safeTransferFrom

非預期的是,三個函數的Access Control全都是public,
意味着任何人可以調用該函數來進行轉賬操作。
攻擊者可以調用 safeTransferFrom函數,其中_from設爲任何該合約的用戶,_to設爲攻擊者自己的address。從而無限制的將用戶的token轉移到自己的錢包。

遺留問題

調用transferFrom時,需要_from用戶有足夠的allowance,如果_value超過了allowance應該會報錯纔對。
所以上文中_from可以設置的用戶,必須有調用過approve函數來批准合約操作自己的token。

rescue

Bancor Network Team 發現漏洞後,立刻利用該漏洞,將所有用戶的token向BancorNetwork安全賬戶轉移。搶在被惡意攻擊之前,將合約中的token掏空。
對應的Transaction如下

  • 0xc8021b971e69e60c5deede19528b33dcd52cdbd8
  • 0x14fa61fd261ab950b9ce07685180a9555ab5d665

我們使用在線工具OKO Contract Explorer來分析一下
發現Transaction 中主要調用了 balanceOf 、 allowance 和 safeTransforFrom三個函數
其中SafeTransforFrom就是剛纔提到的漏洞函數
SafeTransforFrom
balanceOf和allowance用來查看當前token數量,和_spender可以操作的Token數量
balanceOf和allowance
奇怪的是,每次調用allowance,返回的結果都極大。
如圖中,0x8dfe居然Approve了0xfffffffffffffffffffffffffffffffffffffffffffffecf2ccab1d2176d6ebb這麼多的DATA
DATA的總髮行量也沒有這麼多呀
結合Bancor Network 官方Twitter的描述:
Given Approvals
我們猜測是BancorV2用戶爲了操作方便,直接進行了infinite approve.
這也就解釋了上文中的allowance超額的問題。

Discussion

綜上所述,上線僅一天的BancorV2,由於函數的Access Control存在問題,存在盜筆風險。
受該漏洞影響的token總價值爲$409,656。
另一方面,從代碼審計的角度來講,Access Control Setting Error是很簡單很好理解的漏洞。
爲了Defi應用的安全,項目上線之前還是請安全團隊來進行一次代碼審計吧

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章