K线
数据链上
VIP
市值
API
排行
CoinOSNew
CoinClaw🦞
语言
  • 简体中文
  • 繁体中文
  • English
全球行情数据应用领跑者,致力于更高效地提供有价值的信息。

功能

  • 实时行情
  • 特色功能
  • AI网格

服务

  • 资讯内容
  • 开放数据(API)
  • 机构服务

软件下载

  • PC版
  • Android版
  • iOS版

联系我们

  • 聊天室
  • 商务邮箱
  • 官方邮箱
  • 官方验证通道

加入社区

  • Telegram
  • Twitter
  • Discord

© Copyright 2013-2026. All rights reserved.

简体繁體English
|旧版

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

CN
律动BlockBeats
关注
5个月前
AI 总结,5秒速览全文
原文标题:《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 做代币兑换。


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

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 观点。

免责声明:本文章仅代表作者个人观点,不代表本平台的立场和观点。本文章仅供信息分享,不构成对任何人的任何投资建议。用户与作者之间的任何争议,与本平台无关。如网页中刊载的文章或图片涉及侵权,请提供相关的权利证明和身份证明发送邮件到support@aicoin.com,本平台相关工作人员将会进行核查。

返20%!Boost新规,参与平分+交易量多赚
广告
|
|
APP下载
Windows
Mac
分享至:

X

Telegram

Facebook

Reddit

复制链接

|
|
APP下载
Windows
Mac
分享至:

X

Telegram

Facebook

Reddit

复制链接

律动BlockBeats的精选文章

43分钟前
近3亿美元瞄准美国中期选举,Tether高管掌舵加密行业第二大政治基金
1小时前
如何用AI在Polymarket上赚钱?
1小时前
3句hello就限额,你的Claude Code额度去哪了?一个横跨28天的缓存Bug,和一份让你「省着点用」的官方回应
查看更多

目录

|
|
APP下载
Windows
Mac
分享至:

X

Telegram

Facebook

Reddit

复制链接

相关文章

avatar
avatarTechub News
10分钟前
交易所 BTC 余额创新低,为下一个周期蓄力?
avatar
avatarTechub News
35分钟前
1.75 万亿美元,SpaceX 要做人类史上最贵的 IPO
avatar
avatar律动BlockBeats
43分钟前
近3亿美元瞄准美国中期选举,Tether高管掌舵加密行业第二大政治基金
avatar
avatar律动BlockBeats
1小时前
如何用AI在Polymarket上赚钱?
avatar
avatarOdaily星球日报
1小时前
再增预言机,Polymarket野心暴露
APP下载
Windows
Mac

X

Telegram

Facebook

Reddit

复制链接