Euler Finance事件后续分析

本文分析了2023年3月13日Euler Finance遭遇的安全事件,重点是捐赠机制的漏洞如何导致用户能够创造无担保的债务。该漏洞源于未进行适当的账户健康检查,允许用户在同一交易内人工增加杠杆并随之进行自我清算,结果造成了大量的坏账和不必要的损失。

omniscia.io

本文旨在以中立的方式分析于3月13日大约08:50 UTC发生的Euler Finance事件,并识别根本原因。

漏洞分析

被利用的漏洞源于Euler Finance如何允许在没有适当账户健康检查的情况下进行捐赠。

该漏洞代码是在eIP-14¹中引入的,该提案在Euler生态系统中进行了多项更改。缺陷存在于对EToken实现的第一次更改(EToken::donateToReserves 功能²)中。

Liquidation模块中的逻辑将尝试偿还违规者的全部债务,但如果他们拥有的抵押品无法满足预期的偿还收益,系统默认使用用户持有的任何抵押品³。

该代码块的假设状态为,当借款人的可用抵押品不足时,唯一的情况是:

这可能发生在借款人拥有多个抵押品时,并且没收其中所有抵押品并不会使违规者恢复偿付能力。

该安全保证未能通过捐赠机制得到维护,该机制允许用户以捐赠其EToken单位的方式创造“坏债务”,而不影响他们的DToken余额⁴。

核心问题

Euler Finance协议允许用户通过在同一交易中铸造和存入资产来创造人工杠杆,这个过程通过EToken::mint进行。此机制允许铸造超过Euler Finance协议自身所持抵押品的代币。

欧拉金融在eIP-14¹中引入的捐赠机制(EToken::donateToReserves)允许用户将其余额捐赠给他们所交易的代币的reserveBalance。缺陷在于它没有对执行捐赠的账户进行任何健康检查。

因为捐赠会使用户的债务(DToken)保持不变,而他们的权益(EToken)余额减少,账户的清算将使用户的部分DToken单位保留,从而形成坏债务。

上述缺陷允许攻击者创建一个过度杠杆的位置,并在同一个区块中自行清算,通过人为导致其“水位下沉”。

violator自行清算时,会应用基于百分比的折扣,这将导致liquidator以折扣方式获得大量EToken单位,确保他们将“在水面上”,并仅承担与他们获得的抵押品相对应的债务。

最终结果是violator拥有大量“坏债务”(DToken),而liquidator则由于Euler协议的基于百分比的清算激励⁵,其联合担保超过其债务(DToken > EToken)。在交易本身中可以看到,攻击过程中应用了最高20%的折扣⁶。

攻击场景

为了使攻击者能够清算自己,他们必须部署至少两个合约来利用此漏洞。在2023年02月01日06:29:18 UTC提交的攻击交易⁶调用了在之前的交易中部署的一个合约⁷。

在攻击交易的执行过程中,该合约执行了以下步骤:

a. 主合约:

  • 从AAVE V2获取3000万DAI的闪贷
  • 部署两个合约(violator⁸ & liquidator⁹)用于攻击
  • 将全部3000万DAI贷款余额转移给violator

b. violator 合约:

  • 向Euler Finance的DAI EToken存入2000万DAI,获得约1956万eDAI代币
  • 创建200万的人工eDAI杠杆,为violator铸造约1956万eDAI和200万dDAI
  • violator的头寸上偿还1000万DAI,使其dDAI余额减少至1900万
  • 创建另一200万的人工eDAI杠杆,为violator铸造约1956万eDAI和200万dDAI
  • EToken的储备捐赠1000万eDAI

此时,我们获得以下 violator 状态:

  • eDAI: ~310,93m
  • dDAI: 390m

在上述状态下,violator持有的dDAI代币数量远大于eDAI代币,这些eDAI代币将永远不会被作为抵押,因为它们的支持在捐赠调用中被“抹去”。liquidator将利用Liquidation模块中的计算。

如前所述,Liquidation模块将清算用户的抵押品余额。因此,liquidator可以清算violator,承担其全部约310,93m eDAI余额,但只需承担部分dDAI余额,进一步因Euler Finance的清算折扣而加剧。

由于最低健康水平将对该头寸应用最高折扣,liquidator将以约310,93m eDAI的余额,按照1.25 eDAI代币兑换dDAI的汇率获取。这将最后评估为扣费后约259,31m dDAI余额。

liquidator 合约:

  • 清算头寸,获得约310,93m eDAI代币和约259,31m dDAI代币
  • 通过销毁对应的eDAI代币提取全部储备DAI代币

