QBridge被黑事件分析
2022 年 01 月 28 日,Qubit 项目的 QBridge 遭受攻击,损失约 8000 万美金。
SharkTeam第一时间对此事件进行了攻击分析和技术分析,并总结了安全防范手段,希望后续的区块链项目可以引以为戒,共筑区块链行业的安全防线。
攻击过程如下: 1.攻击者账户在Ethereum上面通过Tornado获取1 Ether的Token,作为发送交易以及发起攻击的最初资产。
2.攻击者在Ethereum上面先后连续发起2次deposit ETH交易(调用depositETH函数)到QBridge合约,每次存入0.1 Ether,用于跨链交易。
3.攻击者在Ethereum上面再次先后连续发起多次deposit交易(调用deposit函数)到QBridge合约,用于跨链交易。 从合约函数来看,调用depositETH函数应该是在存入Ether用于跨链交易,而调用deposit函数应该是存入ERC20 Token用于跨链交易。
以交易0xac7292e7d0ec8ebe1c94203d190874b2aab30592327b6cc875d00f18de6f3133为例,
以上交易并没有任何Ether或者ERC20 Token的转账记录。这里调用deposit函数应该是存入ERC20 Token,至少应该有ERC20 Token的转账记录,但实际上并没有。在没有ERC20 Token转账的情况下交易应该revert,不应该被执行。
从交易执行过程中,我们发现在调用ERC20 Token的转账函数时,ERC20 Token的地址为零地址,如下所示:
合约中实际是有白名单校验的,交易执行成功说明零地址也在白名单之中,即白名单校验是通过的。另外,tokenAddress是零地址的情况下,调用safeTransferFrom函数,EVM不会报错,也不会执行任何操作,因此deposit函数在没有转账的情况下最终执行成功而没有报错回滚。之所以出现tokenAddress地址为0的情况,是因为在存入Ether的时候,默认Ether的地址为零地址。
4.账户0xeb645b4c35cf160e47f0a49c03db087c421ab545在攻击者发起deposit交易后,在BSC网络中先后连续发起了多次Vote Proposal交易(调用voteProposal函数),铸造了大量的xETH Token.
以交易0x2ce666d0ec8c976f6895b1ac52f648b5f5e025c42a956c767bf4fbae0982819e为例,如下所示,该交易铸造了5990 xETH。 但实际上攻击者并没有存入任何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作为领先的区块链安全服务团队,为开发者提供智能合约审计服务。智能合约审计服务由人工审计和自动化审计构成,满足不同客户需求,独家实现覆盖高级语言层、虚拟机层、区块链层、业务逻辑层四个方面近两百项审计内容,全面保障智能合约安全。
Twitter:https://twitter.com/sharkteamorg
Telegram:https://t.me/sharkteamorg
更多区块链安全资讯与行业分析,点击下方链接查看 D查查|链上风险核查
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!