1、 事件简介
2020-06-18(本文中提到的时间是UTC时间),位于火币网上的智能合约Bancor network被发现存在严重漏洞。该漏洞最早由Bancor网络团队和white hat发现,存在被盗风险的资金在第一时间转移,涉及金额超过50W美元。
在这种情况下,有三个合同地址存在以下漏洞:
0x923cab01e6a4639664aa64b76396eec0ea7d3a5f
0x8dfeb86c7c962577ded19ab2050ac78654fea9f7
0x5f58058c0ec971492166763c8c22632b583f667f
2020年6月18日3:06:48,Bancor network团队利用此漏洞转移具有**风险的用户资金。截至2020年6月18日6时56分,Bancor网络团队共转账约409656美元。
另外两个公开电子邮件地址:
0x052ede4c2a04670be329db369c4563283391a3ea
0x1AD1099487B11879E616CA1CEEE486D1EFA7B00
同时,此漏洞还用于转移用户资金,分别为131889美元和2346美元。
到目前为止(2020-06-19):
火币4 erscan已将此漏洞标记为合同,如下图所示:
图1
Bancor网络团队也对事件做出了回应,
有关详细信息,请参见
( https://blog.bancor.network/bancor s-response-to-today-s-art-contract-ulnerability-dc888c589fe4),
并在2020年6月17日联合技术标准时间21:35:53部署了新的Bancor网络合同。合同地址是
0x2f9ec37d6ccfff1cab21733bdadede11c823ccb0
2、 原理分析
漏洞发生后,成都连锁安全团队**对该事件进行跟踪分析。根据对该链的分析结果,造成该事件脆弱性的主要原因是智能合约Bancor网络中存在一个具有public调用权限的函数safetransferfrom。通过调用此功能,用户可以授权Bancor将智能合约网的资金转移到任何地址。
从源代码可以看出,该函数是一个公共函数,具体代码如下图所示:
图2
safetransferfrom函数在内部调用execute函数。execute函数的作用是调用代币智能合约的transferfrom函数执行**传输。execute函数的源代码如下图所示:
图3
我们可以清楚地看到通过链上的事务调用此函数的具体功能。例如,地址“0xc802”发起事务,调用智能合约“0x5f58”的safetransferfrom函数,将地址“0x8a39”中的0.000000000000000000000003代币mfg发送到“0x2955”,如下图所示:
图4
以上是对该事件漏洞的原理分析。此漏洞的原理非常简单,因为函数调用权限设置不正确,并且应该仅由协定本身调用的函数设置为由任何人调用。当Bancor network有用户授权限制时,任何人都可以通过调用safetransferfrom函数作为Bancor network的**转移用户资金。
对于此漏洞,有两点值得我们深入分析:
一。为什么Bancor网络契约的safetransferfrom功能将权限设置为public。
2。Bancor网络契约的主要功能是代币转换,而不是钱包。为什么用户有未使用的授权。
对于第一个问题,我们跟踪了safetransferfrom函数的调用,发现safetransferfrom函数只在handlesourcetoken函数中调用,该函数用于将用户的代币传输到该合约。
handlesourcetoken函数的源代码如下图所示:
图5
由于它只在handleSourceToken函数中调用,显然不需要设置公共权限。根据业务情况,Bancor网络的主要功能是代币交换,不需要用户主动调用safeTransferFrom,也不需要设置safeTransferFrom为公共权限。因此,我们比较了合同中设置为公共许可的其他几个功能。如下图所示:
图6
因此,对于第一个问题,我们推测,将这些功能设置为公共许可可能是由于合同开发者的疏忽所致。目前(2020-06-19),Bancor网络团队部署的新合同也证实了这一猜测。
根据链上的代码,正式部署的新契约已经更改了相关功能的所有权限(尽管其他功能与此事件无关)。具体代码如下图所示:
图7
为了解决第二个问题,我们跟踪发现漏洞后转移资金的地址,发现这些地址经常超过授权Bancor network时需要交换的代币数,并且在交换完成后没有恢复配额。如下图所示:
图8
“0x624frdquo”开头的地址向Bancor network contract授权900000000个ong代币,超过了ong的发行量,相当于向Bancor network contract授权“0x624frdquo”拥有的所有ong代币。在跟踪“0x624f”起始地址的事务时,我们发现在代币交换之后,我们没有使用所有授权限制,但没有恢复它们。
综上所述,我们推测用户可以随时考虑使用。为了方便起见,所有代币都被授权在同一时间签订Bancor网络合同。也可以是Bancor网络的前端设置授权量的默认值。
但这种行为有很大的风险。一旦智能合约爆发,资金很容易被攻击者偷走。在分析后续的新Bancor网络契约时发现,Bancor网络团队和用户似乎意识到了这个问题的巨大风险,并做出了相应的安全保护。
如下面的图9和图10所示,很容易看出两个授权之间的时间区间非常短。当用户成功交换代币时,将恢复剩余的授权。
图9
图10
3、 结论
Bancor网络此次暴露的漏洞是一个相对简单的漏洞,在代码审计过程中很容易发现,但该漏洞的影响非常大。仅上线两天,涉案基金已超过50W美元。
幸运的是,Bancor网络团队及时发现并修复了漏洞,否则后果不堪设想。成都链安研究团队在此提醒各大智能合约运营商,由于区块链合约在部署后具有不可更改的特点,与传统软件相比,上线前进行全代码审核非常重要。虽然此次事件没有造成太大的经济损失,但势必会让用户对Bancor网络团队产品的安全性产生质疑。
此外,它还提醒用户和运营商,在向第三方合同授权资金时应谨慎。他们不应该盲目相信“大公司”任何合同的授权都应坚持**限度的原则,不要让自己的资金安全地掌握在他人手中。
文章标题:成都联安:Bancor网络漏洞事件分析
文章链接:https://www.btchangqing.cn/45349.html
更新时间:2020年06月28日
本站大部分内容均收集于网络,若内容若侵犯到您的权益,请联系我们,我们将第一时间处理。