在繼智能合約漏洞溢出問(wèn)題引發(fā)了一系列損失過(guò)后夸赫,5月24號(hào)碱茁,有安全團(tuán)隊(duì)再次爆出漏洞溢出的問(wèn)題(CVE-2018–11397, CVE-2018–11398)粒褒,賬戶余額可以被任何人任意轉(zhuǎn)出仗岸。
根據(jù)某相關(guān)安全公司風(fēng)險(xiǎn)預(yù)警平臺(tái)顯示,對(duì)該類(lèi)問(wèn)題進(jìn)行監(jiān)控啥箭,果不其然谍珊,發(fā)現(xiàn)了這個(gè)問(wèn)題,更可怕的是急侥,該監(jiān)控系統(tǒng)顯示,已經(jīng)部署的四份合約存在相同的問(wèn)題侮邀,并且四份合約的實(shí)現(xiàn)幾乎一模一樣坏怪。
以下為問(wèn)題合約的地址通過(guò)sha3(address)計(jì)算出的哈希結(jié)果:
問(wèn)題合約代碼中顯示,在transferFrom函數(shù)中绊茧,由于缺少了對(duì)allowed的校驗(yàn)铝宵, 任何賬戶都可以對(duì)某一賬戶上的余額隨意進(jìn)行轉(zhuǎn)賬,黑客就可以利用這個(gè)漏洞將他人賬戶上的余額轉(zhuǎn)入自己的賬戶中华畏,從而獲益鹏秋。同時(shí)若轉(zhuǎn)賬金額超出了allowed 的限制,allowed[_from][msg.sender] -= _value;這段代碼將導(dǎo)致的溢出亡笑。
這個(gè)問(wèn)題本質(zhì)上是一個(gè)邏輯上的漏洞侣夷,進(jìn)而引發(fā)了溢出漏洞。但可以通過(guò)規(guī)避溢出漏洞的方式來(lái)規(guī)避該類(lèi)問(wèn)題:
- 轉(zhuǎn)賬之前對(duì)allowed進(jìn)行校驗(yàn)仑乌。
- 使用safeMath等安全的方式進(jìn)行運(yùn)算百拓。
本文轉(zhuǎn)載自《四個(gè)Token邏輯漏洞》,版權(quán)屬于原作者晰甚,已獲得授權(quán)轉(zhuǎn)載衙传。