在提现步骤中,EToken所尊重的eDAIDAI的兑换率因计算的交换率¹⁰考虑了系统的总借款,而这些借款因清算的repayExtra值而被人为增加。

因此,赎回时使用的兑换率大约为0.97 eDAIDAI。由于用户已经“在水面上”,是因为在他们的清算中施加的最高20%清算折扣,他们能够“燃烧”约380万eDAI以释放对应合同持有的约389万DAI

最终,攻击者在其交易执行后保留了以下资产:

  • +~8,877,507 DAI = ~8,779,854.423 USD

攻击者使用的合约的eDAIdDAI余额也不为零,特别是liquidator合约的健康因子为~1.05。因此,用户应避免重新存入DAI代币至EToken,因为它们可能仍然易受攻击

我们可以评估DAI资产的财务影响,计算出截至2023-03-13 12:42:00 UTC的估计收益约为~8,779,854.423 USD

此次攻击已被复制到多个其他资产。因此,存款警告适用于以下 EToken 资产DAIWETH

安全审计

Omniscia对Euler Finance协议进行了多次安全审计。然而,相关的更改是在eIP-14中引入的。如信息板所示,Omniscia仅审核了Chainlink集成组件,该报告公开可用在这里

导致此漏洞的EToken::donateToReserve功能并不在Omniscia进行的任何审计范围内。因此,导致漏洞的代码从未在我们团队所进行的任何审计范围内。

donateToReserves函数在2022年7月 被Sherlock团队 审核。Euler Finance和Sherlock确认,在攻击发生时,Euler与Sherlock之间有有效的覆盖政策。

结论

此次攻击最终源于不正确的捐赠机制,并未考虑捐赠者的债务健康,从而允许他们创造未被支持的DToken债务,这笔债务将永远不会被清算。

来源

  1. Euler改进提案14: https://forum.euler.finance/t/eip-14-contract-upgrades/305
  2. Euler改进提案14 Delta: https://euler-xyz.github.io/euler-contracts-upgrade-diffs/eip14/EToken.html
  3. Euler Liquidator抵押默认逻辑: https://github.com/euler-xyz/euler-contracts/blob/fa9398728165676a5666939d8c34a7578d8e1919/contracts/modules/Liquidation.sol#L139-L151
  4. Euler EToken故障捐赠机制: https://github.com/euler-xyz/euler-contracts/blob/fa9398728165676a5666939d8c34a7578d8e1919/contracts/modules/EToken.sol#L356-L386
  5. Euler清算折扣: https://docs.euler.finance/euler-protocol/eulers-default-parameters#maximum-liquidation-discount
  6. Etherscan攻击交易链接: https://etherscan.io/tx/0xc310a0affe2169d1f6feec1c63dbc7f7c62a887fa48795d327d4d2da2d6b111d
  7. Etherscan主合约地址: https://etherscan.io/address/0xebc29199c817dc47ba12e3f86102564d640cbf99
  8. Etherscan违规者合约地址: https://etherscan.io/address/0x583c21631c48d442b5c0e605d624f54a0b366c72
  9. Etherscan清算者合约地址: https://etherscan.io/address/0xa0b3ee897f233f385e5d61086c32685257d4f12b
  10. Euler BaseLogic交换率计算: https://github.com/euler-xyz/euler-contracts/blob/fa9398728165676a5666939d8c34a7578d8e1919/contracts/BaseLogic.sol#L292-L296

Omniscia.io 是快速增长和最受信任的区块链安全公司之一,迅速成为真正的市场领军者。到目前为止,我们的团队已经共同保证了超过2000亿美元的数字资产,与260多位客户合作,发现了1300多个高严重性问题** 在我们客户的智能合约中。

创立于2021年初,由区块链网络安全老将组成的团队, omniscia.io 是Web3安全的开创者,利用数年的经验,开发专有工具以及经过验证的保护智能合约和复杂的去中心化协议的方法,包括Aave、YFI、lien、1inch、fetch、compound、synthetix等。

我们的客户、合作伙伴和支持者 包括L’Oréal、Polygon、AvaLabs、Morpho、Euler、CLabs、Olympus DAO、Fetch.ai、LimitBreak等领先生态系统参与者。

确保关注我们的社交媒体并订阅我们的新闻通讯以获取更多更新:

Twitter / LinkedIn / 新闻通讯

  • 原文链接: medium.com/@omniscia.io/...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
omniscia.io
omniscia.io
江湖只有他的大名,没有他的介绍。