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