BCST區塊鏈安全研究所研究案例一:某合約低危漏洞深度分析區塊鏈
今天為大家分享一個輕微漏洞案例,案例的主角是S*T與M*C,大家應該對這兩個項目不會陌生。由于之前出了漏洞,造成無限轉幣,導致項目方損失慘重。
前言
今天為大家分享一個輕微漏洞案例,案例的主角是S*T與M*C,大家應該對這兩個項目不會陌生。由于之前出了漏洞,造成無限轉幣,導致項目方損失慘重。
申明一下,我們僅僅只是做案例分享。
對于智能合約,我們一直認為,任何一行代碼都應該且必須嚴謹,具體你懂的。。。。
代碼案例
咱們先看下面的代碼:
代碼解析
這是一個代理轉賬函數,參數簡單說明:
_from---轉賬方
_spender---收款方
_value---轉賬金額
如果你的簽名為:
keccak256是一個加密算法,內嵌的函數,可以直接調用。ecrecover是恢復簽名公鑰的函數,如果傳的各個值正確,ecrecover恢復出的公鑰等于應該等于_from所傳地址。按正常流程來執行的話這個函數是沒有問題的。
重點!重點!考試要考!
但是,但是,如果ecrecover里面傳的參數不對,ecrecover就會返回0x0地址,而且我們檢查了下合約,并沒有禁止向0x0轉賬,所以理論上說,任何人都可以從0x0地址獲得這個合約的token。
實操
這時候我們去以太坊區塊鏈瀏覽器中查下0x0有沒有他們的token,果不其然,里面有0.1個token,然后我們調用代理授權函數,并從0x0中將剩余的0.1個token成功的轉到了我們的測試賬號上。
實操詳細流程
1、執行approveProxy函數,授權成功
2、我們通過區塊瀏覽器查看allowance 是否授權成功,看下面截圖,成功授權,可以從0x0轉走0.個token。
3、接著我們調用transferForm
4、轉出成功!成功!成功!成功!。
總結
雖然這個屬于輕微漏洞,但是如果有人往0x0轉了對應合約的token,那么其他人還是能取出來,一般來說往0x0里面轉token屬于銷毀,如果項目方哪天宣布要銷毀部分token,往0x0轉了大量token,然后被有心人給發現了,那就尷尬了。
1.TMT觀察網遵循行業規范,任何轉載的稿件都會明確標注作者和來源;
2.TMT觀察網的原創文章,請轉載時務必注明文章作者和"來源:TMT觀察網",不尊重原創的行為TMT觀察網或將追究責任;
3.作者投稿可能會經TMT觀察網編輯修改或補充。