# Euler Finance遭遇闪电贷攻击,损失近2亿美元2023年3月13日,Euler Finance项目因智能合约漏洞遭受闪电贷攻击,造成约1.97亿美元的重大损失。攻击者利用了合约中donateToReserves函数缺少流动性检查的漏洞,通过多次操作完成了攻击。## 攻击过程分析攻击者的主要步骤如下:1. 从某借贷平台闪电贷借入3000万DAI,并部署了借贷和清算两个合约。2. 将2000万DAI质押到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万闪电贷,净利润约887万DAI。## 漏洞原因攻击的核心在于Euler Finance合约中donateToReserves函数缺少必要的流动性检查。与其他关键函数(如mint)相比,donateToReserves函数未调用checkLiquidity进行用户流动性验证。这使得攻击者能够通过特定操作使自己处于可被清算的状态,然后完成清算获利。正常情况下,checkLiquidity函数会调用RiskManager模块,确保用户的Etoken始终大于Dtoken,以维持合约的安全性。然而,donateToReserves函数跳过了这一重要步骤,导致了严重的安全漏洞。## 教训与建议此次事件再次强调了智能合约安全审计的重要性。对于借贷类项目,需要特别关注以下几个关键方面:1. 资金偿还机制的完整性2. 流动性检测的全面性3. 债务清算流程的安全性项目方在上线前应进行全面的安全审计,确保合约的每个功能都经过严格的安全检查。同时,持续的安全监控和漏洞赏金计划也是保障项目长期安全的有效措施。此外,开发者应该注意函数间的一致性,确保关键的安全检查(如流动性检查)在所有相关函数中都得到正确实施。这不仅包括主要功能,还应涵盖辅助功能如捐赠等。最后,建议项目方和开发者保持对新兴攻击手法的警惕,定期更新安全策略,以应对不断演变的区块链安全威胁。
Euler Finance遭闪电贷攻击 损失近2亿美元
Euler Finance遭遇闪电贷攻击,损失近2亿美元
2023年3月13日,Euler Finance项目因智能合约漏洞遭受闪电贷攻击,造成约1.97亿美元的重大损失。攻击者利用了合约中donateToReserves函数缺少流动性检查的漏洞,通过多次操作完成了攻击。
攻击过程分析
攻击者的主要步骤如下:
从某借贷平台闪电贷借入3000万DAI,并部署了借贷和清算两个合约。
将2000万DAI质押到Euler Protocol合约中,获得1950万eDAI。
利用Euler Protocol的10倍杠杆功能,借出1.956亿eDAI和2亿dDAI。
用剩余1000万DAI偿还部分债务,销毁相应dDAI,随后再次借出同等数量的eDAI和dDAI。
通过donateToReserves函数捐赠1亿eDAI,然后调用liquidate函数进行清算,获得3.1亿dDAI和2.5亿eDAI。
最后提取3890万DAI,归还3000万闪电贷,净利润约887万DAI。
漏洞原因
攻击的核心在于Euler Finance合约中donateToReserves函数缺少必要的流动性检查。与其他关键函数(如mint)相比,donateToReserves函数未调用checkLiquidity进行用户流动性验证。这使得攻击者能够通过特定操作使自己处于可被清算的状态,然后完成清算获利。
正常情况下,checkLiquidity函数会调用RiskManager模块,确保用户的Etoken始终大于Dtoken,以维持合约的安全性。然而,donateToReserves函数跳过了这一重要步骤,导致了严重的安全漏洞。
教训与建议
此次事件再次强调了智能合约安全审计的重要性。对于借贷类项目,需要特别关注以下几个关键方面:
项目方在上线前应进行全面的安全审计,确保合约的每个功能都经过严格的安全检查。同时,持续的安全监控和漏洞赏金计划也是保障项目长期安全的有效措施。
此外,开发者应该注意函数间的一致性,确保关键的安全检查(如流动性检查)在所有相关函数中都得到正确实施。这不仅包括主要功能,还应涵盖辅助功能如捐赠等。
最后,建议项目方和开发者保持对新兴攻击手法的警惕,定期更新安全策略,以应对不断演变的区块链安全威胁。