成都链安揭秘:BancorNetwork漏洞事件详解

OKX欧易app

OKX欧易app

欧易交易所app是全球排名第一的虚拟货币交易所,注册领取6万元盲盒礼包!

APP下载   官网注册

一、事件简述

2020-06-18(文中所提及时间均为UTC时间),以太坊上的智能合约BancorNetwork被发现存在严重漏洞。漏洞由BancorNetwork团队和白帽合作发现,并立即进行了风险转移,涉及资金50万余美元。

此次事件中,存在漏洞的合约地址主要有如下三个:1. 0x923cab01e6a4639664aa64b76396eec0ea7d3a5f2. 0x8dfeb86c7c962577ded19ab2050ac78654fea9f73. 0x5f58058c0ec971492166763c8c22632b583f667f

2020-06-18 03:06:48,BancorNetwork团队利用该漏洞将存在被盗风险的用户资金进行了转移,截至2020-06-18 06:56,BancorNetwork团队共计转移资金约为$409,656。

另外两个公开邮箱信息的地址:1. 0x052ede4c2a04670be329db369c4563283391a3ea2. 0x1ad1099487b11879e6116ca1ceee486d1efa7b00也在同一时间利用该漏洞对用户资金进行了转移,分别转出资金$131,889和$2,346。

到目前为止(2020-06-19):EtherScan已经将存在该漏洞的合约进行了标注,详情见图一。

BancorNetwork团队也对此次事件做出了回应,详细内容见https://blog.bancor.network/bancors-response-to-today-s-smart-contract-vulnerability-dc888c589fe4,并于UTC时间2020-06-17 21:35:53部署了新的BancorNetwork合约,合约地址为0x2f9ec37d6ccfff1cab21733bdadede11c823ccb0。

二、原理分析

漏洞爆出后,成都链安安全团队第一时间对本次事件进行了跟踪分析。根据链上分析结果发现,此次事件中漏洞产生的主要原因是智能合约BancorNetwork存在一个调用权限为public的函数safeTransferFrom,通过调用此函数,可以将用户授权给智能合约BancorNetwork的资金转出到任意地址。

由源码可以知,该函数为一个public函数,详细代码见图二。

safeTransferFrom函数内部调用了execute函数。而execute函数的功能是调用safeTransferFrom参数中的_token代币智能合约的transferFrom函数进行代理转账。execute函数源码见图三。

我们通过一笔链上交易可以清晰地看到调用此函数的具体作用。如地址“0xc802”发起一笔交易,调用了智能合约“0x5f58”(即BancorNetwork)的safeTransferFrom函数,使地址“0x8a39”中的0.000000000000000003代币MFG发送到“0x2955”(图中的“Bancor: WhiteHatS...)。具体如图四所示。

以上就是本次事件漏洞的原理分析。该漏洞的原理十分简单,是因为函数的调用权限设置错误,将本应该只有合约本身调用的函数,设置成了任何人都可以调用。当BancorNetwork拥有用户的授权额度时,任何人都可以通过调用safeTransferFrom函数,以BancorNetwork的身份对用户的资金进行代理转账。

针对该漏洞,有两点值得我们进行深入分析:1. 为什么BancorNetwork合约的safeTransferFrom函数会将权限设置成public。2. BancorNetwork合约的主要功能是代币转换,并非一个钱包,为什么用户会有未使用的授权。

对于第一个问题,我们追踪了safeTransferFrom函数的调用情况,发现safeTransferFrom函数只在handleSourceToken函数中被调用,用于将用户的代币转移到本合约中。handleSourceToken函数源码见图五。

既然只是在handleSourceToken函数中调用,那么显然是没有必要设置成public权限。根据业务来看,BancorNetwork的主要作用是用于代币交换,并不需要用户主动调用safeTransferFrom,也就没有必要将safeTransferFrom设置为public权限。我们对比了合约中其他的几个函数,发现这几个函数也被设置成了public权限,如图六所示。

