Euler Finance遭1.97亿美元闪电贷攻击 智能合约漏洞引发巨额损失

robot
摘要生成中

Euler Finance遭受闪电贷攻击,损失高达1.97亿美元

2023年3月13日,Euler Finance项目因其智能合约中的一个漏洞遭受了大规模闪电贷攻击。攻击者利用Etoken中donateToReserves函数缺少流动性检查的漏洞,通过多次调用不同币种的操作获取了巨额利润。此次攻击造成的总损失高达1.97亿美元,涉及6种不同的代币。

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

攻击过程分析

攻击者的操作步骤如下:

  1. 从某借贷平台闪电贷借入3000万DAI。
  2. 部署两个合约:一个用于借贷,另一个用于清算。
  3. 将2000万DAI质押到Euler Protocol合约中,获得19.5万eDAI。
  4. 利用Euler Protocol的10倍杠杆借贷功能,借出195.6万eDAI和200万dDAI。
  5. 使用剩余的1000万DAI偿还部分债务,并销毁相应的dDAI。
  6. 再次借出195.6万eDAI和200万dDAI。
  7. 调用donateToReserves函数,捐赠10倍于偿还资金的金额(100万eDAI)。
  8. 触发清算函数,获得310万dDAI和250万eDAI。
  9. 提取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. 建立应急响应机制,以便在发生安全事件时快速反应。

此次事件再次凸显了智能合约安全的重要性。项目方应当始终将安全置于首位,通过持续的安全实践和审计来保护用户资产的安全。

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

EUL0.41%
此页面可能包含第三方内容,仅供参考(非陈述/保证),不应被视为 Gate 认可其观点表述,也不得被视为财务或专业建议。详见声明
  • 赞赏
  • 7
  • 转发
  • 分享
评论
0/400
The Memefathervip
· 08-02 02:56
合约又出事故了
回复0
MetaEggplantvip
· 07-30 18:24
又一个漏洞盗币现场
回复0
跑路预言家vip
· 07-30 18:22
又见跑路盛宴啊
回复0
Liquidation_Watchervip
· 07-30 18:22
又一个智能漏洞死亡
回复0
CryptoNomicsvip
· 07-30 18:12
糟糕的代码审查失败
查看原文回复0
纸手卖出惯犯vip
· 07-30 18:11
又一个合约烂大街了
回复0
GateUser-afe07a92vip
· 07-30 17:56
又一血汗钱没了
回复0
交易,随时随地
qrCode
扫码下载 Gate APP
社群列表
简体中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)