由于微信限制了第三方应用的跳转,请使用以下方法。
1. 点击右上角的
2. 选择在浏览器中打开
文章转载来源: BlockSec
11月3号,Balancer V2协议及其fork项目在多条链上遭受攻击,导致超过$120M的严重损失。BlockSec在第一时间预警[1],并给出初步分析结论[2]。这是一起高度复杂的攻击事件。我们的初步分析表明,根本原因在于攻击者操纵了不变量(invariant),从而扭曲了 BPT(Balancer Pool Token ) -- 也就是Balancer Pool的LP token -- 价格的计算,使其能够通过一次 batchSwap 操作在某个稳定池(stable pool)中获利。
为统一不同代币的小数位,Balancer 合约会:
结论:同一笔交易内,不同环节采用的取整方向不对称,在极小步反复执行时,会产生系统性微小偏差。
遭受本次攻击影响的是Balancer V2协议的Composable Stable Pool[3]以及fork的协议。Stable Pool 用于那些预期可以保持接近 1:1 兑换比例(或在已知汇率下进行兑换的资产),允许在不产生显著价格冲击的情况下进行大额兑换,从而大幅提升相似资产或相关资产之间的资金利用效率。

从上述公式可以看出若能让D在账面上变小(哪怕资金实际未流失),就能让BPT 价格更便宜。BTP 代表的是Pool的份额,用于计算撤出流动性的时候能获得多少Pool中Reserve,因此如果攻击者能获得更多的BPT,最后在撤出流动性的时候就能获利。
以 Arbitrum 上的一笔攻击交易为例,batchSwap 操作可分为三个阶段:
第一阶段: 攻击者将 BPT 兑换为底层资产,以精确地调整其中一种代币(cbETH)的余额至四舍五入边界的临界点(数量 = 9)。这一步为下一阶段的精度损失(precision loss)创造了条件。
第二阶段:攻击者使用精心构造的数量(= 8),在另一种底层资产(wstETH)与 cbETH 之间进行交换。由于在缩放代币数量时进行了向下取整(rounding down),计算得到的 Δx 略小(从 8.918 变为 8),从而导致 Δy 被低估,并使不变量 D(来源于 Curve 的 StableSwap 模型)变小。由于 BPT 价格 = D / totalSupply,BPT 价格被人为压低。

第三阶段: 攻击者将底层资产反向兑换回 BPT,在恢复池内平衡的同时,利用被压低的 BPT 价格获利 -- 获得更多的BPT Token.
最后,攻击者利用另外一个获利交易进行流动性撤回,从而利用多获得的BPT获得 Pool中其他底层资产 (cbETH和wstETH)从而获利
攻击交易:
https://app.blocksec.com/explorer/tx/arbitrum/0x7da32ebc615d0f29a24cacf9d18254bea3a2c730084c690ee40238b1d8b55773
获利交易:
https://app.blocksec.com/explorer/tx/arbitrum/0x4e5be713d986bcf4afb2ba7362525622acf9c95310bd77cd5911e7ef12d871a9
Reference:
[1]https://x.com/Phalcon_xyz/status/1985262010347696312
[2]https://x.com/Phalcon_xyz/status/1985302779263643915
[3]https://docs-v2.balancer.fi/concepts/pools/composable-stable.html
来源:BlockSec
发布人:暖色
声明:该文观点仅代表作者本人,不代表火讯财经立场。火讯财经系信息发布平台,仅提供信息存储空间服务。
如文章涉及侵权, 请及时致函告之,本站将第⼀时间删除⽂章。邮箱:840034348@qq.com