【得得预警】史上影响范围最广的智能合约缺陷浮出水面
摘要: 近期安比(SECBIT)实验室发现2600多个合约存在函数不兼容缺陷,严重威胁区块链行业生态健康。
安比(SECBIT)实验室近期在分析监控以太坊上部署的大量智能合约时,持续不断地发现有ERC20 Token 智能合约实际上并没有严格遵守 ERC20的规范。这类非标准的Token合约在以太坊的工具链没有升级到新版本之前,并没有带来什么明显的问题。
但是近日随着以太坊智能合约语言编译器 Solidity的升级,这类非标准合约的缺陷被逐步放大,有可能会导致基于ERC20标准的DAPP发生大规模异常。这类DAPP会包括去中心化交易所,链上资产托管,链上钱包等应用。
经安比智能监控平台的初步统计,存在该问题的合约多达2603个,其中不乏多个市值较大的明星币种。目前多数DAPP开发团队并没有充分认识到这一问题的严重性。
不兼容问题及其原因是什么?
这些出问题的ERC20合约中的transfer函数没有返回值,而按照ERC20规范,transfer函数应该返回bool类型的值。当外部合约(DAPP)按照ERC20规范来调⽤这些⽆返回值的transfer函数时,在0.4.22之前的编译器版本编译时,不会有大的问题,但是当这些外部合约采用0.4.22及以上版本编译时,其调用会导致异常,致使转账失败。
这些合约都来源于一些公开的ERC20代码实现,其中不乏Open Zeppelin和以太坊官网这样的权威网站的ERC20代码。Open Zeppelin历史一段时期推出的合约存在该问题,影响的合约数量为292个,受影响的函数有transfer、transferFrom、approve;以太坊官方的ERC20智能合约一直存在该问题,直到昨天安比(SECBIT)实验室向以太坊官方提交issue修正此问题(https://github.com/ethereum/ethereum-org/pull/859),该问题合约影响的合约数量为1703个,受影响的函数为transfer函数。该类问题对所有通过外部合约(DAPP)来调⽤Token合约transfer函数的场景都将产⽣极⼤的影响,如果未来DAPP开发团队不加以重视,可能致使DAPP功能瘫痪,这其中受影响最大的是各个去中心化交易所。
受影响的智能合约有哪些?
以下是本次事件中etherscan上所有Token市值排名靠前的合约中存在transfer函数、transferFrom函数、approve函数没有return值的合约列表。
目前安比(SECBIT)实验室团队与LRX(LoopRing)等达成技术合作,已经制定相应解决方案,后续不会受此问题影响;团队也与BNB(Binance Coin)第一时间取得联系,经过确认BNB团队已经针对此问题制定相应解决方案,后续不会受此问题影响;团队与去中心化dex.top和ddex.io也第一时间取得联系,并迅速对问题的解决方案达成一致,目前这两家交易所的线上合约使用的是0.4.21之前的编译器编译,因此暂时不受该问题影响。
相比这些出问题的智能合约,涉及交易的DAPP受影响更大,例如去中心化交易所。如果去中心化交易所发布的DAPP是用0.4.22及以上版本编译的,将导致涉及问题合约的交易无法正常进行。
如何提高智能合约安全性?
在这2600多份合约中,很多已经上线去中⼼化交易所,⽽去中⼼化交易所势必会按照EIP20规范实现来调用transfer函数,⼀旦使用0.4.22版本以上的solidity编译合约,后果不堪设想。另外即使是以太坊官网、Open Zeppelin这样的知名网站,也难免会出现疏漏,公布缺陷代码。我们建议各项目团队,在拷贝使用网络公开代码的时候,一定要也一定要及时咨询专业合约审计机构的建议。
针对今天暴露的智能合约问题,安比(SECBIT)实验室在这里提供了技术解决方案:https://github.com/sec-bit/badERC20Fix/
在“SECBIT技术社区”的官方公众号最新推文中有详细剖析及应对预案。
目前安比(SECBIT)实验室已与诸多去中心化交易所和项⽬⽅取得联系,确认该问题。同时安比(SECBIT)实验室也在持续跟进该问题,很快将会给出更为明确的解决⽅案,请大家关注安比(SECBIT)实验室后续报道。我们呼吁以太坊社区能够重视合约兼容性问题,为 DAPP 的发展打下良好的基础。
以上观点由安比(SECBIT)实验室提供。
安比(SECBIT)实验室由中科大郭宇博士创立,聚焦智能合约安全研究,致力于打造健康有序的区块链经济体。
评论(0)
Oh! no
您是否确认要删除该条评论吗?