Euler Finance遭2亿美元闪电贷攻击 智能合约漏洞成祸因

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

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

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

攻击过程分析

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

  2. 将借来的 DAI 中的2000万质押到 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万 DAI,净赚约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亿美金!

漏洞原因

攻击得以成功的主要原因是 donateToReserves 函数缺少必要的流动性检查。与其他关键函数(如 mint)相比,donateToReserves 未调用 checkLiquidity 函数来验证用户的流动性状态。这使得攻击者能够操纵自身账户进入可被清算的状态,并从中获利。

正常情况下,checkLiquidity 函数会调用 RiskManager 模块来确保用户的 Etoken 数量大于 Dtoken 数量,以维持账户的健康状态。然而,donateToReserves 函数跳过了这一关键步骤,为攻击创造了可乘之机。

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

教训与建议

这次事件再次凸显了智能合约安全审计的重要性。对于借贷类项目,尤其需要重点关注以下几个方面:

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

项目方在合约上线前,应当进行全面而严格的安全审计,以确保合约的安全性和稳定性。同时,持续的安全监控和及时的漏洞修复也是不可或缺的。

随着去中心化金融的快速发展,类似的安全事件可能会不断出现。开发者和项目方需要保持警惕,不断学习和改进,以构建更加安全、可靠的区块链生态系统。

EUL-1.03%
此页面可能包含第三方内容,仅供参考(非陈述/保证),不应被视为 Gate 认可其观点表述,也不得被视为财务或专业建议。详见声明
  • 赞赏
  • 6
  • 转发
  • 分享
评论
0/400
链上冷面笑匠vip
· 08-12 11:55
又一个牛哄哄的项目翻车了
回复0
线下纯韭菜vip
· 08-12 11:53
韭菜又被割啦~
回复0
智能钱包vip
· 08-12 11:46
1.97亿美刀?这操作手法太低级 资金量倒是不小
回复0
Solidity Strugglervip
· 08-12 11:46
又是智能合约背锅侠
回复0
MetaRecktvip
· 08-12 11:32
又双叒被套了
回复0
FadCatchervip
· 08-12 11:28
又一个铁憨憨项目跑路
回复0
交易,随时随地
qrCode
扫码下载 Gate APP
社群列表
简体中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)