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
内容來源:PANews
財華網所刊載內容之知識產權為財華網及相關權利人專屬所有或持有。未經許可,禁止進行轉載、摘編、複製及建立鏡像等任何使用。
如有意願轉載,請發郵件至content@finet.com.hk,獲得書面確認及授權後,方可轉載。
下載財華財經APP,把握投資先機
https://www.finet.com.cn/app
更多精彩内容,請點擊:
財華網(https://www.finet.hk/)
財華智庫網(https://www.finet.com.cn)
現代電視FINTV(https://www.fintv.hk)