Euler Finance 黑客攻击事件详解

  • hacken
  • 发布于 2025-06-27 17:10
  • 阅读 12

2023年3月,Euler Finance 协议遭受闪电贷攻击,损失高达1.87亿美元。攻击者通过创建多个合约,利用 Aave 闪电贷,并利用 Euler Finance 合约中 donateToReserves 函数缺乏流动性检查和健康评分的缺陷,成功窃取大量资金。

更新于:2025 年 6 月 26 日

阅读需 4 分钟

作者:Hacken

2023 年 3 月 13 日,加密货币行业受到了一些震动。一名攻击者利用 Euler Finance 协议进行了一次打破记录的 1.87 亿美元闪电贷攻击

Twitter 嵌入

在 X 上访问此帖子

Hacken🇺🇦

@hackenclub

·

关注

在 X 上查看

🚨 Euler Finance (@eulerfinance) 遭到了攻击

💸 被盗金额约为 1.87 亿美元

被盗资产包括 $stETH, $USDC, $WBTC

更多细节在下面的线程中 ⬇️🧵

2023 年 3 月 13 日上午 10:13

X 广告信息和隐私

69 回复

复制链接

阅读 5 条回复

根据链上报告,黑客从 Euler Finance 协议中窃取了 1.87 亿美元。到目前为止,这在 2023 年最大的黑客攻击列表中名列前茅。这是如何发生的?

攻击内幕

黑客创建了三个合约:一个主要的合约,然后是另外两个用于违规和清算的合约。他们从闪电贷协议 Aave 获得了一笔 3000 万 DAI 的闪电贷,并将其发送到违规合约。

黑客将 2000 万 DAI 存入 Euler 协议,并获得了约 1960 万 eDAI 作为回报。然后,他们利用这 1960 万 eDAI 借入了约 1.956 亿 eDAI 和 2 亿 dDAI。

回想一下,黑客在他们借入的 3000 万 DAI 中还剩下 1000 万 DAI。他们用剩下的 1000 万 DAI 偿还了部分债务。这很重要,因为 Euler Finance 智能合约会检查借款账户的健康评分。余额现在为 1.9 亿 dDAI。然后他们又借入了 1.956 亿 eDAI 和 2 亿 dDAI。

此时,黑客向 Euler 协议储备捐赠了 1 亿 eDAI。此调用成功,因为 donateToReserve 函数没有流动性检查。清算调用成功,攻击者获得了 2.54 亿 dDAI 和 3.1 亿 eDAI。他们偿还了 Aave 的 3000 万 DAI,并通过这次攻击赚取了约 870 万 DAI。

事情并没有就此结束。攻击者还使用了这个地址 [00x47ac3527d02e6b9631c77fad1cdee7bfa77a8a7bfd4880dccbda5146ace4088f] 来执行与 WETH 相同的攻击逻辑。

攻击者的行为:

  • 从 Aave 借入 20895 WETH 闪电贷
  • 将 13930 WETH 存入 EToken 池
  • 铸造 ETokens 并从池中收到 13930
  • 支付 6965 WETH 以提高健康评分
  • 铸造 13930 WETH 并捐赠 69650 WETH
  • 清算合约收到 28994 WETH
  • 偿还 Aave 并提走 8099 ETH(135,630,71 美元)

漏洞是什么?

经过仔细分析,我们发现黑客利用了 Euler Finance 合约中的两个漏洞。

1. donateToReserves 函数缺乏流动性检查。 donateToReserve 函数允许 Euler 的用户将资金存入保留地址。每个调用此函数的人都拥有债务代币 (DToken) 和权益代币 (EToken)。

此函数的主要漏洞在于它不会检查或确认借款人的流动性状况。因此,用户可以通过将其权益代币捐赠给储备,同时保持其债务代币不变,从而使其杠杆低于抵押水平。这会产生一种技术性坏账。因此,黑客的清算合约成功地从协议中撤回了资金。

2. 健康评分缺陷。 Euler Finance 有一个为账户分配健康评分的设计。它允许无力偿债的账户在不偿还未偿债务的情况下获得抵押品。这在 computeLiqOpp 函数中有所说明。

此代码块背后的逻辑是,没收借款人的所有抵押品并不一定意味着他们仍然有偿付能力。因此,他们剩下的任何抵押品都应该足够。但是,攻击者可以通过进行抵押不足的杠杆来利用此逻辑。

Euler Finance 团队如何处理这种情况?

3 月 14 日,Euler 团队在其 Twitter 帐户上发布了一份声明,并提到了他们的 3 个行动步骤:

  • 停止攻击
  • 聘请更多 ETH 安全公司
  • 让执法机构介入
  • 可能与黑客谈判

从攻击中吸取的教训

虽然 Euler 团队正在努力从攻击中恢复,但从这次攻击中可以吸取一些教训:

彻底测试。仔细观察,donateToReserve 函数没有经过适当的测试。正如在他们的 GitHub 上看到的那样,它没有针对借款后捐赠以及捐赠后的健康评分进行测试。如果团队针对每种可能的场景测试了易受攻击的函数,他们本可以缓解这次攻击。当向现有代码库引入新的逻辑和函数时,这一点更为关键。就像 donateToReserve 函数的情况一样,测试智能合约中的新改进。

更严格地审计六家 Web3 安全公司 已经审计了 Euler Finance,但仍然发生了此攻击。可以肯定地说,并非所有审计都审查了错误的函数。尽管如此,一些审计并没有深入进行,可能会遗漏重要的函数,因此最好进行全面的审计。

申请一项能够带来改变的 智能合约审计

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

0 条评论

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