Euler Finance遭1.97亿美元闪电贷攻击 donateToReserves函数存漏洞

robot
摘要生成中

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

2023年3月13日,Euler Finance项目遭遇了一次重大的闪电贷攻击。根据链上监控数据显示,攻击者利用项目合约中的一个漏洞,成功窃取了约1.97亿美元的资金,涉及6种不同的代币。

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

攻击过程分析

攻击者首先从某借贷平台获取了3000万个DAI的闪电贷,随后部署了两个关键合约:一个用于借贷操作,另一个用于清算。

攻击的主要步骤如下:

  1. 将2000万DAI质押到Euler Protocol合约中,获得19.5百万eDAI。

  2. 利用Euler Protocol的10倍杠杆功能,借出195.6百万eDAI和200百万dDAI。

  3. 使用剩余的1000万DAI偿还部分债务,并销毁相应的dDAI。

  4. 再次借出同等数量的eDAI和dDAI。

  5. 通过donateToReserves函数捐赠100百万eDAI,随后调用liquidate函数进行清算,获得310百万dDAI和250百万eDAI。

  6. 最后提取38.9百万DAI,归还30百万闪电贷,净利润约8.87百万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合约中的donateToReserves函数缺少必要的流动性检查。与其他关键函数(如mint函数)相比,donateToReserves函数未执行checkLiquidity操作,这导致攻击者能够操纵自身账户状态,使其符合被清算的条件。

正常情况下,checkLiquidity函数会调用RiskManager模块,确保用户的eToken数量始终大于dToken数量。然而,由于donateToReserves函数缺少这一关键步骤,攻击者得以绕过安全机制,实现不当获利。

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

安全建议

针对此类攻击,区块链项目方应当:

  1. 在合约上线前进行全面的安全审计,确保代码质量和安全性。

  2. 特别关注借贷类项目中的资金偿还、流动性检测和债务清算等关键环节。

  3. 确保所有可能影响用户资产状态的函数都包含必要的安全检查步骤。

  4. 定期进行代码review和漏洞扫描,及时修复潜在风险。

  5. 考虑引入多重签名机制或时间锁等额外安全措施,为应对紧急情况预留缓冲时间。

此次事件再次凸显了智能合约安全的重要性。项目方应当始终将安全置于首位,通过持续的安全实践和技术创新,共同构建更加安全、可靠的Web3生态系统。

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

此页面可能包含第三方内容,仅供参考(非陈述/保证),不应被视为 Gate 认可其观点表述,也不得被视为财务或专业建议。详见声明
  • 赞赏
  • 5
  • 分享
评论
0/400
liquidation_surfervip
· 6小时前
闪电贷又出事了
回复0
ZKSherlockvip
· 7小时前
合约审计太不严
回复0
ResearchChadButBrokevip
· 07-10 21:58
合约漏洞真难防
回复0
倒霉的矿工vip
· 07-10 21:51
代码审查不严啊
回复0
论坛挖矿达人vip
· 07-10 21:49
又一漏洞被利用了
回复0
交易,随时随地
qrCode
扫码下载 Gate APP
社群列表
简体中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)