2018-6-20 13:36
来源: tokentalk
安比(bǐ)(SECBIT)实(shí)验室根(gēn)据ICX项(xiàng)目官方github仓库(kù)中报告的一个智能合约(yuē)代码的漏洞,深入分(fèn)析后确认该漏洞(dòng)产生的原因是任何人都能随(suí)意(yì)开启(qǐ)和关停(tíng)合约(yuē)的主(zhǔ)要功能(包括转账,授(shòu)权和烧(shāo)币)。
github地址:https://github.com/icon-foundation/ico/issues/3 (汇报人id:VexyCats)
ICX的 Token 合约(yuē)中有一个变(biàn)量tokenTransfer,只有该变(biàn)量为true时,所(suǒ)有解(jiě)锁(suǒ)的账户(hù)才可能执行转账,授权他人转账和烧币的操作(这几个操作的函数均使用了(le)isTokenTransfer修饰器(qì))。其中,unlockaddress数组保存(cún)着所有的(de)解锁(suǒ)账户(hù)的状态,由owner来设置。
在(zài)ICX 的 Token 合约中,有两个(gè)函数enableTokenTransfer() 和disableTokenTransfer(),用(yòng)来修改tokenTransfer的值。
这两个函(hán)数均(jun1)使用(yòng)了一个修饰器(qì),名称为onlyFromWallet。从字面意思(sī)理解来(lái)看,这个修(xiū)饰器(qì)的作用是仅有walletAddress 账户才可(kě)以调(diào)用这两个函数。然后不(bú)幸的是,在onlyFromWallet的具体实现(xiàn)中,将判断条(tiáo)件写反了!!!也就(jiù)是说,除了walletAddress以外,所有账户都可以通(tōng)过修改tokenTransfer,来控制合约功能(néng)的开启和(hé)关停。
目前,ICX项目的Token已经在币安(ān)、OKex、火币等著(zhe)名交易所上(shàng)线交易(yì)。但(dàn)安比实(shí)验室(shì)提醒大家(jiā)无需恐(kǒng)慌,该(gāi)Bug只会导致(zhì)这部(bù)分功能暂时无法正常使(shǐ)用(yòng),并(bìng)不会对(duì)账户本身(shēn)的安全造成实质性的影响。同时(shí),经过与项目方接触,对方回复(fù)已经(jīng)采取(qǔ)措施,保护交易不受影响,同时也在积极修(xiū)复此Bug。
从此(cǐ)Bug也可以看出,ICX项目的智能合约在部(bù)署前缺少测试和安全审计,安比(bǐ)实验室再次提醒各(gè)项目方(fāng),一定要加强智能合(hé)约的测试和(hé)安全审(shěn)计工(gōng)作。
以上观点由安比(bǐ)(SECBIT)实验室提供。