Yearn被盗$9M美金攻击分析

현재 언어 번역이 없어 원문을 표시합니다.
2025 年 12 月 1 日,Yearn 协议遭遇了一起经过精密策划的多阶段攻击,最终造成约 900 万美元资产损失。攻击者以闪电贷为杠杆,通过一系列精确衔接的操作,利用协议在极端场景校验、多重逻辑分支与数值精度控制上的缺陷,逐步操控资金池状态,最终实现 yETH 相关 LP 代币的近乎无限铸造并抽空资金池。本次事件凸显了 DeFi 攻击向专业化与组合化发展的趋势,也暴露出协议在边缘参数处理、关键计算函数设计以及多维监控体系建设方面的系统性短板,为行业敲响了强化全流程安全的警钟。

前言

2025年12月1日,Yearn协议遭遇了一起精心设计的多阶段复杂黑客攻击,最终导致约900万美元资产损失。攻击并非单一漏洞利用,而是攻击者通过闪电贷撬动资金、利用协议多重逻辑缺陷逐步操控资金池状态,最终实现近乎无限铸造yETH相关LP代币并耗尽资金池的恶性事件。

本次攻击以闪电贷为初始资金杠杆,通过多步骤操作层层突破协议防护,核心攻击流程可分为资金筹备、状态操控、无限铸币及获利了结四个关键阶段,各环节环环相扣,精准利用了协议设计中的逻辑漏洞。

攻击tx: https://etherscan.io/tx/0x53fe7ef190c34d810c50fb66f0fc65a1ceedc10309cf4b4013d64042a0331156

技术分析

首先通过2个闪电贷分别从Balancer和Aave中借出wstETH, rETH, WETH和0xa35b_ETHx, rETH, wstETH, cbETH。

在闪电贷回调函数中将借出的ETH用1100 ETH存入Tornado.Cash: 100 ETH混币,随后借助Tornado.Cash: 100 ETHwithdraw函数取款100 ETH到恶意合约0x3e8e7533dcf69c698Cf806C3DB22f7f10B9B0b97并触发其fallback函数。

在fallack函数中,可以看到下图最后一笔exchange与下一步remove_liquidity数值一致,可以推断前面的步骤都是为了将闪电贷得到的资产都通过exchange等操作兑换成大量的yETH weighted stableswap pool的LP代币,为后续攻击做准备。

至此,核心的攻击流程正式开始。

1.首先将上述exchange得到的LP代币通过yETH weighted stableswap pool的remove_liquidity函数全部销毁转化成按份额分配的8种该pool中的底层资产。

该remove_liquidity函数的逻辑可以理解为假设池子总共有10,000个LP Token,你销毁了416.37个LP Token,你的比例就是:416.37 / 10,000 = 4.16%。

然后对于每一种资产,假设池子里有1,000个wstETH(虚拟余额prev_vb)。你能取走的虚拟余额:dvb = 1,000 * 416.37 / 10,000 = 41.637 wstETH,然后再除以汇率rate转换为实际代币数量。

2.其次通过反复调用add_liquidity类似注入单边池子,一共有8个_amounts参数分别对应要注入的不同资产的数量。观察到前面的几次循环index3[rETH代币]、index6[wOETH代币]和index7[mETH代币]都输入0,即每次加流动性都不加这3个代币。

通过如上方式注入单边资产并提取池中代币的方式人为地扩大池子中rETH、w0ETH和mETH和其他代币的数量差距。

3.紧接着单边注入巨量的rETH代币,而后关键的一步remove_liquidity,但是输入_amount=0。

为什么可以提取0个代币?通过remove_liquidity的内部实现。

remove_liquidity函数没有对0⾦额进⾏短路处理,依然执⾏了完整的vb_prod计算循环,并且是基于上述人为制造的池子中代币数量差距计算并更新全局packed_pool_vb状态。

4.而后调用update_rates函数只更新index6[wOETH]的池子比例,最后再调用remove_liquidity提取池中代币,此时该pool中的W0ETH数量已经所剩无几。

5.同样的通过类似的方式榨干pool中index6[w0ETH]和index7[mETH]的份额,注意这里前两次更新index6后马上remove_liquidity提取代币,而最后一个index7[mETH]目前只做了更新还未提取。

至此通过上述加巨量单边池并不断的提取所有池子代币的方式,pool中W0ETH和mETH的比例已经近乎为0。

此时创建新的恶意合约0xADbE952eBB9b3e247261d2E3b96835f00f721f8E,并将所有的代币转到该合约。注意在这之前的上一步骤中单边加rETH获得的LP代币并没有兑换成底层代币,而是也转移到了新的恶意合约。

