SharkTeam独家分析 | “杠杆借贷”功能实现漏洞:Vee.Finance被黑事件分析
北京时间9月21日, Vee.Finance 借贷项目遭到黑客攻击,损失共计8804.7 ETH和213.93 BTC。
Vee.Finance是一个面向传统金融和加密用户的DeFi借贷平台。Vee.Finance基于Compound借贷项目,并在Compound基础上进行改造。Vee.Finance可提供高达3倍的交易借贷,用户可以买入或卖出的资产数量取决于账户中的本金和平台的杠杆率。即如果将杠杆倍数设为3x,则理论上用户可以借入本金3倍的数字资产。
SharkTeam第一时间对此事件进行了攻击分析和技术分析,并总结了安全防范手段,希望后续的区块链项目可以引以为戒,共筑区块链行业的安全防线。
一、事件分析
显然Vee.Finance不可能让用户直接拿走这笔钱,因为这样贷出的资产高于抵押资产的价值,会导致平台亏损。所以使用杠杆借贷时Vee.Finance会将用户指定的order订单转给orderProxy合约,由orderProxy合约来执行。该部分由borrowAndCall()函数实现。
再看borrowAndCall()函数中调用的borrowLeverageInternal()函数,该函数将杠杆倍数等参数返回给了borrowFresh()函数。
borrowFresh()函数中相比于Compound,增加了对leverage的判断。如果杠杆倍数leverage为0,执行正常的借贷逻辑,如果杠杆不为0,则将资金通过doDeposit()函数转移到指定位置。
但是在borrowFresh()函数中可以看到,无论杠杆倍率是多少,系统都只会记录单倍杠杆的借贷资产。也就是说,如果用户实际抵押价值100美元的Ether可以借出80美元的USDC,并通过三倍的杠杆借出240美元的USDC,但在系统记录中,用户只借出80美元的USDC。
另一个问题是,代码中在执行 杠杆借贷 时,并没有检查通过杠杆借贷抵押获取的Token A所交换的Token B的总价值是否与Token A的总价值具有同等价值,且没有持续监控这两种Token的总价值,在价值不对等的情况下及时清算或判定交易失败。
攻击者地址:0xeeeE458C3a5eaAfcFd68681D405FB55Ef80595BA
Vee.Finance遭到攻击的合约地址:0xd1F855ceF146D36CC5851E2139c54524420797f2
以第一次攻击为例
交易地址为:
https://cchain.explorer.avax.network/tx/0xc490b881f7434af48a1f39ca2d71064e93a1802b5853e3312e8800468dc83b81
攻击合约1(0x255945a4f673851633355b2592f602025ca20142)先为攻击合约2(0x4b4c4044207aa5da6b585fed9e8ffc04bb55d2df)往Vee.Finance的cToken地址(合约名称为CErc20Immutable)存入了约0.96WETH,从而使得攻击合约2可以进行抵押借贷(可以借出约0.52WETH)及调用杠杆交易。
通过CREATE2的方式创建合约2绕过了isContract()对msg.sender的检查,并在constructor()函数中进行攻击调用。
攻击合约2调用CErc20Immutable的 borrowAndCall() 函数,通过调用VeeProxyController去Pangolin池中进行交易。
由于Pangolin池是攻击者在攻击之前创建的交易对的交易池,所以攻击者可以控制交易池的滑点。这导致Vee.Finance的合约只将加了杠杆后的约1.55个WETH换回了约0.27个LINK,造成了大量亏损。
攻击合约2归还借贷。
取出抵押资产并transfer给攻击合约1。通过先前分析,虽然攻击者通过杠杆进行倍数抵押借贷,但是系统记录中用户借款只有单倍杠杆的借贷资产。因此攻击合约2仅需还上约0.52的WETH,就能取出最开始存入的0.96WETH。
攻击合约1以少量的LINK换取了约1.55个WETH,从而获得了交易过程中Vee.Finance平台的亏损,从而实现套利。攻击者进行多笔类似交易,以将获利最大化。
二、安全建议
SharkTeam提醒您,在涉足区块链项目时请提高警惕,选择更稳定、更安全,且经过完备多轮审计的公链和项目,切不可将您的资产置于风险之中,沦为黑客的提款机。
SharkTeam 作为领先的区块链安全服务团队,为开发者提供智能合约审计服务。智能合约审计服务由人工审计和自动化审计构成,满足不同客户需求,独家实现覆盖高级语言层、虚拟机层、区块链层、业务逻辑层四个方面近两百项审计内容,全面保障智能合约安全。
==
和2万人一起加入鸵鸟社群
添加QQ群:645991580
添加TG群:鸵鸟中文社区 https://t.me/tuoniaox