Aave CoW Protokolü Olayında 50M USDT, 35K AAVE'ye Değiştirildi

iconOdaily
Paylaş
Share IconShare IconShare IconShare IconShare IconShare IconCopy
AI summary iconÖzet

expand icon
12 Mart 2026 tarihinde bir kullanıcı, 50,4 milyon USDT'yi sadece 35.900 AAVE'ye değiştirdikten sonra Aave CoW protokolüne ilişkin bir güncelleme açıklandı. Bu işlem, hatalı bir rota yolu nedeniyle düşük likiditeli bir SushiSwap havuzunu tüketti. Zincir üstü haberlere göre CoW protokolünün rota mantığı ve Aave'nin ön yüzü, bu işlemi engelleyemedi. Ekonomik akıllılık kontrolleri işlemi durdurmadı.

Bu yazı: @Ehsan1579'dan

Derleme|Odaily Yıldız Günlüğü (@OdailyChina); Çevirmen| Ethan (@ethanzhang_web3

Olay başlığına yalnızca bakıldığında, bu bir açıklarından yararlanma saldırısı olduğu sanılabilir.

Olayın özü: 50,4 milyon dolarlık USDT, nihayetinde sadece 35.900 dolarlık AAVE'ye çevrildi.

Bu olayı ilk duyduğumda gerçekten şok oldum. Bu yüzden olayın tamamını inceledim: işlem izleme, çözücü yolları, sözleşme çağrıları, geçmiş rezervler, settlement verileri, adaptör süreçleri, Aave arayüz kodu, CoW hızlı kredi SDK'sı ve tekliflerin “akıllı” olup olmadığının belirlenmesi için kullanılan rota kodu.

Bu bir haker saldırısı değil. Aave çekirdek protokolünde hata yok. CoW setlemesi hatalı değil. Uniswap hatalı değil. SushiSwap hatalı değil. İşlemler geçerli, imzalar geçerli ve tüm sözleşmeler koduna tamamen sadık kalındı. Ancak, ekonomik değerin neredeyse tamamı, çünkü izin verilen rota son derece absürt olduğu için yok edildi.

Köprü sorunlu, blockchain sorunlu değil.

Benim görüşüme göre, bu olayı sadece bir “kullanıcı hatası” olarak hafife almak nesnel ve titiz bir tutum değildir. Kullanıcının emri imzalamış olmasına rağmen, yazılım sistemi tamamen 50 milyon dolarlık teminat döngüsünü, teklif verme, imzalama, rota planlama ve nihai yürütme süreçlerini, sadece yaklaşık 331 AAVE tutarında düşük likiditeye sahip bir havuza yönlendirecek şekilde izin verdi. Bu tamamen gerçekleşmesi mümkün olmayan bir durumdu ve en azından sonuçlandırma aşamasından önce sistem tarafından kesinlikle engellenmesi gerekirdi.

İşlem temel bilgilerinin kökeni

Bu anomali işlem hash'i: 0x9fa9feab3c1989a33424728c23e6de07a40a26a98ff7ff5139f3492ce430801f, 12 Mart 2026 tarihinde Ethereum ana ağı blok yüksekliği 24643151'de onaylandı, işlem indeksi 1, tüketilen Gas miktarı 3780570 birim, işlem başarıyla yürütüldü. Sipariş ait cüzdan adresi 0x98b9 ile başlıyor, gerçek işlemi gerçekleştiren çözücü (işlem gönderen) adresi ise 0x3980 ile başlıyor ve CoW yarışma verilerinde tsolver olarak işaretlendi.

Öncelikle bunun basit bir cüzdan düzeyinde USDT'den AAVE'ye değişim olmadığı anlaşılması gerekir. Satılan token, Aave platformunda faiz kazandıran USDT depo belgesi olan aEthUSDT'dir. Alınan token ise Aave platformunda faiz kazandıran AAVE depo belgesi olan aEthAAVE'dir. Bu nedenle, bu aslında CoW protokolüne ait settlement sistemi ve flash loan adaptörü süreci aracılığıyla yapılan bir Aave teminat döngüsüdür.

İşlem öncesi cüzdan, yaklaşık 50.432.693,075254 aEthUSDT ve 0 aEthAAVE tutuyordu. İşlem sonrası, cüzdan sadece 4,980399 aEthUSDT kaldı ve 327,241335505966487788 aEthAAVE aldı. Aslında, cüzdan neredeyse tüm pozisyonunu sattı.

Meta veriler, rotanın yürütülmeden önce zaten "zehirli" olduğunu daha net bir şekilde göstermektedir. Sipariş, aave-v3-interface-collateral-swap sürecinden gelmektedir. CoW'un API'si bunu imzalı bir satış siparişi olarak gösterirken, uygulama meta verisi 121 baz noktalık akıllı kayma ile piyasa fiyatı teminat takasını kullandığını işaretlemektedir. İmzalı satış miktarı 50.432.688,41618 aEthUSDT'tir. İmzalı minimum alım miktarı 324,949260918413591035 aEthAAVE'dir. Gerçekleşen ödeme 327,241335505966487788 aEthAAVE olarak yapılmıştır.

Bu son derece önemli bir detaydır. Bu sipariş, binlerce AAVE elde etmek amacıyla oluşturulmamıştı ve ardından neden bilinmeyen bir nedenle yok edildi. Orijinal olarak, üçyüzün üzerinde AAVE gibi bir sonuç etrafında tasarlanmıştı.

Yolun tam zinciri çöktü

Bir işlem izleyicisini takip ettiğinizde, süreç tamamen sert ve doğrudan olur.

Üst seviye sermaye akışları, CoW protokolüne dayalı 0x9008 ile başlayan GPv2Settlement hesaplaşma sözleşmesi tarafından desteklenir. İlk olarak, 0x60bf ile başlayan HooksTrampoline sözleşmesi, aEthUSDT yetkilendirme işlemini tamamlar ve CoW kasanın ara sunucusunun kullanıcı varlıklarını ayrı ayrı yetkilendirme gerektirmeden çekmesine izin verir; ardından, 0xc92e ile başlayan GPv2VaultRelayer sözleşmesi, 50432688.41618 aEthUSDT'yi kullanıcı cüzdanından çekerek hesaplaşma sürecine dahil eder; bu aşamaya kadar tüm işlemler normal mantık çerçevesindedir.

Sonrasında hesaplaşma kontratı, 0xd524 ile başlayan kaynak kodu açık olmayan yardımcı kontrata aEthUSDT işlem yetkisini verir ve 0x494b3137 işlev seçicisi aracılığıyla çağırır; bu yardımcı kontrat, yetkiyi 0x699c ile başlayan kaynak kodu açık olmayan yürütücü kontrata devreder; böylece anormal işlem rota tamamen ortaya çıkar.

İlk geçerli çağrı, 0x87870 ile başlayan Aave fon havuzuna yönelik olup, withdraw fonksiyonu (seçici 0x69328dec) aracılığıyla aEthUSDT yok edilir ve temel yerel USDT tahsis edilir; ardından işlem, 0x4e68 ile başlayan Uniswap V3 derinlikli USDT/WETH işlem havuzuna yönlendirilir ve tüm 50432688.41618 USDT, 17957.810805702142342238 WETH'e dönüştürülür.

Bu aşamadaki işlem tamamen normaldi: Döviz kuru yaklaşık olarak 1 WETH başına 2808,4 USDT olup, o dönemdeki piyasa koşullarıyla uyumluydu, likidite yetersizliği yoktu, hesaplama hataları da mevcut değildi, ilk işlem zinciri herhangi bir anomali içermiyordu.

Sorun ikinci sıçramada, likidite rezervini gördüğünüzde kalan hikâye kaçınılmaz olur.

Executör, 17957.810805702142342238 WETH alındıktan sonra tüm fonları 0xd75ea151a61d06868e31f8988d28dfe5e9df57b4 adresine SushiSwap V2 AAVE/WETH havuzuna aktarır.

Sıvılık rezerv verilerini, anormal işlem öncesi anında (blok yüksekliği 24643150) kontrol ettim, havuzda yalnızca şunlar bulunuyordu:

331.631982538108027323 adet AAVE, 17.653276196397688066 adet WETH

Bu bir veri girişi hatası değil, sert bir gerçek.

Bu işlem rotası, yalnızca 17,65 WETH rezervi ve karşılık gelen AAVE toplam stoku 331,63 olan minik bir işlem havuzuna yaklaşık 17.958 WETH注入 ediyor; girilen WETH miktarı, havuzdaki WETH rezervinin yaklaşık 1017 katı.

Bu, sıradan bir "slippage yüksekliği" veya "likidite azlığı" sorunu değil, kendi boyutunun binlerce katı kadar büyük bir işlemi karşılamak için son derece absürt bir piyasa fiyatı siparişi yürütme yolu, ki bu da çok küçük sabit çarpım AMM havuzunu zorla zorlamaktır.

AMM havuzu, belirlenen algoritmaya göre işlem yaptı ve havuzdaki tüm AAVE rezervlerini neredeyse tüketti.

SushiSwap işlem çifti, temel Swap değişimi olayını tetikledi: İşlemcisi, 17957,810805702142342238 WETH gönderdi ve sadece 331,305315608938235428 AAVE geri aldı. İşlem tamamlandıktan sonra bu havuzda kalan likidite yaklaşık olarak:

0,326666929169791895 adet AAVE, 17975,464081898540030304 adet WETH

Açıkçası, havuzdaki AAVE rezervlerinin yaklaşık %99,9'u tek bir atışta boşaltıldı.

İşlem öncesi rezervlere göre havuzun gizli AAVE fiyatı yaklaşık 149,50 ABD dolarıdır. Kullanıcının gerçek işlem fiyatı yaklaşık 154.114,66 USDT karşılığında 1 AAVE'dir. Bu, işlem öncesi spot fiyatından daha fazla 1000 kat farktır.

Daha sonra bu AAVE, supply(address,uint256,address,uint16) seçicisi 0x617ba037 kullanılarak Aave havuzuna geri verilir. Sonuç olarak, yeni çıkarılan aEthAAVE, sonuçlandırma sözleşmesine geri gönderilir. Sonuçlandırma sözleşmesi nihayetinde kullanıcıya 327.241335505966487788 aEthAAVE aktarır. Kullanıcının ödediği tutara göre yaklaşık 4.06398010297174764 aEthAAVE, sonuçlandırma sözleşmesinde fazla kalan miktar olarak kalır.

Yani, sonuç, iyi bir yürütme sonucunu kötü bir sonuca dönüştürmek için aniden gerçekleşmedi. Sadece rota tarafından daha önce oluşturulan sonucu nihai hale getirdi.

Bu kritik nokta, açıkça ifade edilmesi gereken bir şeydir: Felaket sonuçları, rota yürütülmeden önce zaten içinde önceden belirlenmiştir.

Yol içine gömülü yardımcı sözleşme çağrısı verilerinde, satın alma tarafının hedef miktarı yaklaşık 331,272185078031026739 adet, kullanıcı imzası ile belirlenmiş minimum satın alma miktarı 324,949260918413591035 adet, gerçek sonuç miktarı ise 327,241335505966487788 adettir; tüm temel değerler, sonuçlanmadan önce üç yüz adet AAVE seviyesinde sabitlenmiştir.

Bu rota doğuştan bozuk.

Where is the vulnerability?

Cevap: Sistemin her katmanı, hata boyutunu kontrol eder.

Tüm katmanlar, işlemin yürütülebilir olup olmadığını, imzanın geçerli olup olmadığını ve tutarın sıfır olup olmadığını kontrol eder, ancak ekonomik açıdan işlem rota合理性'yi kontrol etmek için neredeyse hiçbir temel katman kontrolü yapmaz; bu, mekanizmanın başarısızlığının temel kaynağıdır.

Aave arayüz uyumlayıcısı teklif yolu kod hatası

İlk açık kod hatası, Aave arayüzündeki CoW adaptör teklif sürecinde ortaya çıktı: Teklif isteğinde adaptöre özel uygulama verilerini eklemek için kullanılan fonksiyon doğrudan devre dışı bırakıldı.

Kaynak: rates.helpers.ts:93 ve adapters.helpers.ts:194

Bu, Aave arayüzünün CoW'ya teklif isteğinde bulunurken, gerçek siparişi verirken eklenen flash loan ve hook meta verilerini eklememesi anlamına gelir. Başka bir deyişle, teklif edilen şey, tam olarak yürütülecek şey değildir. Kod yorumları bile bu yardımcı fonksiyonun, uyumlu teklifleri daha doğru hale getirmek amacıyla olduğunu belirtirken, bu fonksiyon zaten kapatılmıştır.

CoW teklif yarışması mantığı çok zayıf bir şekilde değerlendiriliyor (temel açığın)

İkinci ve en ciddi sorun, CoW protokolünün teklif rekabet mantığındadır: Hizmet kodunda, teklif edilen Gas ücreti pozitif ve çıktı miktarı sıfırdan farklıysa, bu teklif “uygun teklif” olarak kabul edilir.

Kaynak: quote.rs:31

Sekiz haneli siparişleri işleyen bir rota sistemi için bu, şaşırtıcı derecede zayıf bir “makul” tanımı.

Sistem, fiyat bütünlüğü doğrulaması için oracle entegre edilmemiştir, "teklif fiyatı spot fiyatın 500 katından fazla sapma gösteriyor" engelleme mekanizması yoktur, "rota likidite havuzunu tamamen tüketecek" riski tespit mekanizması yoktur, "son atlama likiditesi sipariş boyutuyla ciddi şekilde uyumsuz" uyarı mekanizması yoktur; çözücü, yürütülebilir ve sıfırdan farklı bir rota çözümü döndürürse, sistem bu çözümü kabul eder; bu, olayın temel açığıdır.

Uniswap V2 sınıfı likidite modelleme mantığının eksiklikleri

Üçüncü sorun, Uniswap V2 tarzı likidite havuzu modellemesidir: kod yalnızca standart sabit çarpım algoritmasını kullanır ve sıfır rezervler, sayısal alt sınır aşımları, rezerv aşımaları gibi matematiksel olarak imkânsız durumları reddeder; ekonomik olarak mümkün olup olmadığına dair doğrulama yapmaz.

Kaynak: pool_fetching.rs:118 ve pool_fetching.rs:153

Bu kod, akış havuzunun ilgili rota işlemine yeterli miktarda kapasiteye sahip olup olmadığını kontrol etmez, yalnızca değiş tokuş işleminin matematiksel olarak geçerli olup olmadığını değerlendirir. Bu nedenle, sadece 331 AAVE rezervi olan minik bir havuz, sabit çarpım algoritması sıfır dışı bir sonuç ürettiğinden, 17.957 WETH satın alma talebini karşılamak için geçerli bir yer olarak kabul edilir; ancak bu sonucun yıkıcı varlık kaybına neden olacağını tamamen görmezden gelir.

Flash Loan SDK ve Sipariş Doğrulama Mekanizmasının İkinci Başarısızlığı

Daha sonra, hırsızlık ödemesi SDK'sı, bu geçersiz teklifi, sipariş ve kancanın yürütme yüküne herhangi bir ikincil risk engelleme yapmadan sabitler.

Devam:

Kaynak: index.js:484 ve index.js:591

Bu yüzden her zaman bu yönlendirmenin “doğudan bozuk” olduğunu söylüyorum. Adaptör katmanı, çalışırken yeni bir bozuk miktarı “keşfetmiyor”; zaten sunulan bozuk miktarı, kancaya veri ve belirlenmiş örnek adresine serileştiriyor. Kötü bir teklif var olduğunda, kalan mekanizmalar onu sadık bir şekilde iletmeye devam eder.

Burada CoW'nun sipariş doğrulama mantığı, kullanıcıları gerçekten korumuyor, çünkü siparişin fiyat teklifinden önceki piyasa fiyatını aşıp aşmadığını kontrol ediyor, ancak teklifin gerçek likiditeye göre absürt olup olmadığını kontrol etmiyor.

Kaynak: order_validation.rs:694

Bu bir tutarlılık kontrolüdür. Teklif kendisi zaten anlamsızsa, sipariş yine de kabul edilir.

Kullanıcı arayüzü ön uç uyarı mekanizması boşuna

Aave arayüzü gerçekten yüksek fiyat şoku uyarısı sunar, ancak bu sert bir kesme anahtarı değildir. Değer kaybı %20'yi aştığında, bu bir onay onay kutusuna dönüşür.

Kullanıcı onay kutusunu işaretlediğinde engel kaldırılır:

Kaynak: helpers.ts:24 ve HighPriceImpactWarning.tsx:35

Bu nedenle, bu işlem tüm varlık değerini neredeyse tüketseniz bile, sistem bunu zorunlu olarak reddedilmesi gereken yüksek riskli bir işlem olarak değil, kullanıcı onayı gerektiren bir işlem olarak sınıflandırır; uyarı mekanizması tamamen risk engelleme işlevini kaybeder.

Yukarıdaki tüm mekanizmaların başarısız olmasının ardından, "Bu sadece kullanıcıların aptallığı" gibi boş bir sonuçla yetinmem. Kullanıcılar gerçekten imza attı, ancak tüm yazılım sistemi bu felaketi engellemek için sayısız fırsat buldu ve her katman sadece temel doğrulamayı yaptı: "sıfırdan farklı, çalıştırılabilir, imzalı" olarak işaretledikten sonra doğrudan geçiş verdi ve nihayetinde kötü sonuçlara yol açtı.

Yol değiştirilmemiş

Bu aşama kritik olup, büyük ölçüde yanlış tahminleri ortadan kaldırır: aave-v3-interface-collateral-swap'e karşılık gelen Aave resmi arayüzü süreci, useSwapOrderAmounts.ts dosyasının 139. satırında, teklifler, ağ ücretleri, ortak ücretleri ve hırsız kredi ücretleri birlikte değerlendirilerek kayma ayarlı satın alma miktarı hesaplanır; 331. satırda bu miktar buyAmountBigInt değerine dönüştürülür; ardından CollateralSwapActionsViaCoWAdapters.tsx dosyasının 191. satırında bu miktar tam olarak imzalanır.

Sonraki adaptör sözleşmesi, AaveV3BaseAdapter.sol dosyasının 141. satırında imzalı sipariş alanını depolanan değerle tam olarak doğrulayacaktır; CoW setlement sözleşmesi, GPv2Settlement.sol dosyasının 337. satırında imzalı limit kurallarını zorunlu hale getirecektir. Bu nedenle, zincir üzerindeki yürütme sonucu, imzalı sipariş tarafından izin verilen sınırları aşmamıştır ve kullanıcıların gerçek olarak aldıkları varlıklar, imzalı limitin minimum sınırını bile aşmaktadır.

Bu, felaketin hesaplama süreci sırasında değil, hesaplama öncesinde meydana geldiğini ve rota kritik eksikliğinin sonucu önceden belirlediğini kanıtlıyor.

Kaybolan değer nereye gitti?

Aynı blok içindeki bir sonraki işlem (hash 0x45388b0f ile başlayan), hasar gören SushiSwap AAVE/WETH havuzuna yönelik bir geri kaçış arbitrajı gerçekleştirdi. Anormal işlem, havuzu büyük miktarda WETH ile doldurduktan ve büyük bir kısmını AAVE ile boşalttıktan sonra, arbitrajcı AAVE'yi hemen havuza geri sattı ve likidite dengesizliğinden kaynaklanan fazla değeri topladı.

Bu geri koşu arbitrajı sırasında yaklaşık 17929,770158685933 WETH çekildi, ardından bu blok oluşturucuya yaklaşık 13087,73 ETH ve arbitraj yürütme adresine yaklaşık 4824,31 ETH ödendi.

Kullanıcının kaybettiği tüm ekonomik değer, neredeyse anında aynı blok içindeki MEV arbitraj kazançlarına ve blok oluşturucu kazançlarına dönüşür.

Ayrıca blok seviyesindeki zaman sırasını kontrol ederek şunu doğrulayabilirsiniz: SushiSwap havuzuna zarar vermek ve kullanıcıları kandırmak amacıyla işlem öncesi herhangi bir kötü niyetli manipülasyon yapılmamıştır; AAVE/WETH işlem çifti, bu anormal işlem (işlem indeksi 1) ile ilk kez etkilenmiştir; hemen ardından gelen sonraki işlem (işlem indeksi 2), bu işlem tarafından yaratılan fiyat bozulmasını ilk kez düzeltmiştir; işlem indeksi 3 de piyasa onarımı sürecinde bu işlem çiftine ulaşmıştır. Zaman çizelgesi, bu anormal işlemin aşırı bir fiyat bozulması yarattığını ve sonraki işlemlerin bu bozulmadan doğrudan kazanç elde ettiğini net bir şekilde doğrular.

Peki, kimin hatası?

Aave V3 çekirdek protokolünün çöküp çökmediğini sorarsanız, cevap hayır. Aave havuzları, USDT çekimi ve AAVE yatırımı süreçlerini talimatlara tamamen uygun şekilde normal şekilde tamamladı.

CoW'nun GPv2Settlement sözleşmesinin çöküp çökmediğini sorarsanız, cevap hayır. Takas, geçerli bir imzalı siparişi zorla uyguladı ve imzalı minimumdan daha yüksek bir tutar ödedi.

Uniswap V3 veya SushiSwap için trading pair sözleşmelerinin çöküp çökmediğini sorarsanız, cevap yine hayır. Her iki işlem havuzu da kendi algoritmik kuralları doğrultusunda fiyatlandırma yapmaktadır.

Gerçek sistemsel bir başarısızlık, daha üst düzey rotalama ve risk kontrol katmanlarında gerçekleşti:

Ana sorumluluk, CoW protokolünün rota, teklif ve çözücü modüllerindedir: Sistem, “makul rota” tanımı için çok zayıf bir kriter kullanır; milyonlarca dolarlık büyük emirlerin, sadece rota yürütülebilir ve sıfırdan farklıysa, mikroskobik düşük likidite havuzlarına yönlendirilmesine izin verir ve ekonomik açıdan aşırı mantıksızlığı tamamen görmezden gelir.

İkincil sorumlu taraf, Aave arayüzüdür: İstek adaptöründen teklif alınırken hook ile ilişkili uygulama verileri eklenmemiş, hatalı sonuçlar doğrudan imza sürecine aktarılmış ve yalnızca uyarı uyarıları kullanılmış, katı reddetme mekanizması bulunmamıştır; bu tür aşırı büyük işlemler için bu tür risk kontrol önlemleri tamamen yetersizdir.

Bu, bir işlem rotalama kalitesi ve risk kontrol önlemlerinin uç düzeyde bir başarısızlığıdır ve legítim ve uygun bir teminat döngüsünü, yıkıcı bir varlık kaybı olayına dönüştürmüştür.

Yasal Uyarı: Bu sayfadaki bilgiler üçüncü şahıslardan alınmış olabilir ve KuCoin'in görüşlerini veya fikirlerini yansıtmayabilir. Bu içerik, herhangi bir beyan veya garanti olmaksızın yalnızca genel bilgilendirme amacıyla sağlanmıştır ve finansal veya yatırım tavsiyesi olarak yorumlanamaz. KuCoin, herhangi bir hata veya eksiklikten veya bu bilgilerin kullanımından kaynaklanan sonuçtan sorumlu değildir. Dijital varlıklara yapılan yatırımlar riskli olabilir. Lütfen bir ürünün risklerini ve risk toleransınızı kendi finansal koşullarınıza göre dikkatlice değerlendirin. Daha fazla bilgi için lütfen Kullanım Koşullarımıza ve Risk Açıklamamıza bakınız.