漏洞分析 | 浅析AMR智能合约批量转账溢出漏洞

通证增加量时发生溢出漏洞,BUGX.IO安全团队经过研究分析发现,同类漏洞仍在以太坊里面部分存在。

以下为漏洞分析过程:

原理

 

totalTokensToTransfer += tokens[i]; 这一句溢出,溢出后,totalTokensToTransfer 变小了,从而绕过了 assert (balances[msg.sender] > totalTokensToTransfer); 的判断,这样就能花极少的token ,任意增加目标地址的token。

看到攻击者的攻击行为:

https://etherscan.io/tx/0xd4ee42c454941fccb5d03f6155e288f28cc00473ba927ee4b19ad4e2bfc68b68

图片1.png

可以看到这两个 tokens 值都是 uint256 最大值的一半,两个加起来刚好溢出变为 0。

漏洞复现

1. 部署 AMR 合约。

2. 因为需要攻击者 token 数量大于0,所以先使用管理员账户给攻击者地址充 token。

“0x14723a09acff6d2a60dcdf7aa4aff308fddc160c”,1

图片2.png

使用 balanceOf 可以查看到 0x14723a09acff6d2a60dcdf7aa4aff308fddc160c 有 balances 为 1

图片3.png

3. 使用漏洞溢出攻击

这里需要两个地址,一个是攻击者,另一个为其它地址,这里设置 0 地址就行。

执行 multiTransfer 就行。

["0x14723a09acff6d2a60dcdf7aa4aff308fddc160c","0x0000000000000000000000000000000000000000"],["57896044618658097711785492504343953926634992332820282019728792003956564819968","57896044618658097711785492504343953926634992332820282019728792003956564819968"]

图片4.png

4. 查看攻击者余额

图片5.png

可以看到攻击者余额已经变得非常大。

修复方案

1. 使用 safeMath 即可解决此问题。

2. 以太坊的大部分合约是以 transfer 的形式进行转账,此方法也可以避免溢出问题。

进一步探索

在对以太坊上做进一步探索的时候,我们发现批量转账功能或者批量充值功能的实现主要有以下几种形式:

1. 合约部署时使用批量充值功能

此功能在构造函数中实现,只有部署的时候能够使用,所以不可利用。

 

2. 管理者调用批量转账功能

 

我们看到了不少这种形式的写法,通过 amount += _value[j]; 的增加,溢出后绕过了 require(balanceOf[msg.sender] >= amount); 的检测。

漏洞影响范围

研究此漏洞原理后,我们使用自研的审计系统”以太坊冲击波”,对以太坊上的合约进行整体监测,发现了以下合约均存在此漏洞。

合约名称地址
AMMBR (AMR)0x96c833e43488c986676e9f6b3b8781812629bbb5
Beauty Coin (BEAUTY)0x623afe103fb8d189b56311e4ce9956ec0989b412
Beauty Coin (Beauty)0xb5a1df09ccaa8197d54839c2c9175ec32b560151
Car Token (CRT)0xdf4b22695eeb4a7a1cf9a42162285ce782b8427a
KoreaShow0x330bebabc9a2a4136e3d1cb38ca521f5a95aec2e
Pasadena Token (PSDT)0x80248bb8bd26f449dea5b4d01faf936075b7111d
Rocket Coin (XRC)0x6fc9c554c2363805673f18b3a2b1912cce8bfb8a
Sinphonim (SPM)0x715423a818f1f9a85c66d81d2809e0a4dadf07f3
Social Chain (SCA)0xb75a5e36cc668bc8fe468e8f272cd4a0fd0fd773

资料

AMR 合约地址:< https://etherscan.io/token/0x96c833e43488c986676e9f6b3b8781812629bbb5?a=0x632e68e19107b71fc6e6b94643cc96819017c118>

团队介绍

BUGX.IO是一家致力于区块链领域的安全公司。核心团队组建于2014年,我们在区块链生态安全、行业解决方案、安全建设、红蓝对抗等方面有深厚积累与过硬专业素养。

*本文作者:BUGX.IO-Tri0nes

本文由 孤独常伴 作者:孤独常伴 发表,其版权均为 孤独常伴 所有,文章内容系作者个人观点,不代表 孤独常伴 对观点赞同或支持。如需转载,请注明文章来源。

0

发表评论