一行代码蒸发了6,447,277,680人民币!

点击上方“程序员共读”,选择“置顶公众号”

关键时刻,第一时间送达!

近日,OKEx 发布公告,暂停 BEC 交易和提现。

而在此公告之前的一个多小时,一篇名为“一行代码蒸发了 6,447,277,680 人民币!”的文章已经在币圈和链圈流传,文中分析了漏洞产生的原因。

据分析,BEC 智能合约(https://etherscan.io/address/0xc5d105e63711398af9bbff092d4b6769c82f793d)中的 batchTransfer 批量转账函数存在漏洞,攻击者可传入很大的 value 数值,使 cnt * value 后超过 unit256 的最大值使其溢出导致 amount 变为 0。

你传几个地址给我(receivers),然后再传给我你要给每个人多少代币(value),发送的总金额 = 发送的人数*发送的金额,所以这会要求你当前的余额大于发送的总金额。

当其设置的值超过了取值范围时,就会出现“溢出”漏洞,黑客利用这个漏洞就可无限生成新的代币。

就一个简单的溢出漏洞,导致 BEC 代币的市值接近归 0。但事实上开发者也考虑到溢出问题了,如下:

除了 amount 的计算外, 其他的给用户转钱都用了 safeMath 的方法(sub,add),safeMath 是为了计算安全而写的一个 library。

那么,为啥就偏偏这一句没有用 safeMath 的方法呢。这就只能问写代码的人了。还好,目前 BEC 已暂停交易,但究竟生成了多少代币,还未公布。

来自:程序员头条

链接:https://www.jianshu.com/p/de8c991a14d1

程序员共读整理发布,转载请联系作者获得授权

【点击成为Java大神】

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180427B1J2L700?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券