freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

细节决定成败:QBridge被黑事件分析
2022-03-04 15:09:52
所属地 江苏省

2022 年 01 月 28 日,Qubit 项目的 QBridge 遭受攻击,损失约 8000 万美金。

1646726097_62270bd108520a887fcbd.png!small?1646726097050

SharkTeam第一时间对此事件进行了攻击分析和技术分析,并总结了安全防范手段,希望后续的区块链项目可以引以为戒,共筑区块链行业的安全防线。

一、事件分析

攻击过程如下:

1. 攻击者账户在Ethereum上面通过Tornado获取1 Ether的Token,作为发送交易以及发起攻击的最初资产。

FjJwObI88lgMvBnhBWmBYu8Yo9t_.gif

2. 攻击者在Ethereum上面先后连续发起2次deposit ETH交易(调用depositETH函数)到QBridge合约,每次存入0.1 Ether,用于跨链交易。

FoBTosVUQCOaIYpRV0WzPfoGy-cR.gif

3. 攻击者在Ethereum上面再次先后连续发起多次deposit交易(调用deposit函数)到QBridge合约,用于跨链交易。

ljXvE4fyXFlrP3l9n1nkauW1DHrY.gif

从合约函数来看,调用depositETH函数应该是在存入Ether用于跨链交易,而调用deposit函数应该是存入ERC20 Token用于跨链交易。

以交易0xac7292e7d0ec8ebe1c94203d190874b2aab30592327b6cc875d00f18de6f3133为例,

lqKPuAH9Jdx1Ul_jwIdL9rdKykFy.gif

lrZgVgmHYYacnP3szxvlPN722JIx.gif

以上交易并没有任何Ether或者ERC20 Token的转账记录。这里调用deposit函数应该是存入ERC20 Token,至少应该有ERC20 Token的转账记录,但实际上并没有。在没有ERC20 Token转账的情况下交易应该revert,不应该被执行。

从交易执行过程中,我们发现在调用ERC20 Token的转账函数时,ERC20 Token的地址为零地址,如下所示:

lor31ZBW6DGuWQzKlueoGPQFrPLQ.gif

合约源代码如下:

ll6fpmMmotkb6ONcBTKLy_c3zCJT.gif

合约中实际是有白名单校验的,交易执行成功说明零地址也在白名单之中,即白名单校验是通过的。另外,tokenAddress是零地址的情况下,调用safeTransferFrom函数,EVM不会报错,也不会执行任何操作,因此deposit函数在没有转账的情况下最终执行成功而没有报错回滚。之所以出现tokenAddress地址为0的情况,是因为在存入Ether的时候,默认Ether的地址为零地址。

4. 账户0xeb645b4c35cf160e47f0a49c03db087c421ab545在攻击者发起deposit交易后,在BSC网络中先后连续发起了多次Vote Proposal交易(调用voteProposal函数),铸造了大量的xETH Token.

ll0vHMC5ZG3Bp1VmhkwuMR_apjYy.gif

以交易0x2ce666d0ec8c976f6895b1ac52f648b5f5e025c42a956c767bf4fbae0982819e为例,如下所示,该交易铸造了5990 xETH。

luR_a3MlaVzR9Hd-16wETOVDpxZ0.gif

但实际上攻击者并没有存入任何Token,这些xETH完全是凭空铸造出来的。

5. 攻击者在BSC网络中以凭空铸造的大量的xETH作为抵押物,从Qubit合约中借出了其中的Token。

以交易0xcfa4379af6fb1da547ae7270485b63f304b1fbec55f2a0c1ccf0a4f59d839b2e为例,

该交易中,攻击者以凭空借出的xETH为抵押物,从Qubit合约中借出了140 Ether.

总结:本次攻击的根本原因在于,分开实现deposit主币(如ETH)和ERC20标准普通代币时,在对白名单内的代币进行转账操作时未对其是否为0地址进行检查,导致本来应该通过native充值函数进行deposit的操作也能通过普通ERC20代币的deposit走通。SharkTeam建议您,在对deposit代币进行白名单检查后仍需对deposit的是否为native代币进行再次检查。

二、安全建议

SharkTeam提醒您,在涉足区块链项目时请提高警惕,选择更稳定、更安全,且经过完备多轮审计的公链和项目,切不可将您的资产置于风险之中,沦为黑客的提款机。

# 漏洞分析 # 网络安全技术
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录