# Euler Finance漏洞事件分析:闪电贷攻击导致1.97亿美元损失2023年3月13日,Euler Finance项目遭遇了一次重大安全事件。根据链上监控数据显示,由于Etoken中的donateToReserves函数存在流动性检查漏洞,项目遭受了闪电贷攻击。攻击者通过多次操作不同币种,最终造成了高达1.97亿美元的巨额损失,涉及6种代币。目前,这笔资金仍然留存在攻击者的账户中。## 攻击过程分析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。## 漏洞成因分析此次攻击的核心问题出在donateToReserves函数上。与其他关键函数(如mint函数)相比,donateToReserves函数缺少了一个至关重要的步骤:checkLiquidity。checkLiquidity函数的作用是调用RiskManager模块,对用户进行检查,确保Etoken大于Dtoken,从而保证用户的流动性状况。正常情况下,每次操作都需要进行这项检查。然而,donateToReserves函数缺少这一步骤,导致攻击者可以先将自己置于可被清算的状态,然后完成清算操作。## 安全建议针对此类漏洞,我们建议项目方在上线前务必进行全面的安全审计,以确保合约的安全性。对于借贷类项目,尤其需要重点关注以下几个方面:1. 资金偿还机制的完整性2. 流动性检测的全面性3. 债务清算流程的安全性只有通过严格的安全审核和全面的风险评估,才能最大程度地降低类似安全事件的发生概率,保障项目和用户的资金安全。
Euler Finance遭1.97亿美元闪电贷攻击 donateToReserves函数漏洞成祸因
Euler Finance漏洞事件分析:闪电贷攻击导致1.97亿美元损失
2023年3月13日,Euler Finance项目遭遇了一次重大安全事件。根据链上监控数据显示,由于Etoken中的donateToReserves函数存在流动性检查漏洞,项目遭受了闪电贷攻击。攻击者通过多次操作不同币种,最终造成了高达1.97亿美元的巨额损失,涉及6种代币。目前,这笔资金仍然留存在攻击者的账户中。
攻击过程分析
攻击者首先从某借贷平台获取了3000万个Dai的闪电贷,随后部署了两个合约:一个用于借贷,另一个用于清算。
攻击者将借来的2000万Dai质押到Euler Protocol合约中,获得了约1950万个eDAI。
利用Euler Protocol的10倍杠杆功能,攻击者借出了1.956亿个eDAI和2亿个dDAI。
攻击者使用剩余的1000万DAI偿还部分债务并销毁相应的dDAI,随后再次借出1.956亿个eDAI和2亿个dDAI。
关键步骤:攻击者调用donateToReserves函数,捐赠了10倍于偿还资金的金额,即1亿eDAI。紧接着,攻击者触发清算函数,获得了3.1亿dDAI和2.5亿eDAI。
最后,攻击者提取了3890万Dai,归还了3000万的闪电贷,最终获利约887万Dai。
漏洞成因分析
此次攻击的核心问题出在donateToReserves函数上。与其他关键函数(如mint函数)相比,donateToReserves函数缺少了一个至关重要的步骤:checkLiquidity。
checkLiquidity函数的作用是调用RiskManager模块,对用户进行检查,确保Etoken大于Dtoken,从而保证用户的流动性状况。正常情况下,每次操作都需要进行这项检查。然而,donateToReserves函数缺少这一步骤,导致攻击者可以先将自己置于可被清算的状态,然后完成清算操作。
安全建议
针对此类漏洞,我们建议项目方在上线前务必进行全面的安全审计,以确保合约的安全性。对于借贷类项目,尤其需要重点关注以下几个方面:
只有通过严格的安全审核和全面的风险评估,才能最大程度地降低类似安全事件的发生概率,保障项目和用户的资金安全。