Cointime

扫码下载App
iOS & Android

Euler Finance遭闪电贷攻击,损失1.97亿美金!漏洞分析附PoC

项目方

背景 

根据Numen链上监控显示,Mar-13-2023 08:56:35 AM +UTC,Euler Finance 项目因为Etoken中的donateToReserves函数缺少流动性检查而遭到闪电贷攻击。黑客通过不同币种多次调用完成获利,本次攻击共计损失1.97亿美元,金额巨大,涉及6种代币。当前,资金还存留在黑客的账户中。 

黑客地址:https://etherscan.io/address/0xb66cd966670d962c227b3eaba30a872dbfb995db 

黑客合约:https://etherscan.io/address/0x036cec1a199234fc02f72d29e596a09440825f1c 

攻击交易(其中一笔): https://etherscan.io/tx/0xc310a0affe2169d1f6feec1c63dbc7f7c62a887fa48795d327d4d2da2d6b111d 

详细分析 

1.黑客先从Aave闪电贷借了3000W个Dai后部署了两个合约,一个是借贷合约,一个是清算合约。 

2.调用deposit函数将借来的Dai其中的20 M个质押到 Euler Protocol合约中获取了19.5M个eDAI。 

3.Euler Protocol可以调用mint函数借出10倍存款,此时黑客从中借出了195.6M个eDAI 和200M个dDAI。 

4.调用repay函数,用闪电贷剩余的10M个DAI偿还债务并且销毁了10M个dDAI,然后继续调用min函数借出195.6M个eDAI 和200M个dDAI。 

5.调用 donateToReserves函数捐赠10倍的偿还资金,发送了100M的eDAI,并调用 liquidate函数去清算,得到310M的dDAI和250M的eDAI。 

6.调用withdraw函数获取了38.9M的Dai并且去归还了借的闪电贷30M。从中获利8.87M个Dai。 

漏洞成因 

先看一下donateToReserves函数,用户能够被清算是在这一步发生的。 

与下图的mint函数对比我们发现,donateToReserves函数少了一个关键步骤checkLiquidity。 

然后跟进看 checkLiquidity的实现。我们发现了callInternalModule函数,它会调用RiskManager对用户进行检查保证Etoken>Dtoken。 

在每次操作的时候需要对用户的流动性进行检查,调用checkLiquidity完成,而donateToReserves这个函数没有执行此操作,导致用户可以通过该协议的某些函数先使自己处于被清算的状态,然后在完成清算。 

攻击复现 

我们成功复现了此次攻击,详细PoC可查看链接:https://github.com/numencyber/SmartContractHack_PoC/tree/main/EulerfinanceHack 

总结 

Numen实验室提醒项目方,合约在上线前要做好安全审计,保证合约安全性,对于借贷类项目需要特别关注资金偿还,流动性检测,债务清算等问题。Numen实验室专注于为WEB3保驾护航。 

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/

评论

所有评论

推荐阅读

  • 特朗普:伊朗并不想关闭霍尔木兹海峡,他们希望海峡开放

    Cointime 报道,4月22日,美国总统特朗普:伊朗并不想关闭霍尔木兹海峡,他们希望海峡开放,这样他们每天可以赚取5亿美元(因此,如果关闭,他们就会损失这笔钱)。伊朗之所以说想关闭海峡,是因为我已经完全封锁(关闭)了这个海峡,所以他们只是想“保全面子”。(金十)

  • 伊朗表示同意暂停军事战斗 但战争仍未结束

    Cointime 报道,4月22日,当地时间4月22日凌晨,针对特朗普关于延长停火期限的声明,伊朗国家电视台表示,伊朗已经成为战场的胜利者。控制霍尔木兹海峡是这场战争中伊朗获得的极为宝贵的筹码。伊朗同意军事战斗的暂停,但战争仍未结束。同时,伊朗国家电视台还指出,伊朗必须警惕任何暗示伊朗必须参加谈判,否则敌人将攻击伊朗的言论。即使解除海上封锁,伊朗参加谈判也必须以不提出任何侵犯伊朗独立和尊严的议题为条件,其中首要的是伊朗的防御和导弹能力以及核能力和技术。(央视)

  • Kalshi和Polymarket将提供永续期货交易

    Cointime 报道,4月22日,继竞争对手 Kalshi 计划提供加密货币永续期货交易后,Polymarket 也开始拓展永续期货交易业务。

  • 特朗普宣布延长对伊朗停火

    Cointime 报道,4月22日,美国总统特朗普当地时间21日下午在“真实社交”发帖表示,应巴基斯坦陆军参谋长及总理的请求,美方将暂缓对伊朗的军事打击,延长停火期限,并要求伊朗方面先提出统一的谈判方案。在此期间,美军将继续对伊朗实施海上封锁,同时保持军事准备状态。他表示,停火将持续至伊朗提交方案并完成谈判为止,“无论结果如何”。 (CCTV国际时讯)

  • BTC跌破75000美元

    Cointime 报道,行情显示,BTC跌破75000美元,现报74894.74美元,24小时跌幅1.78%,行情波动较大,请做好风险控制。

  • 美联储主席提名人沃什:独立性取决于美联储(自身)

    Cointime 报道,美联储主席提名人沃什:我将独立于特朗普(的意见)之外。特朗普倾向于要求FOMC降息。独立性取决于美联储(自身)。

  • 数字银行Revolut IPO估值最高或达2000亿美元

    Cointime 报道,英国《金融时报》援引匿名投资者消息人士披露,英国数字银行Revolut计划在未来IPO中寻求1500亿至2000亿美元估值,较其此前750亿美元估值大幅提升,该公司首席执行官ONik Storonsky还透露,Revolut正筹备于2026年下半年进行新一轮二级股份出售,估值或超过1000亿美元。

  • ETH跌破2300美元

    Cointime 报道,行情显示,ETH跌破2300美元,现报2299.92美元,24小时跌幅达到0.38%,行情波动较大,请做好风险控制。

  • 特朗普:若新任美联储主席不降息将感到失望

    Cointime 报道,4月21日,美国总统特朗普:如果新任美联储主席不降息,我将感到失望。

  • 美国参谋长联席会议主席凯恩称准备好恢复作战

    Cointime 报道,4月21日,美国参谋长联席会议主席凯恩称准备好恢复作战,可随时恢复对伊行动。(Axios)