以太坊erc20智能合约任意转账漏洞分析

来源:安全客 作者:张雪峰 2018/05/25

漏洞描述 以太坊erc20智能合约存在漏洞,transferFrom转账函数校验不严格,导致攻击者可以转走任意用户的代币。

漏洞描述 以太坊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库函数来进行数字运算操作,防止任意转账的操作。

编辑:郭竞
分享到:

相关新闻