作者:莫良@BYSEC.IO
0x00 项目简述
Ammbr主要目标是打造具有高度弹性且易于连接的分布式宽带接入平台,同时降低上网相关成本。Ammbr打算创建具有人工智能和智能合约功能的高通量区块链平台,在为无线宽带用户清除障碍的同时,确保无数接入基础架构所有者公平参与。自2017年9月1日起发售AMMBR代币。
0x01 漏洞详情
合约地址:
0x96c833e43488c986676e9f6b3b8781812629bbb5
合约代码地址:
https://etherscan.io/address/0x96c833e43488c986676e9f6b3b8781812629bbb5#code
合约类型:ERC20(https://github.com/ethereum/EIPs/issues/20)
漏洞函数:multiTransfer
漏洞类型:整数溢出
漏洞危害:可导致增发任意数额的AMR代币至任意以太坊账户。
0x02 细节分析
代码201行在处理输入参数tokens数组累加的时候,没有使用SafeMath,使得攻击者有机会构造一次整数溢出,导致后续计算totalTokensToTransfer时值可以被攻击者篡改,最终导致绕过204行余额检查,转出巨额资产。
整数溢出的原理非常简单,原理如图所示,如果两个8位变量A和B按位相乘,结果超出8位,超出位将被丢弃,只保留后8位长度。该漏洞中的产生溢出的变量名为totalTokensToTransfer,该变量类型为uint,在Solidity中,uint长度为256位,所以只要累加超过2^256-1大小的数,将会导致整数溢出。
0x03 修复建议
将201行使用SafeMath改为:
totalTokensToTransfer = totalTokensToTransfer.add(tokens[i]);
声明:本文来自BYSEC.IO,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。