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