W3
安全实战与案例库进阶141 次阅读

Euler Finance 被盗约 1.97 亿美元:闪电贷与"自我清算"

攻击者先用闪电贷制造一个坏账仓位,再反过来清算自己套走协议资金——闪电贷本身无罪,但它把攻击门槛降到了零。

#安全#案例#闪电贷#借贷协议#清算

一句话结论

Euler 事件展示了经济逻辑漏洞的攻击范式:代码没有语法错误,但业务规则可以被组合出攻击者想要的结果。

事件经过

Euler Finance 是以太坊上的借贷协议。2023 年 3 月,攻击者通过一系列交易盗取约 1.97 亿美元,随后在链上被公开施压,最终归还了绝大部分资金

攻击思路拆解

攻击者没有利用重入或溢出,而是钻了三个逻辑空的组合:

  1. 闪电贷借入巨额资金:在一笔交易内无抵押借到大量资产,解决"启动资金"问题
  2. 制造坏账仓位:通过一次被协议判定为"不健康"的存款操作,让某个账户出现超额债务
  3. 触发自我清算:由于清算逻辑按折价把抵押品奖给清算人,攻击者用另一个自己控制的账户"清算"前面那个账户,把资金合法转移出来

关键在于:协议允许用户"清算自己",且清算折扣被设计为奖励清算人。这两条规则单独看都合理,组合起来就留下了一个可提取资金的通道。

为什么闪电贷这次又出现了

闪电贷本身是中性工具,它解决的是"攻击需要巨额启动资金"的问题。当漏洞的利润空间大于手续费时,闪电贷就让任何人都能执行这笔攻击,包括没有本金的人。

给你的教训

  • 审计报告只能覆盖代码正确性,覆盖不了经济逻辑的组合风险。看审计报告时,更要关注"经济模型 / 清算逻辑"部分的结论与遗留风险。
  • 协议的参数(清算折扣、抵押率)本身就是攻击面:参数越激进,被组合利用的空间越大
  • 对用户来说:借贷协议的"高存款利率"往往来自高借款需求,而高借款需求可能来自可被套利的参数设计,不一定代表健康。

延伸阅读