漏洞描述 以太坊erc20智能合约存在漏洞,transferFrom转账函数校验不严格,导致攻击者可以转走任意用户的代币。
漏洞影响
昨天,经过360智能合约平台监控发现,edu代币存在交易异常,经过分析发现,其智能合约transferFrom函数存在问题,导致攻击者可以转走任意用户的代币,最后经过分析发现包括EDU在内总共有7个智能合约存在相同的问题,其代币合约地址:
1.0x81f074bb3b158bf81799dcff159521a089e59a37
2.0x6ec0a0901715e0d015fd775e5dfddd7f2de0308e
3.0x87be146d2e2d2ae71a83895a3ad15c66546af5e2
4.0xf270f361edca19f7063184b0e6b4f264468ecbc1
5.0x0156888f51d68f858ac88aba45df699e2af2e4cc VRT
6.0x14d9779b6585f3a7d4f768383b3cb030705dad2e BAI
7.0xa0872ee815b8dd0f6937386fd77134720d953581 EDU
其中前四个合约已经很久没有交易,基本废弃。目前还在交易的,影响比较大的是后三个代币。
以EDU代币为例,我们可以看到较近交易数据中存在大额交易异常,如下图所示:
111
漏洞成因
经过分析发现EDU代币的transferFrom函数中,allowed[from][msg.sender]减去要转账的数字时候,没有对比allowed[from][msg.sender]的值与value的值得大小,从而使得可以转走比allowed[from][msg.sender]大的数目的代币。
222
如何避免这个问题
经过对这些合约的分析,我们发现基本上合约开发人员会去校验blances[from]的值,而对allowed[from][msg.sender]的校验却忽略了,合约开发者开发者应该去选择调用更安全的safemath库函数来进行数字运算操作,防止任意转账的操作。