ERC20不一致性检查(新增balnaces不一致检查漏洞)

作者:网友投稿 时间:2018-07-26 01:10

字号

BUGX.IO团队对此漏洞类型进行了深入的分析,发现了不仅存在 `allowed[_from][msg.sender]` 这一语句的检查不一致,还存在 `balances[msg.sender]` 语句的检查不一致漏洞。

二、漏洞原理 1、allowed不一致性检查漏洞

1.png

如上面代码所示:

`require(_value <= allowed[_from][msg.sender]);`

这一句的条件检测与

`allowed[_from][_to] -= _value;`

这一语句的操作不相符,导致设置转账额度权限后,攻击者能够持续转账,直到转完所有余额。

2、balances 不一致性检查漏洞

2.jpg

如上面代码所示:

`require(balances[msg.sender] >= _value);`

这一句的条件检测与

`balances[_from] -= _value;`

这一语句的操作不相符,攻击者能够通过溢出,让`_from`账户余额获得极大的token 数量。

同时,有一些合约中使用了 safeMath 安全方法进行计算 `balances[_from] = balances[_from].sub(_value);`,所以暂时没有溢出问题,但是条件检查部分是冗余的。

三、漏洞复现 1、allowed 不一致性检查漏洞复现

部署 Lightcoin 合约,合约地址:

https://etherscan.io//address/0xd97579Cea3fE2473682a4C42648134BB982433B9 

管理者:0xca35b7d915458ef540ade6068dfe2f44e8fa733c

攻击者:0x14723a09acff6d2a60dcdf7aa4aff308fddc160

攻击者2:0x4b0897b0513fdc7c541b6d9d7e929c4e5364d2db

管理者身份:管理者给予攻击者一定的转账额度权限

approve: "0x14723a09acff6d2a60dcdf7aa4aff308fddc160c",10000

使用 allowance 查看转账额度:

"0xca35b7d915458ef540ade6068dfe2f44e8fa733c","0x14723a09acff6d2a60dcdf7aa4aff308fddc160c" 

图片4.png

此时此时攻击者2的余额为 0:

图片5.png

切换为攻击者身份:

攻击者使用 transferFrom 向攻击者2进行转账操作

transferFrom: "0xca35b7d915458ef540ade6068dfe2f44e8fa733c","0x4b0897b0513fdc7c541b6d9d7e929c4e5364d2db",10000

攻击者继续使用 transferFrom 向攻击者2进行转账操作,仍然能转账成功,因为 `allowed[_from][msg.sender]`没有发生变化,而攻击者2的余额依然增加了。 

transferFrom: "0xca35b7d915458ef540ade6068dfe2f44e8fa733c","0x4b0897b0513fdc7c541b6d9d7e929c4e5364d2db",10000 

图片6.png

通过此攻击,攻击者能够将 _from 账户里的所有余额转移到其它用户余额中。并且`allowed[_from][_to]`是溢出了的。

allowance : "0xca35b7d915458ef540ade6068dfe2f44e8fa733c","0x4b0897b0513fdc7c541b6d9d7e929c4e5364d2db"

2、balances 不一致性检查漏洞复现

图片7.png

2、balances 不一致性检查漏洞复现

部署 CountryCoin (CCN) 合约进行复现。

合约地址: 

管理者:0xca35b7d915458ef540ade6068dfe2f44e8fa733c

攻击者1:0x14723a09acff6d2a60dcdf7aa4aff308fddc160

攻击者2:0x4b0897b0513fdc7c541b6d9d7e929c4e5364d2db

攻击者1先通过充值获取一定的 token。

图片8.png

至此即为初始化条件,攻击者有两个账户地址,其中余额分别为 10000 和 0,我们接下来的攻击就是让第二个账户溢出。

切换到攻击者2,攻击者2给予攻击者1一定的转账额度权限

approve: "0x14723a09acff6d2a60dcdf7aa4aff308fddc160c",10000

责任编辑:CQITer新闻报料:400-888-8888   本站原创,未经授权不得转载
继续阅读
热新闻
推荐
关于我们联系我们免责声明隐私政策 友情链接