[English Long Tweet] Malalim na Pagsusuri sa Balancer V2 Attack: Mekanismo ng Vulnerability, Mga Hakbang ng Pag-atake, at Mga Aral na Natutunan
Chainfeeds Panimula:
Sinadya ng umaatake na itakda ang mga parameter, kabilang ang bilang ng mga pag-ulit at halaga ng input, upang mapalaki ang epekto ng precision loss.
Pinagmulan ng Artikulo:
May-akda ng Artikulo:
BlockSec
Opinyon:
BlockSec: Noong Nobyembre 3, 2025, ang Composable Stable Pool ng Balancer V2, pati na rin ang ilang mga proyekto sa on-chain na nakabase sa Fork nito, ay nakaranas ng isang cross-chain coordinated attack na nagdulot ng kabuuang pagkalugi na higit sa 125 milyong dolyar. Agad na nagbigay ng babala ang BlockSec at pagkatapos ay naglabas ng paunang pagsusuri. Isa itong lubhang kumplikadong pag-atake. Ipinapakita ng aming imbestigasyon na ang pangunahing dahilan ay nagmula sa precision loss sa invariant computation, na ginamit upang mag-trigger ng price manipulation at makaapekto sa presyo ng BPT (Balancer Pool Token). Ginamit ng umaatake ang isang batchSwap operation upang makinabang mula sa isang partikular na stable pool. Ang apektadong bahagi ay ang Composable Stable Pool ng Balancer V2. Ang ganitong uri ng pool ay idinisenyo para sa mga asset na inaasahang mapanatili ang malapit sa 1:1 na exchange ratio, na nagpapahintulot ng malalaking transaksyon na may minimal na slippage at lubos na nagpapabuti sa capital efficiency ng mga magkatulad o magkakaugnay na asset. Bawat pool ay may sariling BPT, na ang presyo ay maaaring ilarawan bilang: Presyo ng BPT = D / totalSupply, kung saan ang D ay ang invariant sa stable math, na kumakatawan sa virtual total value ng pool. Mula sa formula, makikita na kung ang D ay nabawasan sa mathematical level (kahit hindi nabawasan ang totoong pondo), ang presyo ng BPT ay magmumukhang mas mababa. Nagbibigay ang Balancer V2 ng batchSwap() function, na nagpapahintulot ng multi-hop swap sa loob ng Vault, kung saan ang SwapRequest ay may dalawang mode: GIVEN_IN at GIVEN_OUT. Sa GIVEN_OUT mode, tinutukoy ng caller ang inaasahang output amount, at ang pool ang nagkakalkula ng kinakailangang input amount. Sa Stable pool, kapag kinakalkula ang kinakailangang input amount (amountIn), kailangang lutasin ang polynomial equation gamit ang invariant formula, at ang mga kalkulasyong ito ay isinasagawa gamit ang Upscaling at Downscaling. Sa teorya, ang dalawa ay magkasalungat na operasyon, ngunit sa aktwal na implementasyon, may pagkakaiba sa direksyon ng rounding: ang upscaling ay gumagamit lamang ng rounding down (mulDown), habang ang downscaling ay maaaring gumamit ng rounding up o rounding down (divUp/divDown). Ang hindi pagkakaparehong ito ang nagbigay-daan sa pag-atake. Ang ugat ng bug ay nasa BaseGeneralPool._swapGivenOut(), kung saan ang swapRequest.amount ay na-u-upscale gamit ang rounding down. Ang value na na-round down ay ginagamit bilang amountOut para sa input ng _onSwapGivenOut(), na nagreresulta sa final na amountIn na mas mababa kaysa sa totoong kinakailangan, na lumalabag sa karaniwang prinsipyo na ang rounding ay dapat pabor sa protocol. Para sa mga pool tulad ng (wstETH/rETH/cbETH), maaaring makakuha ang umaatake ng mas maraming target asset gamit ang mas kaunting input asset, na nagpapababa sa invariant D at nagpapababa sa presyo ng BPT. Gumamit ang umaatake ng two-stage attack. Sa unang yugto, natapos ang pangunahing attack logic sa isang transaksyon ngunit hindi agad kumita; sa ikalawang yugto, saka lamang kinuha ang kita sa hiwalay na transaksyon. Ang unang yugto ay binubuo ng parameter calculation at batch swap. Halimbawa, sa attack transaction sa Arbitrum chain (TX: 0x7da32e…55773), kinuha muna ng umaatake ang mga parameter ng pool, kabilang ang scaling factors, A (amplification coefficient), BPT exchange rate, swap fee, atbp., pagkatapos ay kinalkula ang trickAmt at gumamit ng auxiliary contract para sa simulation. Pinagsama ng umaatake ang offline calculation at on-chain simulation upang eksaktong ma-tune ang mga parameter ng susunod na swap, kabilang ang bilang ng iterations at bawat input/output value. Sa bawat iteration, may tatlong hakbang na swap: una, itinutulak ang target token amount sa trickAmt + 1; pangalawa, patuloy na nagsa-swap ng target token, dito na-trigger ang rounding down ng _upscale(); pangatlo, reverse swap, kung saan ang pool balance ay niro-round down sa pamamagitan ng pagtanggal ng huling dalawang decimal bago i-swap pabalik (hal. 324,816 → 320,000). Sa ilang kaso, dahil ang StableSwap math ay gumagamit ng Newton–Raphson method, maaaring mabigo ito, kaya naghanda ang umaatake ng dalawang fallback, gamit ang 9/10 ng original value para subukang muli. Pagkatapos ng pag-atake, dahil hindi mapahinto ang ilang mekanismo ng Balancer, lumaki ang epekto ng pag-atake, na sinundan ng mga copycat attacks sa iba’t ibang chain, na nagdulot ng kabuuang pagkalugi na higit sa 125 milyong dolyar. Ipinakita ng insidenteng ito ang apat na pangunahing isyu ng decentralized protocols: hindi pantay na rounding mechanism, patuloy na umuunlad na attack methods, kawalan ng pause function na nagpapalaki ng losses, at kakulangan ng real-time monitoring sa initialization at operations status. Ang upscaling ay pinapayagan lamang ang rounding down, habang ang downscaling ay pinapayagan ang parehong rounding up at down; ang asymmetry na ito, kapag ginamit sa extreme parameters, ay nagdudulot ng precision loss na maaaring pagsamantalahan. Ang rounding direction na dapat laging pabor sa protocol ay sa kasong ito ay naging sanhi ng pagkalugi ng protocol. Gumamit ang umaatake ng two-stage approach: unang yugto para sa attack execution na walang kita sa ledger, at ikalawang yugto para sa hiwalay na withdrawal, upang iwasan ang on-chain monitoring models. Bawat hakbang ng pag-atake ay pinagsama ang off-chain at on-chain simulation, at ginamit pa ng auxiliary contract ang StableMath implementation ng Balancer, pati error messages ay pareho. Pagkatapos ng pag-atake, sumunod ang iba’t ibang chain at maraming Fork projects ang naapektuhan, na nagpapakita na basta’t pareho ang stable math at rounding logic, maaaring kumalat ang bug sa buong ecosystem. Ipinapakita ng insidente na kailangan ng DeFi protocols ng mas mataas na precision sa mathematical computation, mas mahigpit na rounding verification at anti-suspicious path simulation mechanism, at kakayahang mag-pause sa panahon ng abnormal na sitwasyon. 【Ang orihinal na teksto ay nasa Ingles】
Disclaimer: Ang nilalaman ng artikulong ito ay sumasalamin lamang sa opinyon ng author at hindi kumakatawan sa platform sa anumang kapasidad. Ang artikulong ito ay hindi nilayon na magsilbi bilang isang sanggunian para sa paggawa ng mga desisyon sa investment.
Baka magustuhan mo rin
Paano mababago ng $100M Bitcoin-backed loan na ito ang corporate treasury playbook
Tumaas ng 80% ang privacy coins: Bakit muling napapansin ang Zcash at Dash
Maaaring tumaas ng 70% ang presyo ng TRUMP memecoin bago matapos ang 2025
