首页 > 数字货币 > 正文

Bancor的开发者犯了一个普通程序员经常不在意的小失误险酿成大祸

分类:新闻金色财经金色财经 2020-08-01 13:36

在我们写完“以太坊DeFi生态当前最大的安全隐患”这篇文章后,大家对DeFi滥用授权的行为开始提高了重视。

其间还有不少关心资产安全的用户来问我们一些相关事情,其中有一个问题大家最为关心,那就是:

历史上有没有发生过因为滥用授权引发的资产损失事件呢?

答案是,有。

这一切不仅存在理论中,它就发生在你我身边。

我们一起回顾一个真实案例:

故事的主人公是以太坊生态中大名鼎鼎的DeFi项目——Bancor 

而一切就发生在不久前的2020年6月16日,

看到这大家是不是会疑惑,“不久之前”、“明星项目”、“巨大漏洞”这些词汇组合在一起必定是行业讨论的热点。但为什么自己的脑海中没有这件事情的任何印象呢?这样一件巨大的安全事故好像从来没有发生过?

先缓存你的疑惑,让我们把时间回退到2020年6月16日。

看上去很普通的一天,正如你我这些上班族一样,Bancor团队也都在工位上照旧更新自己的Bancor v0.6合约代码。一行又一行的代码,就这样堆叠出 DeFi 打算耸入云霄的新基建。

但谁也不会想到,接下来他们将为这简单几行代码,经历惊心动魄的48小时。

在这之中,到底发生了什么呢?

原来,Bancor 团队的合约开发者犯了一个普通程序员经常不在意的“小失误”,

将一个合约转账操作方法的访问权限误写成了public。这一下就能带来灾难性的后果:任何人都有权限调用这个方法以合约的权限来执行“转账”操作。

至此,任何一个对 Bancor 协议进行过无限授权的普通用户,都只能是待宰的羔羊,在每一秒都面临着自己地址里的资产被他人随意掠夺挥霍的结局,代码并不会同情你为资产的积累付出了多少血泪。

那么这些用户的资产就这样灰飞烟灭了吗?

万幸,这次漏洞并没有被黑客先发现。

Bancor 团队赶在黑客之前,抢先利用起此漏洞,紧急转移了用户地址中的资产,共计455,349 美元。

在接下来的时间,Bancor发布了版本更新,并于2天后的2020年6月18日,对外公布了此次事件的始末,同时对用户进行道歉,承认自己的巨大失误。

在其公告中还提到,Bancor在仓促转移用户地址上资产的过程中引起了市场的波动,并被两个套利机器人借此此获利135,229 美元。Bancor团队呼吁其归还资产,但最终的结果,我们不得而知。

在这次 DeFi 事件中,用户从毫无察觉地丢币再到毫无察觉地失而复得,既风平浪静,又波谲云诡。

至此,整个事件就算告一段落。

但事情应该这样结束吗?

了解完这件事情之后,普通用户可能都会有所反思

“要为自己资产负责,警惕 DeFi 向自己索要无限授权”

“参与DeFi合约的资产最好要分开存储”

“要定期检查下自己有哪些过度授权”

“要......”

但仔细想来,更应该反思的不应该是各个DeFi项目方吗?

但现实并未如你所想,这也正如你的困惑。

为什么几乎没有 DeFi 项目方为此事发表讨论?

为什么生态里的“头部团队们”都捂住了嘴巴?

为什么一件巨大的安全事故最终好像从未发生?

因为几乎所有的 DeFi 项目方和部分钱包团队都在无节制的滥用授权,共同的利益使得所有知情人全部变成了沉默者。

没有修正自身的越权行为,没有展开对风险的思考;

转而将用户的质疑搪塞于各种理论,将用户的安全寄托于各种万幸,

但当不幸真的降临时,谁又能站出来呢?

代码不会同情每个普通用户为资产的积累付出了多少血泪,但是人类的本能会。

作为开发者、作为项目方、作为理应为安全保驾护航的钱包方,不应对滥用授权无动于衷,也不应为了自己能滥用授权就抛弃用户安全。

要时刻记得,仅仅一个月前,大量的用户离钱包内资产灰飞烟灭只差了一个万幸!

Bancor案例原文:

Bancor’s response to today’s smart contract vulnerability
https://blog.bancor.network/bancors-response-to-today-s-smart-contract-vulnerability-dc888c589fe4

三个问题合约代码:

https://etherscan.io/address/0x8dFEB86C7C962577deD19AB2050AC78654feA9F7#code

https://etherscan.io/address/0x5f58058C0eC971492166763c8C22632B583F667f#code

https://etherscan.io/address/0x923cAb01E6a4639664aa64B76396Eec0ea7d3a5f#code

有问题的合约方法:

function safeTransferFrom(IERC20Token _token, address _from, address _to, uint256 _value) public

上一篇:在 DeFi 晴朗的天空上,还飘忽着几朵令人不安的乌云

下一篇:币汐柔:8.1比特币投资路上不管你是入市中还是观望中请看完这些

猜您喜欢
关于我们联系我们作者投稿APP下载