freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

点我创作

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

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

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

FreeBuf+小程序

FreeBuf+小程序

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

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

# 漏洞分析 # 网络安全技术
本文为 SharkTeam 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
SharkTeam LV.8
SharkTeam的愿景是全面保护Web3世界的安全。团队成员分布在北京、南京、苏州、硅谷,由来自世界各地的经验丰富的安全专业人士和高级研究人员组成,精通区块链和智能合约的底层理论,提供包括智能合约审计、链上分析、应急响应等服务。已与区块链生态系统各个领域的关键参与者,如Huobi Global、OKC、polygon、Polkadot、imToken、ChainIDE等建立长期合作关系。
  • 172 文章数
  • 42 关注者
SharkTeam:2024年上半年度Web3安全报告
2024-07-08
SharkTeam:美国众议院FIT21法案解读
2024-06-26
SharkTeam:UwU Lend攻击事件分析
2024-06-13
文章目录