900 万美金怎么没的?一文带你看懂 Yearn 被黑全过程

YaelYael
AbbieAbbie
/2025年12月5日
900 万美金怎么没的?一文带你看懂 Yearn 被黑全过程

行情冷下来后,很多协议都进入“低功耗模式”,更新慢了、审计跟不上了,旧代码的问题也开始浮出水面。黑客就喜欢捏这类「软柿子」,因此链上的攻击明显变得频繁。

仅 2025 年 11 月,链上累计被盗金额就超过 1.8 亿美元。

12 月 1 日,老牌 Defi 项目 Yearn 的 yETH 池子也没能幸免,被黑客抽走约 900 万美元。

今天我们不用晦涩语言,只用最简单的话讲明白:

黑客究竟做了什么?Yearn 为什么防不住?这类攻击会越来越多吗?

一、看懂攻击前,先搞懂 LP 和池子怎么运作

如果你对 LP、流动性、池子算法都不熟,这一节可以帮你快速上手,后面所有攻击步骤都围绕这些机制展开。

1. 流动性池:大家一起往储钱罐里放钱

把 yETH 池想成一个“大储钱罐”,里面装着各种 ETH 质押代币(LST),比如:

  • stETH
  • cbETH
  • rETH

越多人往池子里存钱,池子越厚,交易越稳定。

当你往池子里存资产,系统会发给你 LP(Liquidity Provider token),相当于你在这个池子里的股份凭证。

池子产生收益时,你能按 LP 比例分到钱;
等你想退出时,也可以按 LP 比例赎回池子里的真实资产。

2. LP 给多少?怎么算公平?

不同资产价值不一样,池子必须回答:“你放进来的资产究竟占池子多少价值?应该给你多少 LP?”

决定这个问题的,就是 Yearn 的核心函数 calc_supply,用于计算新的 LP 供应量(D)和池子的平衡指标 Π(vb_prod)。

它会把所有资产数值换算成统一单位,然后进行一系列复杂计算。

如果结果正确,一切正常;
如果结果错误,那就是黑客的机会。

3. Σ 与 Π:池子用来维持平衡的两个关键指标

池子会计算两个东西:

  • Σ(所有资产的虚拟余额相加):池子里“东西的总体量”
  • Π(所有资产的虚拟余额相乘):池子是否“保持平衡”的指标

只需要理解一件事:

Π 就像池子的“平衡线”,维护整个 AMM 的正常运作。

如果 Π 出现异常,池子就会错误判断资产价值。

而 Π = 0 对池子来说,就像“大脑短路”,会让整个算法进入错误模式。

黑客做的,就是让 Π 变成 0。

二、黑客如何一步步把 Yearn 推向崩溃?

1. 黑客先把池子调整到一个“很容易犯错”的状态

黑客先通过闪电贷借来大量 LST(LST=Liquid Staking Token,流动性质押代币),然后做了一些表面上很正常的操作:

  • 更新利率(update_rates):让池子内部的虚拟余额重新计算
  • 小幅添加流动性
  • 小幅移除流动性

这些操作本身是合法的,但会让 calc_supply 进入一个非常敏感的位置:
此时稍微改变池子数据,就可能导致算法算错。

2. calc_supply 被黑客推入错误分支:Π 被算成 0

calc_supply 内有一个非常关键的公式:

Π' = Π * (s'/s)^8

黑客通过精确控制池子状态,让 s’(新供应量)远小于 s(旧供应量)。

