ERC20 token 漏洞事件回顾
在 ERC20 Token 逐渐成熟和完善的发展过程中,不少 ERC20 智能合约曾出现过重大漏洞,对项目方、投资人、交易所甚至整个以太坊社区造成了比较大的经济损失。例如:
2016 年 6 月 18 日,DAO 合约遭到攻击,导致超过 3,600,000 个以太币 (ETH) 被盗,迫使以太坊社区不得不采取硬分叉的手段来减少损失,而这更是直接引起了以太坊社区的分裂。
2018 年 4 月 22 日,黑客攻击了美链 (BEC) 的 Token 合约,通过一个整数溢出漏洞,一时间 BEC 的价格几乎归零。我们发现至少有10份合约存在该类问题。
2018 年 4 月 25 日,SMT 爆出类似整数溢出漏洞,黑客制造和抛售了天文数字规模的 Token,导致 SMT 价格崩盘。
2018 年 5 月 20 日,严重的逻辑漏洞导致 EDU 用户的 Token 可被任意转出,同时还有其它 3 个 Token 存在相同问题。
2018 年 6 月 12 日,一系列 ERC20 智能合约整数溢出漏洞 (CVE-2018-11687, CVE-2018-11809, CVE-2018-11810, CVE-2018-11811, CVE-2018-11812) 又被爆出,据不完全统计有 800 多个合约受到影响。
大量 ERC20 Token 实现未严格遵守规范
未参照 ERC20 标准实现 Token 合约会给 DApp 开发带来较大的困扰。某知名 DApp 团队在深入分析了排名前20的合约之后,提示社区需要对 Token 合约的诸多实现问题和不规范行为重视起来[9],尤其是对于新的 DApp 开发者,提早避免一些问题。
Nearly a third of the time developing Bskt was spent auditing external dependencies. We highly encourage other Ethereum dev teams to be aware of the dangers in external dependencies. Unlike software development in most systems, it’s critical to read the implementation of deployed contracts you depend on — not just the interface.
我们还注意到,大量已部署 Token 合约曾经参考了以太坊官网(现已修复)以及 OpenZeppelin (52120a8c42 [2017年3月21日] ~ 6331dd125d[2017年7月13日]) 给出的不规范代码模板,在 Solidity 编译器升级至 0.4.22 后出现严重的兼容性问题,难以对接分布式交易所(如DEX)等其它 DApp [7]。据不完全统计,存在该类问题的合约超过2000份。
若干 Token 合约在标准 approve() 函数中添加了对当前账户余额校验逻辑。导致采用类似 0x 协议的诸多DApp(如DEX)有可能无法正常完成 approve(),必须由 Token 项目方提前转入一笔数额巨大的 Token 至中间账户,这给DApp和交易所带来了诸多不便[8]。超过17份合约存在该问题。
ERC20 规范中规定了几个可选的通用查询接口如 name()、symbol()、decimals() ,因而大量 Token 合约未提供这些接口,甚至不少采用 NAME()、SYMBOL()、DECIMALS() 等不一致的写法,也给合约的外部调用带来了极大的麻烦。存在该类问题的合约超过3000份。
ERC20 标准中还规定了 Transfer 和 Approval 事件必须在特定场景下触发。很多 Token 的实现参考了以太坊官网的不标准代码(现已修复),漏掉触发 Approval 事件的操作。存在该类问题的合约超过1800份。
版权申明:本内容来自于互联网,属第三方汇集推荐平台。本文的版权归原作者所有,文章言论不代表链门户的观点,链门户不承担任何法律责任。如有侵权请联系QQ:3341927519进行反馈。