6月16日,有人在ICX项目官方github仓库中报告了一个智能合约代码的漏洞,该漏洞使得使transfer功能失效,安比(SECBIT)实验室对合约代码进一步深入分析指出,这个漏洞产生的原因是任何人都能随意开启和关停合约的主要功能(包括转账,授权和烧币)。
ICX的 Token 合约中有一个变量tokenTransfer,只有该变量为true时,所有解锁的账户才可能执行转账,授权他人转账和烧币的操作(这几个操作的函数均使用了isTokenTransfer修饰器)。其中,unlockaddress数组保存着所有的解锁账户的状态,由owner来设置。
在ICX 的 Token 合约中,有两个函数enableTokenTransfer 和disableTokenTransfer,用来修改tokenTransfer的值。
这两个函数均使用了一个修饰器,名称为onlyFromWallet。从字面意思理解来看,这个修饰器的作用是仅有walletAddress 账户才可以调用这两个函数。然后不幸的是,在onlyFromWallet的具体实现中,将判断条件写反了!!!也就是说,除了walletAddress以外,所有账户都可以通过修改tokenTransfer,来控制合约功能的开启和关停。
目前,ICX项目的Token已经在币安、OKex、火币等著名交易所上线交易。但安比实验室提醒大家无需恐慌,该漏洞只会导致这部分功能暂时无法正常使用,并不会影响对账户本身的安全造成实质性的影响。同时,经过与项目方接触,对方回复已经采取措施,保护交易不受影响,同时也在积极修复此Bug。
从此Bug也可以看出,ICX项目的智能合约在部署前缺少测试和安全审计,安比实验室再次提醒各项目方,一定要加强智能合约的测试和安全审计工作。
以上观点由安比(SECBIT)实验室提供。
安比实验室由中科大郭宇博士创立,聚焦智能合约安全研究,致力于打造健康有序的区块链经济体。
免责声明: 文章源于会员发布,不作为任何投资建议
如有侵权请联系我们删除,本文链接:https://www.sws100.com/biquan/205656.html