首页 币种行情 交易所 专题 快讯 文章 回答 专栏 百科
  • 下载软件
  • 技术分析Balancer被盗1.2亿美元,漏洞出在哪?

    来源: 91币圈网 发布时间: 2025-11-04 11:56:59

    前言

    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:

    资产转移 Tx:

    技术分析

    攻击入口

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

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

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

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

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

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

    攻击模式分析

    BPT Price 的计算机制

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

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

    在池的交换计算中:

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

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

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

    精度损失的根源

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

    缩放操作:

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

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

    攻击流程详解

    阶段 1:调整到舍入边界

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

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

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

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

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

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

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

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

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

    Callback 机制的缺失

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

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

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

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

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

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

    关键问题:

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

    总结

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

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

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

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

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

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

    更多资讯
    更多+
    matic币怎么买
    想买matic,到了2026年更准确的做法是搜索polygo
    专栏 2026-10-03
    恒星币有什么用处
    恒星币(xlm)的核心用处,是作为stellar网络的原生资
    专栏 2026-10-03
    柚子币现在还能买吗
    柚子币仍然可以买,但截至2026年9月21日,市场上真正对应
    专栏 2026-10-04
    比特币三根线怎么看
    比特币图上的三根线不能只看交叉,真正有用的读法是先辨认指标和
    专栏 2026-10-04
    比特币期货交割时间是几点
    比特币期货没有统一的交割时刻,具体要看交易所、合约类型以及采
    专栏 2026-10-03
    国际资讯
    更多+
    热门币种
    更多+
    -0.69%
    -9.53%
    -1.51%
    +7.8%
    -9.01%
    +3.23%
    +6.92%
    +9.68%
    +9.18%
    +5.3%
    -7.7%
    财经播报
    更多+
    文章排行
    更多+
    1
    100倍杠杆手续费不是按本金直接收取,而是按照名义仓位计算。
    100倍杠杆手续费怎么算
    2
    想买matic,到了2026年更准确的做法是搜索polygo
    matic币怎么买
    3
    恒星币(xlm)的核心用处,是作为stellar网络的原生资
    恒星币有什么用处
    4
    柚子币仍然可以买,但截至2026年9月21日,市场上真正对应
    柚子币现在还能买吗
    5
    单看普通投资者的交易便利、市场深度和支付定位,bch币通常更
    bsv币和bch币谁更好
    6
    比特币期货没有统一的交割时刻,具体要看交易所、合约类型以及采
    比特币期货交割时间是几点