# Euler Finance项目遭受闪电贷攻击,损失近2亿美元2023年3月13日,Euler Finance项目因合约漏洞遭受闪电贷攻击,损失高达1.97亿美元。攻击者利用了项目合约中donateToReserves函数缺少流动性检查的漏洞,通过多次操作获取了巨额利润。## 攻击过程分析1. 攻击者首先从某借贷平台闪电贷借入3000万DAI,并部署了两个合约:借贷合约和清算合约。2. 攻击者将借来的2000万DAI质押到Euler Protocol合约中,获得19.5万个eDAI。3. 利用Euler Protocol的10倍杠杆功能,攻击者借出了195.6万个eDAI和200万个dDAI。4. 攻击者使用剩余的1000万DAI偿还部分债务,销毁了相应的dDAI,随后再次借出同等数量的eDAI和dDAI。5. 关键步骤:攻击者调用donateToReserves函数,捐赠了100万eDAI,随后通过liquidate函数清算,获得310万dDAI和250万eDAI。6. 最后,攻击者提取了38.9万DAI,归还了30万DAI的闪电贷,最终获利8.87万DAI。## 漏洞原因此次攻击的核心漏洞在于Euler Finance合约中的donateToReserves函数缺少必要的流动性检查。与其他关键函数如mint相比,donateToReserves函数没有执行checkLiquidity操作。这导致攻击者能够绕过正常的流动性检查,人为制造可被清算的状态,然后完成清算获利。正常情况下,checkLiquidity函数会调用RiskManager模块,确保用户的Etoken数量大于Dtoken数量,以维持合约的安全性。然而,由于donateToReserves函数缺少这一关键步骤,攻击者得以利用这一漏洞进行攻击。## 安全建议针对此类攻击,我们建议区块链项目方:1. 在合约上线前进行全面的安全审计,确保合约的安全性。2. 对于借贷类项目,需特别关注资金偿还、流动性检测和债务清算等关键环节。3. 确保所有可能影响用户资产状态的函数都包含必要的安全检查,如流动性检查。4. 定期进行代码审查和更新,及时修复发现的漏洞。5. 建立应急响应机制,以便在发生安全事件时能够迅速反应和处理。通过采取这些措施,项目方可以大大降低遭受类似攻击的风险,提高合约的整体安全性。
Euler Finance遭闪电贷攻击 近2亿美元损失
Euler Finance项目遭受闪电贷攻击,损失近2亿美元
2023年3月13日,Euler Finance项目因合约漏洞遭受闪电贷攻击,损失高达1.97亿美元。攻击者利用了项目合约中donateToReserves函数缺少流动性检查的漏洞,通过多次操作获取了巨额利润。
攻击过程分析
攻击者首先从某借贷平台闪电贷借入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万DAI的闪电贷,最终获利8.87万DAI。
漏洞原因
此次攻击的核心漏洞在于Euler Finance合约中的donateToReserves函数缺少必要的流动性检查。与其他关键函数如mint相比,donateToReserves函数没有执行checkLiquidity操作。这导致攻击者能够绕过正常的流动性检查,人为制造可被清算的状态,然后完成清算获利。
正常情况下,checkLiquidity函数会调用RiskManager模块,确保用户的Etoken数量大于Dtoken数量,以维持合约的安全性。然而,由于donateToReserves函数缺少这一关键步骤,攻击者得以利用这一漏洞进行攻击。
安全建议
针对此类攻击,我们建议区块链项目方:
在合约上线前进行全面的安全审计,确保合约的安全性。
对于借贷类项目,需特别关注资金偿还、流动性检测和债务清算等关键环节。
确保所有可能影响用户资产状态的函数都包含必要的安全检查,如流动性检查。
定期进行代码审查和更新,及时修复发现的漏洞。
建立应急响应机制,以便在发生安全事件时能够迅速反应和处理。
通过采取这些措施,项目方可以大大降低遭受类似攻击的风险,提高合约的整体安全性。