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

robot
摘要生成中

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

3月13日,Euler Finance项目因其智能合约存在漏洞而遭受闪电贷攻击,造成约1.97亿美元的巨额损失。这次攻击涉及6种不同的加密货币代币。

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

攻击过程分析

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

随后,攻击者将2000万DAI质押到Euler Protocol合约中,获得了约1950万eDAI。利用Euler Protocol的10倍杠杆功能,攻击者进一步借出了1.956亿eDAI和2亿dDAI。

接着,攻击者使用剩余的1000万DAI偿还部分债务,销毁了相应的dDAI。然后再次借出同样数量的eDAI和dDAI。

关键的一步是,攻击者利用donateToReserves函数的漏洞,捐赠了10倍于偿还资金的金额,即1亿eDAI。这一操作使得攻击者能够触发清算机制,从而获得3.1亿dDAI和2.5亿eDAI。

最后,攻击者通过提现功能获取了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亿美金!

漏洞原因分析

此次攻击的核心漏洞在于Euler Finance的donateToReserves函数缺少必要的流动性检查。与其他关键函数(如mint函数)相比,donateToReserves函数没有调用checkLiquidity进行用户流动性验证。

正常情况下,checkLiquidity函数会通过调用RiskManager模块来确保用户的eToken数量大于dToken数量,以维持系统的安全性。然而,由于donateToReserves函数缺少这一关键步骤,攻击者得以操纵自身账户状态,使其符合被清算的条件,然后执行清算获利。

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

安全建议

针对此类攻击,我们建议区块链项目方:

  1. 在智能合约上线前进行全面的安全审计,尤其关注资金借贷、流动性管理和债务清算等关键环节。

  2. 对所有可能影响用户资产状态的函数实施严格的安全检查,包括但不限于流动性验证。

  3. 定期进行代码审查和漏洞扫描,及时修复潜在的安全隐患。

  4. 建立完善的风险管理机制,设置合理的借贷限额和清算阈值。

  5. 考虑引入多重签名或时间锁等额外的安全措施,以防止大规模资金流失。

通过采取这些预防措施,可以显著提高DeFi项目的安全性,降低遭受类似攻击的风险。

EUL1.46%
此页面可能包含第三方内容,仅供参考(非陈述/保证),不应被视为 Gate 认可其观点表述,也不得被视为财务或专业建议。详见声明
  • 赞赏
  • 7
  • 分享
评论
0/400
ServantOfSatoshivip
· 07-19 18:22
又出事故了真糟心
回复0
无情哈拉vip
· 07-19 08:53
又见合约盲区
回复0
深度DYOR达人vip
· 07-17 03:24
又是合约掉坑了
回复0
StableNomadvip
· 07-17 03:24
又一个变砖项目
回复0
闪电站岗人vip
· 07-17 03:19
又被薅走一波羊毛
回复0
just_another_fishvip
· 07-17 03:11
合约审计必不可少
回复0
大饼霸霸vip
· 07-17 02:56
又见智能合约事故了
回复0
交易,随时随地
qrCode
扫码下载 Gate APP
社群列表
简体中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)