Balancer 警告用户旧版 v1 合约中的错误可能会给 LP 资金带来风险
核心要点
- 攻击者利用 Balancer 未维护的 2020 时代智能合约中的舍入缺陷,使用闪电贷和单个聪从流动性池中抽走约 234,000 美元。
- 该漏洞于 8 月 31 日针对 Balancer 的旧版 V1 矿池合约进行攻击,是当不可变代码满足零维护时会发生什么情况的教科书示例。
- 攻击者利用闪电贷操纵 V1 BPool,使其 Wrapped Bitcoin (WBTC) 储备接近于零。
- 通过首先通过闪贷操作耗尽 WBTC 储备,攻击者创造了条件,使舍入数学对他们有利。

攻击者利用 Balancer 未维护的 2020 时代智能合约中的舍入缺陷,使用闪电贷和单个聪从流动性池中抽走约 234,000 美元。
六年前的智能合约代码中隐藏的舍入误差仅使 Balancer 流动性提供商损失了约 234,000 美元。该漏洞于 8 月 31 日针对 Balancer 的旧版 V1 矿池合约进行攻击,是当不可变代码满足零维护时会发生什么情况的教科书示例。
攻击者利用闪电贷操纵 V1 BPool,使其 Wrapped Bitcoin (WBTC) 储备接近于零。从那时起,该池的 18 位十进制定点数学中的一个缺陷使他们能够仅输入 1 聪(比特币的最小单位)就铸造 4,408.8 个 Balancer 池代币(BPT)。
该漏洞是如何发挥作用的
安全公司 SlowMist 打破了这一机制。该漏洞存在于两个特定函数中:joinswapPoolAmountOut 和 calcSingleInGivenPoolOut。当有人想要通过存入单一资产加入流动性池时,这些函数会处理数学问题。
核心问题是缺乏最低投入要求。该合约没有检查存入的代币数量相对于铸造的代币池是否合理。通过首先通过闪贷操作耗尽 WBTC 储备,攻击者创造了条件,使舍入数学对他们有利。
攻击者的钱包地址为 0x338c7ec9befbb451d66fd8a468c32184f5689a41,目标 BPool 合约位于 0x2257aaac34bcb27900291f7b84ee2565a6cbac57。
DeFi 中的幽灵船问题
Balancer V1 于 2020 年初推出,使其成为 DeFi 领域先驱的自动化做市商之一。此后,该协议已转向 V2 和 V3,开发资源完全分配给这些较新的版本。 V1 合约之所以保留,是因为它们是不可变的。没有人可以更新它们、修补它们或关闭它们。
Balancer 的 V3 合约包含明确的舍入控制,旨在防止此类漏洞的发生。回想起来,修复似乎很简单。在执行连接操作之前,强制执行最小输入量并验证池余额未被操纵。但从设计上来说,将这些保护措施改装到 V1 中是不可能的。
对分叉协议的更广泛影响
慢雾标记了一个细节,该细节将爆炸半径远远超出了平衡器本身。 V1 中使用的加入和退出数学已在众多分叉协议中复制。任何复制 Balancer 池逻辑而不解决舍入漏洞的项目都可能处于同一个滴答作响的时钟上。
基于分叉 AMM 代码构建的项目明智的做法是针对此特定漏洞审核其加入和退出函数。仍在向任何 V1 时代的 Balancer 池提供流动性的 LP 可能应该将提款按钮视为紧急出口,因为这正是它的本质。
