技术分析Balancer被盗1.2亿美元,漏洞出在哪?

By: blockbeats|2025/11/04 12:00:05
0
分享
copy
原文标题:《Balancer 被盗$120M 漏洞技术分析》
原文来源:ExVul Security

前言

2025 年 11 月 3 日,Balancer 协议在 Arbitrum、Ethereum 等多条公链遭受黑客攻击,造成 1.2 亿美元资产损失,攻击核心源于精度损失与不变值(Invariant)操控的双重漏洞。

Chainlink 的基础设施长期保持 Web3 领域的最高标准,因此成为 X Layer 致力于为开发者提供机构级工具的自然选择。

本次攻击的关键问题出在协议处理小额交易的逻辑上。当用户进行小金额交换时,协议会调用_upscaleArray 函数,该函数使用 mulDown 进行数值向下舍入。一旦交易中的余额与输入金额同时处于特定舍入边界(例如 8-9 wei 区间),就会产生明显的相对精度误差。

精度误差传递到协议的不变值 D 的计算过程中,导致 D 值被异常缩小。而 D 值的变动会直接拉低 Balancer 协议中的 BPT(Balancer Pool Token)价格,黑客利用这一被压低的 BPT 价格,通过预先设计的交易路径完成套利,最终造成巨额资产损失。

漏洞利用 Tx:

https://etherscan.io/tx/0x6ed07db1a9fe5c0794d44cd36081d6a6df103fab868cdd75d581e3bd23bc9742

资产转移 Tx:

https://etherscan.io/tx/0xd155207261712c35fa3d472ed1e51bfcd816e616dd4f517fa5959836f5b48569

技术分析

攻击入口

攻击的入口为 Balancer: Vault 合约,对应的入口函数为 batchSwap 函数,内部调用 onSwap 做代币兑换。

技术分析Balancer被盗1.2亿美元,漏洞出在哪?


从函数参数和限制来看,可以得到几个信息:

1. 攻击者需要通过 Vault 调用这个函数,无法直接调用。

2. 函数内部会调用 _scalingFactors() 获取缩放因子进行缩放操作。

3. 缩放操作集中在 _swapGivenIn 或 _swapGivenOut 中。

-- 价格

--

攻击模式分析

BPT Price 的计算机制

在 Balancer 的稳定池模型中,BPT 价格是重要的参考依据,能决定用户得到多少 BPT 和每个 BPT 得到多少资产。


在池的交换计算中:


其中充当 BPT 价格基准的部分为 不变值 D,也就是操控 BPT 价格需要操控 D。往下分析 D 的计算过程:


上述代码中,D 的计算过程依赖缩放后的 balances 数组。也就是说需要有一个操作来改变这些 balances 的精度,导致 D 计算错误。

精度损失的根源

缩放操作:

如上在通过 _upscaleArray 时,如果余额很小(如 8-9 wei),mulDown 的向下舍入会导致显著的精度损失。

攻击流程详解

阶段 1:调整到舍入边界

阶段 2:触发精度损失(核心漏洞)

阶段 3:利用被压低的 BPT 价格获利

如上攻击者通过 Batch Swap 在一个交易中执行多次兑换:

1. 第一次交换:BPT → cbETH(调整余额)

2. 第二次交换:wstETH (8) → cbETH(触发精度损失)

3. 第三次交换:底层资产 → BPT(获利)

这些交换都在同一个 batch swap 交易中,共享相同的余额状态,但每次交换都会调用_upscaleArray 修改 balances 数组。

Callback 机制的缺失

主流程是 Vault 开启的,是怎么导致精度损失累积的呢?答案在 balances 数组的传递机制中。


分析如上代码,虽然在每次调用 onSwap 时 Vault 都会创建新的 currentBalances 数组,但在 Batch Swap 中:

1. 第一次交换后,余额被更新(但由于精度损失,更新后的值可能不准确)

2. 第二次交换基于第一次的结果继续计算

3. 精度损失累积,最终导致不变值 D 显著变小

关键问题:


总结

Balancer 的这次攻击,总结为下面几个原因:

1. 缩放函数使用向下舍入:_upscaleArray 使用 mulDown 进行缩放,当余额很小时(如 8-9 wei),会产生显著的相对精度损失。