当 s'/s 非常非常接近 0 时:

  • (s'/s)^8 会直接被舍入为 0
  • Π' = Π * 0 = 0

Π = 0 = 池子不再按正常曲线工作

此时池子会误以为“资产之间没有价值关系”,整个定价逻辑失效。

这是整个攻击的转折点。

3. 利用 Π = 0,黑客开始凭空“印 LP”

当 Π=0 时,calc_supply 会进入一种退化模式:LP 按虚拟余额线性计算,添加不平衡资产会被系统严重“高估”。

Π=0 时,calc_supply 会退化,变成一种非常粗糙的线性计算模式:单边放入一点资产,系统会认为价值巨大,并奖励大量 LP。

这等于黑客可以只存入一点真实资产,就获得大量虚高 LP

4. 黑客用虚高 LP 去赎回真实资产,重复几轮后池子被掏空

黑客手中的 LP 数量远超本应获得的数值。

当他去 remove_liquidity 时,合约按 LP 比例给他真实资产,可池子并不知道 LP 是黑客“印”出来的

于是:虚假 LP → 换取真实 ETH/LST → 池子余额不断减少

每循环一次,池子资产减少一大截。

几轮下来,Yearn yETH 池就被榨干。

5. 池子被掏空后,黑客用“粉尘攻击”印最后一次钞

当池子彻底没有资产后:

  • Σ=0
  • Π=0
  • D=0

此时 calc_supply 不应该继续工作,但 Yearn 没有保护。

黑客再存入:几乎可以忽略不计的 1 wei 级别“粉尘”

calc_supply 在计算 A*Σ - s*Π 时,因为 unsafe_sub、unsafe_mul 不检查溢出,下溢变成一个巨大整数,再除以 d ≈ 2.6 × 10^56 个 LP

全部发给黑客。

这就是攻击的最后一步。

三、为什么这种攻击越来越频繁?

Yearn 这类被“数学漏洞”击穿的项目,之前有很多起。

2025 年 5 月 22 日,SUI 生态最大 DEX Cetus 被盗 2.23 亿美元。

它的问题与 Yearn 非常相似,都是关键数学模块没有处理好极端数值。

Cetus 的错误是位移运算检测阈值写错,让本该溢出的巨大数值通过检查。

黑客将 1 枚代币伪装成“天量流动性”,再把池子清空。

这种攻击模式几乎和 Yearn 一样:关键数学模块缺乏极端情况覆盖 → 黑客把系统推到极端 → 数学出错 → 池子崩坏。

这是如今最常见、也最难防的 DeFi 攻击类型:
不是攻破权限,而是攻破数学。

四、项目方如何避免成为下一个“Yearn”?

结合 Yearn、Cetus 的惨痛经验,可以看到三个共同点:

1. 数学函数必须经过“极端值”测试

重点检查:

  • 除以接近 0 的场景
  • 涉及指数幂的计算(尤其是 n≥4)
  • supply / balance 比值极小或极大时的行为

Yearn 的 calc_supply 与 Cetus 的流动性公式,都是在极端值上缺乏保护。

2. 禁用 unsafe_sub / unsafe_mul / unsafe_shifts

使用无检查运算符等于在数学系统里放炸弹。

  • Yearn 因为 unsafe_sub 发生下溢 → supply 爆成 10^56  
  • Cetus 因为 checked_shlw 阈值写错 → 流动性无限放大

只要一个地方没检查,黑客就能找到入口。

3. LP mint 必须设置上限保护

可以简单粗暴地设:

minted_LP ≤ deposited_value * C

即便 C 取 2 或 3,都能阻断几乎所有数学级攻击。

Yearn 和 Cetus 都缺乏对“异常铸造 LP”的监控。

真正摧毁 DeFi 的,不是黑客的刀,而是协议对自身数学逻辑的盲目信任。

在可预见的未来,随着协议更复杂、组合性更强,
数学级、边界级漏洞 将成为主流攻击方式。

下一次黑客攻击到来之前,每一个项目都应该问问自己:

你的底层机制,是防线?还是幻觉?

使用 OneKey 保护您的加密之旅

View details for 选购 OneKey选购 OneKey

选购 OneKey

全球最先进的硬件钱包。

View details for 下载应用程序下载应用程序

下载应用程序

诈骗预警。支持所有币种。

View details for OneKey SifuOneKey Sifu

OneKey Sifu

即刻咨询,扫除疑虑。

继续阅读