Euler Finance遭闪电贷攻击 损失近2亿美元

robot
摘要生成中

Euler Finance遭遇闪电贷攻击,损失近2亿美元

2023年3月13日,Euler Finance项目因智能合约漏洞遭受闪电贷攻击,造成约1.97亿美元的重大损失。攻击者利用了合约中donateToReserves函数缺少流动性检查的漏洞,通过多次操作完成了攻击。

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

攻击过程分析

攻击者的主要步骤如下:

  1. 从某借贷平台闪电贷借入3000万DAI,并部署了借贷和清算两个合约。

  2. 将2000万DAI质押到Euler Protocol合约中,获得1950万eDAI。

  3. 利用Euler Protocol的10倍杠杆功能,借出1.956亿eDAI和2亿dDAI。

  4. 用剩余1000万DAI偿还部分债务,销毁相应dDAI,随后再次借出同等数量的eDAI和dDAI。

  5. 通过donateToReserves函数捐赠1亿eDAI,然后调用liquidate函数进行清算,获得3.1亿dDAI和2.5亿eDAI。

  6. 最后提取3890万DAI,归还3000万闪电贷,净利润约887万DAI。

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

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

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

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

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

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

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

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

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

漏洞原因

攻击的核心在于Euler Finance合约中donateToReserves函数缺少必要的流动性检查。与其他关键函数(如mint)相比,donateToReserves函数未调用checkLiquidity进行用户流动性验证。这使得攻击者能够通过特定操作使自己处于可被清算的状态,然后完成清算获利。

正常情况下,checkLiquidity函数会调用RiskManager模块,确保用户的Etoken始终大于Dtoken,以维持合约的安全性。然而,donateToReserves函数跳过了这一重要步骤,导致了严重的安全漏洞。

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

教训与建议

此次事件再次强调了智能合约安全审计的重要性。对于借贷类项目,需要特别关注以下几个关键方面:

  1. 资金偿还机制的完整性
  2. 流动性检测的全面性
  3. 债务清算流程的安全性

项目方在上线前应进行全面的安全审计,确保合约的每个功能都经过严格的安全检查。同时,持续的安全监控和漏洞赏金计划也是保障项目长期安全的有效措施。

此外,开发者应该注意函数间的一致性,确保关键的安全检查(如流动性检查)在所有相关函数中都得到正确实施。这不仅包括主要功能,还应涵盖辅助功能如捐赠等。

最后,建议项目方和开发者保持对新兴攻击手法的警惕,定期更新安全策略,以应对不断演变的区块链安全威胁。

EUL4.33%
此页面可能包含第三方内容,仅供参考(非陈述/保证),不应被视为 Gate 认可其观点表述,也不得被视为财务或专业建议。详见声明
  • 赞赏
  • 7
  • 分享
评论
0/400
StableGeniusvip
· 14小时前
好吧好吧好吧……正如预期的那样,又一个协议以艰难的方式了解到数学的严谨性。 从经验上讲,这是不可避免的。
查看原文回复0
SelfCustodyBrovip
· 14小时前
躺好吃瓜咯~
回复0
诗与远链vip
· 14小时前
又一个脆皮合约凉了
回复0
MEVNewHuntervip
· 14小时前
又一卖合约的跑路了
回复0
SorryRugPulledvip
· 14小时前
没有技术审计的合约不亦是送钱
回复0
0xInsomniavip
· 14小时前
又见智能合约漏洞
回复0
GasFeeNightmarevip
· 14小时前
大半夜蹲着看gas 差点亏死...十个交易七个失败 还要给矿工交智商税
回复0
交易,随时随地
qrCode
扫码下载 Gate APP
社群列表
简体中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)