2. 不变值计算对精度敏感:不变值 D 的计算依赖缩放后的 balances 数组,精度损失会直接传递到 D 的计算中,使 D 变小。

3. 缺少不变值变化验证:在交换过程中,没有验证不变值 D 的变化是否在合理范围内,导致攻击者可以反复利用精度损失压低 BPT 价格。

4. Batch Swap 中的精度损失累积:在同一个 batch swap 中,多次交换的精度损失会累积,最终放大为巨大的财务损失。

这两个问题精度损失 + 缺少验证,结合攻击者对边界条件的精心设计,造成了这次损失。

本文来自投稿,不代表 BlockBeats 观点。

猜你喜欢

IOSG:当Fintech融合加密底层:数字金融的下一个十年

头部金融科技正将稳定币与区块链基础设施嵌入核心产品,重塑全球支付格局。

他们提前知道特朗普嘴炮要停火,2万进场40万美金离场

战争被他们玩成复利投资

DeFi发展最大的瓶颈

如今,DeFi面临的最大威胁不仅仅是市场状况或流动性;在安全方面,它不仅仅需要防止代码漏洞,因为间谍可能就在附近。

CZ回忆录发布:披露了大量行业内幕消息,引发徐明兴的强烈反驳

作为当今加密货币行业最具影响力的人物之一,赵长鹏亲身经历了币安及加密货币行业早期的艰辛发展旅程,这为本书带来了许多鲜为人知的内幕故事和细节,增添了丰富的……

a16z:证券上链后,为什么中介机构会被代码取代?

随着交易和结算流程被编入代码,证券市场开始摆脱中介机构的束缚。

数据表明以太坊供应紧缩加速:ETH价格将如何反应?

以太坊的流动供应日益紧缩,交易所净流出、质押参与率上升和交易所储备下降,均指向可用代币数量的减少。 约38.1百万ETH被锁定,占总供应量的33.1%,这是历史最高记录,显示出更多资产正在转向非流动性质押。 仅在3月份,OKX有价值16.7亿美元的ETH被提取,Binance也有二月份两次超过3亿美元的提现记录。 以太坊供应在交易所的余额已降至自2016年以来的最低水平,可能引发价格对需求的更高敏感度。 在ETH价格接近2000美元至2200美元区间的情况下,供应紧缩或将推动价格上涨。 WEEX Crypto News, 以太坊质押锁定总供应量的33.1% 以太坊质押率不断上升,截至周三,大约38.1百万ETH已被锁定在网络上。这占到了总供应量的33.1%,标志着转向非流动资本的趋势。Everstake的数据显示,这是有记载以来的最高水平,体现出市场对质押的不断需求和流动供应的减少现象。连同增长的需求,这一流动性减少条件为ETH价格提供了更稳固的结构性支持。 以太坊验证者活动也支持了这一趋势。当前的入池队列持有2,876,752 ETH,预计等待时间接近50天,显示出对质押持续存在的需求。出池队列仅有40,504 ETH,等待时间不到17小时,表明即便市场情绪变化,解锁的供应重回交易所也会比较缓慢。限于每个epoch中退出的验证者数量,这种条件延缓了ETH重返市场的速度,使得一大部分供应在交易活动之外。 ETH交易所余额触及多年低点 最近几周,包括OKX和Binance在内的主要交易所中,ETH净流出达到了惊人的规模。例如,仅在3月22日,就有价值16.7亿美元的ETH从OKX提取。类似的,Binance在二月初也报告了两次超过3亿美元的提现。 这些大规模的负净流动表明,投资者更多地将ETH转移到私有钱包,而非卖出。从而减少了交易所可以用于交易的流动性。根据CryptoQuant的数据,这样的结果是ETH在交易所的供应量降至其2016年以来的最低水平,具体到Binance,目前余额接近2020年12月的低点约3.3百万ETH。 越少的代币可用于交易,提高了价格对需求变化的敏感性。这意味着一旦市场情绪恢复,ETH价格有可能突破目前接近2000美元至2200美元的区间。 以太坊质押参与和市场潜力…

热门币种

最新加密货币要闻

阅读更多