Yearn yETH为什么会被黑? Yearn yETH被黑的漏洞原理
在Defi体系中,流动性池是自动化做市(AMM)得以运行的底层结构。Yearn Finance推出的yETH池便是典型案例。该池汇集多种以太坊流动性质押衍生品(LST),如stETH、cbETH、rETH、apxETH、sfrxETH、wstETH等。用户将这些资产注入池中,协议按份额铸造LP代币yETH,作为资产所有权与收益分配的凭证。

最近Yearn Finance的yETH池后来因核心数学函数缺陷遭到攻击,成为2025年Defi安全领域的重要案例。
那么Yearn yETH为什么会被黑?Yearn yETH被黑的漏洞原理是什么?
LP代币的作用机制
1、当池子产生收益时,持有人可按持仓比例分配收益。
2、持有人可按比例赎回底层资产。
池内资产规模越大,滑点越低,定价越稳定。LP代币本质上是一种可流通的“份额映射”。
LP铸造逻辑与 _calc_supply函数
由于不同LST的兑换比例与实际价值存在差异,合约必须精确计算每次存入在池中总价值中的占比。Yearn yETH加权稳定池通过 _calc_supply 函数完成核心计算。
1、计算新的LP总供应量D
2、更新平衡指标 Π(vb_prod)
其中涉及两个核心参数。
Σ(虚拟余额之和)
反映池中资产的整体规模。
Π(虚拟余额之积)
衡量各资产之间的均衡程度,是AMM不变量曲线成立的前提。
当 Π 保持正常区间时,AMM能正确表达资产间的价格关系;一旦 Π 被推至异常区间,定价曲线即发生结构性偏移。2025年11月30日的攻击正是围绕 Π 展开。
Yearn yETH攻击全过程拆解
根据Check Point Research与SlowMist报告,攻击在单笔交易内完成(区块高度21,914,086),损失约900万美元。
第一阶段:构造数值临界状态
攻击者通过闪电贷借入大量LST,然后进行了以下操作。
1、调用 update_rates 更新虚拟余额
2、多次小额存取,使缓存变量 packed_vbs[] 留下残值
3、将 _calc_supply 推至数值敏感边界
这些操作均为合法函数调用,但组合方式改变了池内部状态。
第二阶段:Π 被截断为0
关键公式:Π' = Π × (s' ÷ s)^8
攻击者刻意让s' 远小于s,使比值趋近于0。
在Solidity定点数运算下,8次幂结果被直接截断为0:Π' = Π × 0 = 0
不变量约束A·Σ ≥ D·Π 失效,Newton迭代发散,AMM曲线退化。合约未做域检查,导致系统进入异常状态。
第三阶段:退化模式下超额铸造
Π = 0后,_calc_supply 退化为线性近似逻辑。
单边存入被严重高估,小额资产即可换取大量LP。攻击者以极低成本获得虚高的yETH。
第四阶段:循环赎回抽干流动性
攻击者调用 remove_liquidity。
1、合约按LP比例分配真实资产
2、无法识别LP来自异常计算
数轮循环后,池内资产接近耗尽。
第五阶段:16 wei触发天量铸造
当池清空后。
1、主供应量 self.supply = 0
2、packed_vbs[] 未清除
攻击者存入16 wei。合约误判为初始化流程。
在执行 unsafe_sub、unsafe_mul 时发生下溢,生成巨大正整数。
结果:约2.35 × 10^56枚yETH被铸造
攻击者将其通过Curve兑换为WETH,偿还闪电贷后净赚约900万美元。
约1100 ETH经Tornado Cash转移。
Yearn追回约240万美元。
同类数学漏洞对比
| 项目 | Yearn yETH | Cetus Protocol | Balancer V2 |
|---|---|---|---|
| 时间 | 2025/11/30 | 2025/05/22 | 2025/11/03 |
| 损失 | 900万美元 | 2.23亿美元 | 1.28亿美元 |
| 类型 | 不变量截断+下溢 | 位移溢出阈值错误 | 舍入误差累积 |
| 手法 | Π 归零后超额铸造 | 1枚代币伪装巨额流动性 | 批量微兑换压低价格 |
| 追回 | 约240万美元 | 冻结1.62亿美元 | 追回约1900万美元 |
Cetus:位移运算阈值错误
Sui上最大DEX。
checked_shlw 的溢出判断常量写错,使溢出值绕过检查。
攻击者以1枚代币换取天量流动性。
部分资产被冻结并治理追回。
Balancer:舍入误差被放大
攻击者执行65次微型batchSwap。
1、利用 _upscaleArray 向下舍入
2、累积精度损失
3、压低BPT价格
4、低价铸造再全额赎回
攻击合约含 console.log,显示可能借助LLM编写。
2025年Defi安全态势
Chainalysis数据显示。
1、2025年全年被盗约34亿美元
2、上半年24.7亿美元
3、单笔攻击规模显著扩大
特点
1、代码漏洞呈阶段性下降后反弹
2、钱包与私钥泄露成为最大损失来源
3、数学边界漏洞成为主攻方向
攻击演变路径
1、早期:重入、预言机操纵
2、中期:闪电贷套利
3、当前:算术边界、精度损失、不变量收敛失败
协议层面的工程防御思路
1. 极端值测试覆盖
1、除数趋近0
2、高次幂运算
3、极端供应比值
4、清池后再初始化
模糊测试应覆盖完整生命周期。
2. 禁用无检查算术
Yearn使用 unsafe_sub 导致下溢
Cetus位移阈值错误
Balancer舍入方向问题
关键路径必须使用安全算术。
3. LP铸造合理上限
规则示例:LP ≤ 存入价值 × 常数C
即便C设为3,也足以阻断异常放大。
4. 不变量文档化+模糊测试
1、每条数学不变量需记录逻辑假设
2、建立单元、集成、变异、fuzz测试体系
3、验证舍入方向在多步操作下仍成立
常见问题解析
Π 归零的根本原因?
(s'/s)^8在定点数下被截断为0,合约缺乏边界检查,导致不变量失效。
16 wei为何能铸造10^56级别代币?
清池后主供应量归零但缓存残留。
下溢生成巨大正整数,系统误判为初始化铸造。
与Cetus的区别?
Yearn:不变量截断+下溢
Cetus:位移溢出检查常量错误
分别发生在Vyper与Move合约中。
Yearn追回多少资产?
约240万美元,通过销毁pxETH实现。
yETH池受影响,Vault产品未受波及。
Defi如何防范此类漏洞?
1、极端边界测试
2、安全算术
3、LP上限限制
4、数学不变量文档化
5、实时链上异常监控
数学层漏洞往往隐藏在“正常逻辑”深处。当外部权限问题逐步被封堵,算术边界正在成为新的攻击入口。






