EarningFarm攻击事件分析

区块链安全 1年前 (2022) admin
400 0 0

根据Numen链上监控显示,3天前EarningFarm发生攻击。见如下链接:

https://etherscan.io/tx/0x160c5950a01b88953648ba90ec0a29b0c5383e055d35a7835d905c53a3dda01e

earnningfarm本质上属于聚合挖矿(机枪池)。用户存入的资产,earnningfarm通过不同的vault合约接收不同的币种,然后配置有不同的操作方法(策略)。比如eth池子,就把用户的eth存入之后换成weth,然后去lido换成steth,最后存入aave。然后给用户一个ef_lev的lptoken当作凭证。
事件分析
在deposit和withdraw的时候都调用了balancer的闪电贷。

EarningFarm攻击事件分析

EarningFarm攻击事件分析

我们认为这一步多此一举,因为vault里有实现闪电贷回调函数,存取其实在回调里面完成。
EarningFarm攻击事件分析
EarningFarm攻击事件分析

看到在_deposit完成各种token的兑换最后存入aave,并且偿还balancer的借款,然后完成回调。

下面是withdraw。

EarningFarm攻击事件分析

然后看一下balancer的flashloan和回调 receiveflashloan,如下图所示:

EarningFarm攻击事件分析
EarningFarm攻击事件分析

由于项目方缺少经验,项目本身确实用到了balancer的flashloan,再项目方看来这是一种正常场景。但是项目方没考虑到直接调用balancer的flashloan这种场景,而不是从正常的deposit或者withdraw流程进入,所以产生了问题。由于攻击者可直接调用balancer的flashloan,并且把recipent设置成elfevervault合约。不直接调用withdraw,因为不管从哪个口进入,底层都是_deposit或者_withdraw。其实针对msg.sender==balancer的判断是恒成立的。 因为地址a调用balancer的flahsloan,flashloan里面回调了地址a的receiveflashloan,相当与回调的msg.sender永远是balancer,等于没有判断。其实这个地方应该校验的是谁调用了flashloan而不是谁调用了闪电贷回调 receiveFlashloan。当然如果指定要用balancer的flashloan,那么这个判断也不能省略,然后需要在加上前面说的判断。

总体过程见下图:

EarningFarm攻击事件分析

因为底层都是通过_deposit/_withdraw实现,所以跳过deposit/withdraw入口,直接从balancer.flashloan进入。因为对闪电贷回调函数的msg.sender没有进行正确校验,导致只要是balancer的flashloan进入,校验恒成立,并且recipent地址由外部控制。校验没有真正起到拦截作用,应该对flashloan的msg.sender在进行一个校验,应该require(msg.sender==recipent)。


EarningFarm攻击事件分析

Numen 导航

Numen 官网
https://numencyber.com/ 
GitHub
https://github.com/NumenCyber
Twitter
https://twitter.com/@numencyber
Medium
https://medium.com/@numencyberlabs

LinkedIn

https://www.linkedin.com/company/numencyber/

原文始发于微信公众号(Numen Cyber Labs):EarningFarm攻击事件分析

版权声明:admin 发表于 2022年10月18日 上午9:21。
转载请注明:EarningFarm攻击事件分析 | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...