# Euler Finance遭受闪电贷攻击,损失近2亿美元2023年3月13日,Euler Finance项目遭遇了一次重大的闪电贷攻击。根据链上监控数据显示,攻击者利用项目合约中的一个漏洞,成功窃取了约1.97亿美元的资金,涉及6种不同的代币。## 攻击过程分析攻击者首先从某借贷平台获取了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合约中的donateToReserves函数缺少必要的流动性检查。与其他关键函数(如mint函数)相比,donateToReserves函数未执行checkLiquidity操作,这导致攻击者能够操纵自身账户状态,使其符合被清算的条件。正常情况下,checkLiquidity函数会调用RiskManager模块,确保用户的eToken数量始终大于dToken数量。然而,由于donateToReserves函数缺少这一关键步骤,攻击者得以绕过安全机制,实现不当获利。## 安全建议针对此类攻击,区块链项目方应当:1. 在合约上线前进行全面的安全审计,确保代码质量和安全性。2. 特别关注借贷类项目中的资金偿还、流动性检测和债务清算等关键环节。3. 确保所有可能影响用户资产状态的函数都包含必要的安全检查步骤。4. 定期进行代码review和漏洞扫描,及时修复潜在风险。5. 考虑引入多重签名机制或时间锁等额外安全措施,为应对紧急情况预留缓冲时间。此次事件再次凸显了智能合约安全的重要性。项目方应当始终将安全置于首位,通过持续的安全实践和技术创新,共同构建更加安全、可靠的Web3生态系统。
Euler Finance遭1.97亿美元闪电贷攻击 donateToReserves函数存漏洞
Euler Finance遭受闪电贷攻击,损失近2亿美元
2023年3月13日,Euler Finance项目遭遇了一次重大的闪电贷攻击。根据链上监控数据显示,攻击者利用项目合约中的一个漏洞,成功窃取了约1.97亿美元的资金,涉及6种不同的代币。
攻击过程分析
攻击者首先从某借贷平台获取了3000万个DAI的闪电贷,随后部署了两个关键合约:一个用于借贷操作,另一个用于清算。
攻击的主要步骤如下:
将2000万DAI质押到Euler Protocol合约中,获得19.5百万eDAI。
利用Euler Protocol的10倍杠杆功能,借出195.6百万eDAI和200百万dDAI。
使用剩余的1000万DAI偿还部分债务,并销毁相应的dDAI。
再次借出同等数量的eDAI和dDAI。
通过donateToReserves函数捐赠100百万eDAI,随后调用liquidate函数进行清算,获得310百万dDAI和250百万eDAI。
最后提取38.9百万DAI,归还30百万闪电贷,净利润约8.87百万DAI。
漏洞原因分析
此次攻击的核心漏洞在于Euler Finance合约中的donateToReserves函数缺少必要的流动性检查。与其他关键函数(如mint函数)相比,donateToReserves函数未执行checkLiquidity操作,这导致攻击者能够操纵自身账户状态,使其符合被清算的条件。
正常情况下,checkLiquidity函数会调用RiskManager模块,确保用户的eToken数量始终大于dToken数量。然而,由于donateToReserves函数缺少这一关键步骤,攻击者得以绕过安全机制,实现不当获利。
安全建议
针对此类攻击,区块链项目方应当:
在合约上线前进行全面的安全审计,确保代码质量和安全性。
特别关注借贷类项目中的资金偿还、流动性检测和债务清算等关键环节。
确保所有可能影响用户资产状态的函数都包含必要的安全检查步骤。
定期进行代码review和漏洞扫描,及时修复潜在风险。
考虑引入多重签名机制或时间锁等额外安全措施,为应对紧急情况预留缓冲时间。
此次事件再次凸显了智能合约安全的重要性。项目方应当始终将安全置于首位,通过持续的安全实践和技术创新,共同构建更加安全、可靠的Web3生态系统。