针对第一个问题,我们推测将这些函数设置为public权限可能是因为合约开发人员的疏忽。目前(2020-06-19)BancorNetwork团队新部署的合约已经将相关函数权限全部进行了更改(虽然其他的函数与此次事件无关),具体代码见图七。

针对第二个问题,我们跟踪了漏洞爆出后被转移资金的地址,发现这些地址在向BancorNetwork合约授权额度时,往往超过了所需要兑换代币的数量,并且在兑换完成后,并没有收回授权额度。如图八所示。

以“0x624f”开头的地址给BancorNetwork合约授权了900000000000000个ONG代币,该额度已经超过了ONG的发行量,相当于将“0x624f”全部的ONG代币都授权给了BancorNetwork合约。跟踪“0x624f”开头地址的交易,发现虽然没有使用完所有授权额度,但并未收回授权额度。

综上所述,我们推测用户可能考虑到要随时使用,为了方便一次性将所有代币都授权给了BancorNetwork合约。也可能是BancorNetwork的前端对授权金额设定了默认值。然而,这种行为存在巨大的风险,一旦智能合约出现漏洞,资金极易被攻击者窃取。在对新的BancorNetwork合约进行分析

本站所有软件信息均由用户上传发布,版权归原著所有。如有侵权/违规内容,敬请来信告知邮箱:764327034@qq.com,我们将及时撤销! 转载请注明出处:https://czxurui.com/zx/44940.html

打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023年08月06日
下一篇 2023年08月06日

相关推荐

  • 什么是Stacks Stacks与STAR原则:进步工做效率的法门

    本文目次导读:StacksSTAR原则StacksStacks是一种数据构造,它是一种线性表,具有后进先出(Last In First Out,LIFO)的特征,那意味着最初一个进入栈的元素将会是第一个被拜候或移除的元素,在计算机科学和编程

    2024-04-24 22:30:16
    64 0
  • 「金色财经」Phalcon:合约0x8c2d4e遭受攻击,损失约36.5万美元

    「金色财经」根据金融报道,Phalcon在X平台上发布消息称,由于缺乏访问控制,合约0x8c2d4e(可能是MEV机器人)受到攻击,损失约36.5万美元攻击者首先调用函数0xac3994ec将自己指定为特权地址(可能是债务所有者的角色)随后

    2023-11-13 11:30:06
    151 0
  • 「金色财经」Aptos Labs正在为Move开发新编译器Aptos Move Compiler

    「金色财经」AptosLabs11月12日宣布,AptosMoveCompiler正在为智能合约语言Move开发新的编译器,它将增加一些新的语言功能,包括接收器风格的函数调用,支持一般的高级函数,开发者可以定义定制功能、资源访问控制、回归全

    2023-11-12 11:01:35
    74 0
  • 三角函数的应用场景简介

    在数学上,cosine(余弦)函数是一种常见的三角函数。它经常被用于计算三角形的各种边长以及角度。当我们想知道一个角度的余弦值时,我们可以在计算器中使用cos函数进行计算。但是你是否曾思考过,当角度为90度时,cosine的值是多少?除此之

    2023-11-12 02:01:59
    79 0
  • DEUS被攻击事件的漏洞分析

    中国北京时间2023年5月6日,DEUS的稳定币 DEI 合约存在 burn 逻辑漏洞,攻击者已盈利约 630 万美金。SharkTeam 针对此事件进行了技术指标分析,并总结了安全防护方式。希望未来的项目能以此为教训,共同构建区块链行业的

    2023-11-10 14:02:25
    75 0
  • 「金色财经」Beosin:TrustPad被黑客攻击损失15.5万美元

    「金色财经」金色财经报道,据Beosin旗下BeosinEagleEye安全风险监控、预警与阻断平台监测显示,TrustPad被黑客攻击,Beosin安全团队分析发现TrustPad被攻击的根本原因在于receiveUpPool函数未验证m

    2023-11-07 16:00:08
    82 0

发表回复

8206
验证码

评论列表(0条)

    暂无评论

ok交易所
已有100万用户加入ok交易所

立即下载