Balancer 被盗 $120M 漏洞技术分析

This article is not available in the current language yet. Showing the original version.
2025 年 11 月 3 日,Balancer 协议在 Arbitrum、Ethereum 等多条公链遭受黑客攻击,造成 1.2 亿美元资产损失,攻击核心源于精度损失与不变值(Invariant)操控的双重漏洞。本次攻击的关键问题出在协议处理小额交易的逻辑上。

前言

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

本次攻击的关键问题出在协议处理小额交易的逻辑上。当用户进行小金额交换时,协议会调用_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做代币兑换。

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

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

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

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

攻击模式分析

BPT Price 的计算机制

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

其中 D = 不变值(Invariant),来自 Curve 的 StableSwap 模型

在池的交换计算中:

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

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

精度损失的根源:

缩放操作:

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

攻击流程详解

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

Callback 机制的缺失

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

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

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

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

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

关键问题:

虽然 Vault 每次传入新数组,但:

1. 如果余额很小(8-9 wei),缩放时精度损失大

2. 在 Batch Swap 中,后续交换基于已损失精度的余额继续计算

3. 没有验证不变值 D 的变化是否在合理范围内

总结

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

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

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

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

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

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

Share to:

Author: ExVul Security

Opinions belong to the column author and do not represent PANews.

This content is not investment advice.

Image source: ExVul Security. If there is any infringement, please contact the author for removal.

Follow PANews official accounts, navigate bull and bear markets together
PANews APP
Reports indicate that one crew member of the US fighter jet shot down over Iran has been rescued.
PANews Newsflash