开发者的一行注释如何演变成 1.28 亿美元的灾难:Balancer 舍入漏洞深度解析
埋藏在 Balancer 的智能合约代码中,就在那个最终导致 1.28 亿美元损失的函数上方,写着一行开发者注释:“此舍入的影响预计极小。” 他们错了 —— 错出了九位数。
2025 年 11 月 3 日,一名攻击者利用了 Balancer V2 的 Composable Stable Pools(可组合稳定池)中一个微小的舍入错误,在不到 30 分钟的时间内掏空了九个区块链网络中的资金。这不是一次华丽的重入攻击(reentrancy attack),也不是私钥泄露。这仅仅是算术问题 —— 这种漏洞潜伏在众目睽睽之下,通过了多次审计,并耐心地等待着足够聪明的人将其武器化。
舍入漏洞剖析
存在漏洞的函数
Balancer V2 的 batchSwap 功能允许用户在单笔交易中执行多个代币交换。在底层,一个名为 _upscaleArray 的内部函数在计算前将代币余额标准化为统一的精度。该函数使用“缩放因子(scaling factors)” —— 即考虑每个代币的小数位数和内部汇率的乘数。
问题出在哪里?当缩放因子为非整数值时(只要涉及代币汇率就会发生这种情况),Solidity 的整数算术会向下舍入。在大多数场景下,精度损失仅为几个 wei —— 几分之一美分。但在持有流动质押衍生品等高度相关资产的 Composable Stable Pools 中,即使是微小的舍入错误也会通过其 StableSwap 不变量(invariant)计算被放大。
三阶段攻击路线
攻击者的策略因其简洁而显得优雅:
-
推向边界。 将大量的 BPT(Balancer 池代币)兑换为底层代币,将其中一种代币的内部余额压低至 8–9 wei 的临界范围 —— 这正是 Solidity 整数除法产生最大精度损失的精确阈值。
-
复合误差。 围绕处于边界位置的代币执行快速的微量交换(micro-swaps)。每次交换都会触发
_upscaleArray,该函数在 EXACT_OUT 操作期间会向下舍入。这种舍入导致池子的不变量D被系统性地低估,从而人为地抑制了 BPT 的价格。 -
提取差价。 以被抑制的价格铸造或购买 BPT,然后立即按全额价值赎回底层资产。如此循环。
攻击者部署了智能合约,其构 造函数执行了 65 次以上的微量交换,将精度损失复合成了灾难性的不变量操纵。每一次单独的舍入错误都是微不足道的,但它们集合在一起,抽干了资金池。
30 分钟内横扫九条链,损失 1.28 亿美元
漏洞同时袭击了 Ethereum、Base、Arbitrum、Avalanche、Optimism、Gnosis、Polygon、Berachain 和 Sonic。Ethereum 的损失最为惨重,约为 9900 万美元,而其他较小的链各损失了 100 万至 1200 万美元不等。
Hypernative 的自动监控系统在几分钟内就发现了攻击,但那时损害已经在各个网络中级联爆发。这种多链漏洞 —— 每个网络上都部署了相同的漏洞代码 —— 将原本可能只是单链的事件演变成了全 DeFi 行业的危机。
链级应急响应
各个网络的反应迥异,揭示了去中心化理念的不同维度:
-
Berachain 停止了整个网络并执行了紧急硬分叉,回滚了攻击以追回 1280 万美元的用户存款。这一决定充满争议 —— 该链刚上线几个月,必须在用户保护和不可篡改性之间做出选择。
-
Gnosis Chain 最初采取了更稳健的做法,限制桥接活动以防止跨链资金转移。Monerium 冻结了受影响保险库中的 130 万 EURe。随后在 12 月 22 日,Gnosis 执行了硬分叉以追回 940 万美元 —— 重写了链状态,强制将资金从攻击者的钱包转移到 DAO 控制的恢复地址。
-
StakeWise DAO 利用 Balancer 的避风港框架(Safe Harbor framework,BIP-726,建立于 2024 年)合法授权了白帽恢复行动,追回了约 1900 万美元的 osETH 和 170 万美元的 osGNO。
总计约 4300 万美元被追回或冻结 —— 约占总损失的三分之一。
审计悖论
也许 Balancer 漏洞最令人不安的方面在于,它通过了多次专业的安全审计。
Trail of Bits 审计过 Balancer V2 的代码,实际上也指出了与舍入相关的担忧。在他们 2021 年对 Linear Pools 的审查中,他们标记了舍入行为,但无法明确判定其是否可被利用。他们建议进行全面的模糊测试(fuzz testing),以验证“所有算术运算的舍入方向是否符合预期”。
当 Trail of Bits 后来在 2022 年 9 月审查 Composable Stable Pools 时,Stable Math 库 —— 即包含该漏洞的确切代码 —— 被明确排除在审计范围之外。
行业的威胁格局已经发生了转变。在 2021 年,舍入和算术问题不被视为重大的风险类别。到 2025 年,舍入错误已成为 DeFi 中第二大被利用的漏洞,仅次于私钥被盗。审计标准未能跟上步伐。
Later Certora 在为 Balancer V3 进行形式化验证(formal verification)时承认,他们对 V2 的验证属性“没有约束单个交换或舍入行为之间的关系”。这些属性在高层级上保证了偿付能力,但忽略了迭代操作可能通过舍入偏差系统性累积价值的场景。