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

robot
摘要生成中

Euler Finance漏洞事件分析:闪电贷攻击导致1.97亿美元损失

2023年3月13日,Euler Finance项目遭遇了一次重大安全事件。根据链上监控数据显示,由于Etoken中的donateToReserves函数存在流动性检查漏洞,项目遭受了闪电贷攻击。攻击者通过多次操作不同币种,最终造成了高达1.97亿美元的巨额损失,涉及6种代币。目前,这笔资金仍然留存在攻击者的账户中。

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,随后再次借出1.956亿个eDAI和2亿个dDAI。

  5. 关键步骤:攻击者调用donateToReserves函数,捐赠了10倍于偿还资金的金额,即1亿eDAI。紧接着,攻击者触发清算函数,获得了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亿美金!

漏洞成因分析

此次攻击的核心问题出在donateToReserves函数上。与其他关键函数(如mint函数)相比,donateToReserves函数缺少了一个至关重要的步骤:checkLiquidity。

checkLiquidity函数的作用是调用RiskManager模块,对用户进行检查,确保Etoken大于Dtoken,从而保证用户的流动性状况。正常情况下,每次操作都需要进行这项检查。然而,donateToReserves函数缺少这一步骤,导致攻击者可以先将自己置于可被清算的状态,然后完成清算操作。

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

安全建议

针对此类漏洞,我们建议项目方在上线前务必进行全面的安全审计,以确保合约的安全性。对于借贷类项目,尤其需要重点关注以下几个方面:

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

只有通过严格的安全审核和全面的风险评估,才能最大程度地降低类似安全事件的发生概率,保障项目和用户的资金安全。

此页面可能包含第三方内容,仅供参考(非陈述/保证),不应被视为 Gate 认可其观点表述,也不得被视为财务或专业建议。详见声明
  • 赞赏
  • 3
  • 分享
评论
0/400
空投碰瓷哥vip
· 08-05 08:04
又割又割 天天被割
回复0
DeFi安全卫士vip
· 08-05 08:04
*叹气* 又一天,又一个协议因为基本的 donateToReserves 漏洞而被重创……老实说,我几个月前就说过了。关键提醒:永远要对流动性检查进行清理,真是的。这些业余的错误持续让我们损失九位数,真让人无奈。
查看原文回复0
瓦斯烧烤大师vip
· 08-05 07:50
哥这基础防御都不过关 真菜
回复0
交易,随时随地
qrCode
扫码下载 Gate APP
社群列表
简体中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)