以太坊ERC827模板安全事件跟踪
摘要: EIP827 即 ERC827 标准的提案,是以太坊平台众多提案之一,为 Token 标准提案,它是对 ERC20 标准的扩充。
事件回顾:
2018年6月24号,中国安全团队发现了不少 ERC827 合约实现存在类ATN Token 漏洞。黑客可以利用该漏洞,以合约的身份调用任意合约地址上的任意函数。其中大部分问题合约参考了 OpenZeppelin 官方提供的 ERC827 模板。
EIP827 是以太坊平台一种Token标准提案
EIP827 即 ERC827 标准的提案,是以太坊平台众多提案之一,为 Token 标准提案,它是对 ERC20 标准的扩充。
ERC827 标准在 ERC20 的基础上增加了三个接口 transferAndCall() ,transferFromAndCall(),approveAndCall()。
这三个函数中都有一个 call() 函数的操作,即允许用户通过该合约随意调用任意地址上的任意函数。以 transferAndCall() 为例,函数中转账操作完成后,会调用 _to 地址上的任意函数,并且参数 _data 由调用者任意指定。攻击者可以很容易地借用当前合约的身份来对 to合约执行 任何操作,比如盗取 Token 或者绕开权限检查等。
ERC827 Token 合约设计和实现上允许用户自定义 call() 任意地址上任意函数来实现“接收通知调用”功能,攻击者可以很容易地借用当前合约的身份来进行任何操作。
这通常会导致以下危险的后果:
后果一:允许攻击者以缺陷合约身份来盗走其它 Token 合约中的 Token
后果二:与 ds-auth 之类的鉴权机制结合,绕过合约自身的权限检查
后果三:允许攻击者以缺陷合约身份来盗走其它 Token 账户所授权(Approve)的 Token
后果四:攻击者可传入虚假数据欺骗 Receiver 合约
OpenZeppelin 已经移除 ERC827 合约模板
这些问题合约部分参照了 OpenZeppelin 提供的合约模板。
目前 OpenZeppelin 官方仓库中 ERC827 合约的实现已经被移除,
ERC827提案的作者表示:“非常感谢中国安全团队小伙p0n1的分析,并十分同意p0n1的商议,他们将会移除在OpenZeppelin官方仓库中的ERC827合约,并且认为应将目前未被广泛采纳的提案放入一个单独的文件咋。
特别提醒:
新项目方:进行智能合约开发时,目前请不要使用 ERC827 代码模版
DApp开发团队:DEX 和 DApp 开发者目前请勿与使用 ERC827 Token 的合约进行交互对接;已采用 ERC827 提案的 DApp 开发团队请进行自查,评估所受影响
用户与交易所:请对相关项目保持密切关注
目前有活跃交易的 ERC827 Token 有:
评论(0)
Oh! no
您是否确认要删除该条评论吗?