前面的攻击操作在update_rates更新了index7[mETH]而未做提取的代币在这里通过调用remove_liquidity提取,此时pool中index6[w0ETH]占比份额很小,index7[mETH]的占比份额更小。

此时pool中代币比例已经严重失调,攻击者再次调用add_liquidity添加流动性,按照[1, 1, 1, 1, 1, 1, 1, 9]的比例获取巨量LP代币。

到这里攻击者已经获得大额LP代币,后续便是通过exchange、redeem等方式获利了结并偿还闪电贷的费用。

攻击复盘

本次攻击是一起复杂的多阶段组合攻击,攻击者利用了pool.vy合约中的三个核心漏洞:精度丢失 (Precision Loss)、收益剥离 (Yield Stripping) 和 零供应初始化 (Zero Supply Initialization)。

阶段一:制造极端失衡

* 操作: 攻击者反复调用add_liquidity,但刻意避开 index 3 (rETH), index 6 (wOETH), index 7 (mETH)。

* 目的: 人为制造池子中资产比例的失衡。

* 关键步骤: 而后单边注入巨量rETH。

* 后果: 极度拉大rETH 与其他资产(特别是wOETH和mETH)的数量差距,为精度丢失创造数学条件。

阶段二:触发并锁定误差

* 操作:

  • 调用 remove_liquidity(_amount=0)。

* 原理:

  • remove_liquidity未对0金额进行短路处理。
  • 即使不转账,合约依然执行vb_prod的完整计算循环。
  • 在极端权重失衡下,_pow_down函数产生显著的向下取整误差。
  • 合约将这个错误偏小的vb_prod写入全局状态packed_pool_vb。

* 本质: 这是一个“零成本”的状态攻击,攻击者未付出任何代价就成功篡改了池子的账面价值。

阶段三:收益剥离与份额榨取

* 操作:

  • update_rates([6]) (更新wOETH汇率)。
  • remove_liquidity (提取资产)。
  • update_rates([7]) (更新mETH汇率)。

* 原理:

  • update_rates会触发 _update_supply。由于vb_prod之前被恶意压低,系统误判池子价值缩水,从而销毁Staking合约持有的LP代币来平账。
  • 攻击者利用remove_liquidity在汇率更新前后进行套利,逐步榨干池子中wOETH和mETH的份额。

* 结果: Staking合约的份额被大量销毁,攻击者手中的LP份额占比被动提升,池子Total Supply被推向0。

阶段四:零供应无限铸币

* 前置状态: 经过上述操作,池子已被掏空,Total Supply接近0,且wOETH和mETH余额极低。

  • 操作: add_liquidity,参数为 _amounts=[1, 1, 1, 1, 1, 1, 1, 9]。

* 原理:

  • 当prev_supply ≈ 0时,_calc_supply的迭代公式在处理极小数值(1 wei, 9 wei)时失效。
  • 合约错误地计算出了天文数字的LP Token铸造量。

* 结果: 攻击者凭空获得了235,443...个yETH LP Token。

总结

Yearn本次攻击事件暴露了DeFi协议在边缘场景逻辑校验、数值计算精度控制及多漏洞组合风险防控上的多重不足。攻击者以闪电贷为工具、漏洞组合利用为核心、资金混淆为掩护的攻击模式,凸显了当前DeFi攻击的专业化、复杂化趋势。本次攻击的核心教训包括:一是协议需强化对"零金额""极端失衡"等边缘场景的逻辑校验,避免因未短路处理产生状态篡改风险;二是数值计算中需重视极端比例下的精度损失问题,优化_pow_down等关键函数的计算逻辑,此前Balancer协议就曾因精度损失出现安全事件,这已是前车之鉴;三是应建立多维度风险监控体系,对高频单边流动性注入、异常汇率更新等可疑操作进行预警。对于整个DeFi行业而言,本次事件再次证明,协议安全不仅需要单个漏洞的修复,更需从全流程视角防范多漏洞组合利用的攻击,同时加强对攻击者资金流向的追踪与拦截,提升行业整体安全防护能力。

공유하기:

작성자: ExVul Security

이 글은 PANews 입주 칼럼니스트의 관점으로, PANews의 입장을 대표하지 않으며 법적 책임을 지지 않습니다.

글 및 관점은 투자 조언을 구성하지 않습니다

이미지 출처: ExVul Security. 권리 침해가 있을 경우 저자에게 삭제를 요청해 주세요.

PANews 공식 계정을 팔로우하고 함께 상승장과 하락장을 헤쳐나가세요
PANews APP
캘리포니아주는 공무원이 예측 시장 플랫폼의 비공개 정보를 이용해 이익을 취하는 것을 금지하고 있습니다.
PANews 속보