Balancer’ın 128 Milyon Dolarlık Cukkalama Mevzusu
Balancer V2’nin ComposableStablePool sistemindeki ufak bir açık, saldırganın 30 dakikadan kısa sürede tam 128 milyon doları cukkalayıp gitmesine yetti.
Olayın Mutfağında Ne Var?
Sistem, _upscaleArray fonksiyonunda token dengelerini hesaplarken ufak bir işlem hatası yapıyor. Normalde "önemsiz" dediğimiz 8-9 wei’lik bir yuvarlama hatası, Balancer’ın o karmaşık StableSwap invariant formülünde kelebek etkisi yaratıyor.
Saldırgan şunu fark etmiş: Eğer bu hatayı bir kez yaparsan bir şey olmaz, ama 65 kez üst üste (batchSwap ile) tekrarlarsan, havuzdaki token değerini tamamen manipüle edebilirsin.
Vurgun Nasıl Gerçekleşti? (Üç Aşamalı Plan)
Saldırganlar işi şansa bırakmamış, sistemli bir "arbitraj" döngüsü kurmuşlar:
Sınırı Belirle: Önce havuzdaki dengeleri, yuvarlama hatasının en yüksek olduğu o kritik sınıra (8-9 wei) çekmişler.
Hatayı Tetikle: Ardından arka arkaya 65 tane "mikro-swap" patlatarak, sistemin toplam değerini olduğundan çok daha düşük göstermişler (BPT fiyatını yerle bir etmişler).
Parayı Cukkalat: Fiyat dibi gördüğünde, ucuza BPT’leri toplamış ve havuzdaki asıl varlıkları çekip gitmişler.
En Zekice (ve Sinsi) Kısmı: Kontrakt Deployı
Saldırgan, tüm bu operasyonu bir akıllı kontratın "constructor" (kurucu) kısmına gömmüş. Yani kontratı blockchain’e deploy ettiği saniye, işlem zaten bitmiş, paralar "Internal Balance" kısmında çoktan toplanmıştı bile. Sadece ikinci bir işlemle parayı cüzdanlarına aktardılar. İz sürmeyi de, "kendi iç bakiyelerini" kullanarak bir nebze zorlaştırdılar.