一行代码蒸发64亿,这个BUG太了不起

转载 dapdap区块链  2018-04-23  阅读 1,937 次

“现在进入你还是先行者,最后观望者进场才是韭菜。”

美图董事长蔡文胜曾在三点钟群,高调的说出了这句话,随即被大众疯传。

在他发表完言论没多久,2月美链(BEC)上交易所会暴涨4000%,后又暴跌。尽管他多次否认,聪明的网友早已扒出,他与BEC千丝万缕的关系。

image.png

庄家坐庄操控币价,美图的股价随之暴涨,蔡文胜顺利完成了他的韭菜收割大计。

但在币圈,割人者,人恒割之。

就在昨天下午,斯嘉丽注意到,BEC智能合约爆出了一个漏,被黑客利用。黑客瞬间转移57,896,044,618,658,100,000,000,000,000,000,000,000,000,000,000,000,000,000,000.792003956564819968个BEC。 

image.png

BEC的64亿市值在瞬间归零,且永不可修复。而这一切,竟然是因为一个简单至极的程序Bug

4月22日中午,媒体突然爆出BEC合约出现重大漏洞,黑客攻击者可无限生成代币。

image.png

这个新闻爆出后,只有少数几家媒体转发了,并未在业界引起大规模讨论。因为多数人都以为这只是一个普通Bug,简单修复后将会继续恢复交易。

但事情的严重性远超普通大众的想象。因为黑客转走的这些代币,很大程度还是在技术上是无法恢复的。

知乎的资深智能合约专家@爬虫,他从技术的专业角度,分析了这次漏洞的严重性。区块链技术的去中心化和不可篡改,决定了所有的智能合约都必须开源才意义,所以我们顺利查到那笔操作记录的地址。

分别给以下两个地址转了账:

我们可以看到执行的方法是 batchTransfer。

image.png

batchTransfer的方法,是用来给指定的几个地址,发送相同数量的代币。常规来说,你能转账的数额,一定无法超过账户余额。

但是,BEC的程序员们,却犯了一个严重的错误,导致了溢出。

image.png

这里我要解释一下什么叫溢出。

在计算机中有个叫“缓冲区”的地方,是用来存储用户输入的数据的,缓冲区的长度是被事先设定好的。

如果用户输入的数据超过了缓冲区的长度,那么就会溢出,而这些溢出的数据就会覆盖在合法的数据上。

这就像杯子装水的道理,水多了杯子装不下,当然就会溢出。

那么,开发者有没有考虑到溢出问题呢?其实他考虑了。

image.png

如上截图中代码显示,除了数额的计算外, 其他的给用户转钱都用了safeMath 的方法。safeMath 是为了计算安全,而写的一个程式。

而为什么偏偏数额的计算这一句,没有用safeMath的方法呢?这就要问写代码的人了...

黑客抓住这个漏洞,瞬间转移了57,896,044,618,658,100,000,000,000,000,000,000,000,000,000,000,000,000,000,000.792003956564819968个BEC。

image.png

导致了BEC市值归零,¥6,447,277,680 人民币的突然蒸发。(数据来源 非小号)

目前,该方法已经暂停了,所以看过文章的朋友,不要妄想着一夜暴富了。

事情已经发生了,被转移的代币不可能找回来。我们唯一能想到的解决方法,就是按照所有用户的余额情况,发行新的token,给之前的用户发送等额的代币。

一行代码蒸发64亿,这个BUG惹不起惹不起。

本文地址:http://www.hantao.org/share/kjzw/675.html
温馨提示:文章内容系作者个人观点,不代表本网站:【Hunter交流空间】故障解决|IT技巧分享|Hunter对观点赞同或支持。
版权声明:本文为转载文章,来源于网络,版权归原作者所有,欢迎分享本文,转载请保留出处!如有侵权,请联系本站进行删除!

发表评论


表情