50J USDT Ditukar untuk 35K AAVE dalam Insiden Aave CoW Protocol

iconOdaily
Kongsi
Share IconShare IconShare IconShare IconShare IconShare IconCopy
AI summary iconRingkasan

expand icon
Sebuah kemas kini protokol untuk Aave CoW diumumkan selepas seorang pengguna bertukar 50.4 juta USDT hanya kepada 35,900 AAVE pada 12 Mac 2026. Perdagangan ini mengosongkan kolam SushiSwap dengan likuiditi rendah akibat laluan penghalaan yang cacat. Berita di rantai menunjukkan logik penghalaan protokol CoW dan antara muka depan Aave gagal menghalang perdagangan tersebut. Tiada pemeriksaan kewajaran ekonomi yang menghentikan transaksi tersebut.

Artikel ini berasal dari: @Ehsan1579

Disusun|Odaily Star Daily (@OdailyChina); Penerjemah| Ethan (@ethanzhang_web3

Dengan hanya melihat tajuk peristiwa, kemungkinan besar akan disangka sebagai serangan pemanfaatan lubang keamanan.

Inti peristiwa ini adalah: seseorang menukar USDT bernilai $50.4 juta, tetapi hanya menerima AAVE bernilai $35.9 ribu.

Saat pertama kali saya mendengar perkara ini, saya benar-benar terkejut. Oleh itu, saya mengkaji seluruh peristiwa ini dari awal hingga akhir: jejak transaksi, laluan penyelesaian, panggilan kontrak, simpanan sejarah, data penyelesaian, proses adapter, kod antaramuka Aave, SDK闪电贷 CoW, serta kod laluan yang menilai sama ada tawaran itu "munasabah".

Ini bukan serangan peretas. Protokol inti Aave tidak ada kesalahan. Penyelesaian CoW tidak ada kesalahan. Uniswap tidak ada kesalahan. SushiSwap tidak ada kesalahan. Transaksi adalah sah, tanda tangan adalah sah, dan semua kontrak dilaksanakan secara ketat mengikuti kod. Namun, hampir seluruh nilai ekonomi telah hancur, kerana rute yang diizinkan sangat tidak masuk akal.

Rantaian awam tidak bermasalah, yang bermasalah ialah penghalaan.

Menurut saya, menggambarkan insiden ini sebagai sekadar “kesalahan pengguna” adalah sikap yang tidak objektif dan tidak ketat. Memang, pengguna telah menandatangani pesanan tersebut, tetapi keseluruhan sistem perisian membenarkan operasi pergantian jaminan yang melibatkan hampir 50 juta dolar AS, dari penawaran, penandatanganan, perancangan rute hingga pelaksanaan akhir, semuanya mengarah ke kolam likuiditi rendah yang hanya menyimpan sekitar 331 AAVE. Ini seharusnya tidak mungkin berlaku, dan sekurang-kurangnya sepatutnya sistem menghalang dan menolaknya sebelum proses penyelesaian dimulakan.

Sumber maklumat penting perdagangan

Hash transaksi tidak normal ini ialah: 0x9fa9feab3c1989a33424728c23e6de07a40a26a98ff7ff5139f3492ce430801f, disahkan pada ketinggian blok 24643151 di rangkaian utama Ethereum pada 12 Mac 2026, dengan indeks transaksi 1, menghabiskan 3780570 unit Gas, dan transaksi berjaya dilaksanakan. Alamat dompet yang menjadi milik pesanan bermula dengan 0x98b9, manakala alamat solver (penghantar transaksi) yang sebenar melaksanakan transaksi bermula dengan 0x3980, dan ditandai sebagai tsolver dalam data CoW Auction.

Pertama-tama, perlu dipahami bahawa ini bukan sekadar pertukaran USDT kepada AAVE pada peringkat dompet. Token yang dijual ialah aEthUSDT, iaitu bukti simpanan USDT yang menghasilkan faedah di platform Aave. Token yang dibeli ialah aEthAAVE, iaitu bukti simpanan AAVE yang menghasilkan faedah di platform Aave. Oleh itu, ini sebenarnya merupakan penukaran jaminan Aave melalui sistem penyelesaian CoW Protocol dan proses penyesuaian flash loan-nya.

Sebelum transaksi, dompet ini memegang sekitar 50,432,693.075254 aEthUSDT dan 0 aEthAAVE. Selepas transaksi, ia hanya tinggal 4.980399 aEthUSDT dan menerima 327.241335505966487788 aEthAAVE. Sebenarnya, dompet ini menjual hampir keseluruhan posisinya.

Metadata yang lebih jelas menunjukkan bahawa laluan tersebut sudah “beracun” sebelum dilaksanakan. Pesanan berasal daripada proses aave-v3-interface-collateral-swap. API CoW menunjukkannya sebagai pesanan jual yang ditandatangani, manakala metadata aplikasi menandainya sebagai pertukaran jaminan berjenis pasar dengan slippage pintar 121 bps. Jumlah jual yang ditandatangani ialah 50,432,688.41618 aEthUSDT. Jumlah beli minimum yang ditandatangani ialah 324.949260918413591035 aEthAAVE. Pembayaran sebenar yang disetel ialah 327.241335505966487788 aEthAAVE.

Ini adalah butiran yang sangat penting. Pesanan ini tidak pernah diharapkan untuk mendapatkan ribuan AAVE, lalu di tengah jalan hancur tanpa sebab. Ia dirancang sejak awal untuk menghasilkan lebih dari tiga ratus AAVE.

Lengkap rantai kegagalan laluan

Setelah anda mengikuti jejak perdagangan, keseluruhan prosesnya menjadi kejam dan langsung.

Pemindahan dana tingkat atas secara utama bergantung pada kontrak penyelesaian GPv2Settlement yang bermula dengan 0x9008. Pertama, kontrak HooksTrampoline yang bermula dengan 0x60bf menyelesaikan operasi pengesahan aEthUSDT, membenarkan perantara gudang CoW menarik aset pengguna tanpa pengesahan transaksi terpisah; kemudian, kontrak GPv2VaultRelayer yang bermula dengan 0xc92e menarik 50432688.41618 aEthUSDT dari dompet pengguna ke proses penyelesaian, sehingga pada peringkat ini, semua operasi mematuhi logik yang normal.

Kontrak penyelesaian kemudian memberikan kuasa operasi aEthUSDT kepada kontrak bantuan yang tidak bersumber bermula dengan 0xd524, dan memulakan panggilan melalui pemilih fungsi 0x494b3137; kontrak bantuan ini kemudian mentransfer kuasa pelaksanaan kepada kontrak pelaksana yang tidak bersumber bermula dengan 0x699c, sehingga seluruh gambaran laluan transaksi yang tidak normal terdedah sepenuhnya.

Panggilan pertama yang berkesan menunjuk kepada kontrak kolam pendanaan Aave bermula dengan 0x87870, yang menghancurkan aEthUSDT melalui fungsi withdraw (pemilih 0x69328dec) untuk menebus USDT asal; kemudian rute dialihkan ke kolam perdagangan Uniswap V3 mendalam bermula dengan 0x4e68, di mana semua 50432688.41618 unit USDT ditukar menjadi 17957.810805702142342238 unit WETH.

Perdagangan pada peringkat ini berjalan sepenuhnya normal: kadar pertukaran adalah sekitar 2808.4 USDT untuk 1 WETH, selaras dengan pasaran pada masa itu, tiada masalah kekurangan likuiditi, tiada kesilapan pengiraan, dan tiada sebarang anomali dalam saluran perdagangan pertama.

Masalah berlaku pada lompatan kedua, sekali anda melihat simpanan likuiditi, cerita selepas itu tidak dapat dielakkan.

Setelah executor menerima 17957.810805702142342238 WETH, seluruh dana akan dipindahkan ke kolam perdagangan SushiSwap V2 AAVE/WETH di alamat 0xd75ea151a61d06868e31f8988d28dfe5e9df57b4.

Saya telah memeriksa data simpanan likuiditi sejarah kolam perdagangan pada saat sebelum transaksi tidak biasa berlaku (tingkat blok 24643150), di mana kolam tersebut hanya memegang:

331.631982538108027323 keping AAVE, 17.653276196397688066 keping WETH

Ini bukan kesilapan pemasukan data, tetapi fakta yang tak terbantahkan.

Rute perdagangan ini memasukkan sebanyak 17,958 WETH ke dalam kolam perdagangan mikro yang hanya menyimpan 17.65 WETH, dengan stok AAVE keseluruhan sebanyak 331.63 WETH. Jumlah WETH yang dimasukkan adalah sekitar 1,017 kali ganda stok WETH dalam kolam tersebut.

Ini bukan masalah biasa seperti "slippage tinggi" atau "likuiditi sedikit", tetapi satu laluan pelaksanaan pesanan pasaran yang sangat tidak masuk akal, setara dengan memaksa cecair AMM produk tetap yang sangat kecil untuk menerima transaksi besar yang melebihi ribuan kali ganda ukurannya.

Pondi AMM telah menjalankan operasi mengikut algoritma yang ditetapkan, hampir menghabiskan semua simpanan AAVE dalam pondi.

Pasangan SushiSwap memicu peristiwa pertukaran Swap utama: pelaksana mentransfer 17957.810805702142342238 WETH, tetapi hanya memperoleh kembali 331.305315608938235428 AAVE. Selepas transaksi selesai, likuiditi yang tinggal dalam kolam ini adalah:

0.326666929169791895 unit AAVE, 17975.464081898540030304 unit WETH

Dengan kata lain, sekitar 99.9% simpanan AAVE dalam kolam telah disedot habis dalam satu lompatan.

Berdasarkan simpanan sebelum perdagangan, harga AAVE yang tersirat dalam kolam adalah sekitar US$149.50. Harga pelaksanaan sebenar pengguna adalah sekitar 154,114.66 USDT untuk 1 AAVE. Ini lebih daripada 1000 kali ganda berbanding harga spot sebelum perdagangan.

Seterusnya, AAVE ini disalurkan semula ke kolam Aave, menggunakan pemilih 0x617ba037, iaitu supply(address,uint256,address,uint16). Hasilnya, aEthAAVE yang dicetak baharu dihantar semula ke kontrak penyelesaian. Kontrak penyelesaian akhirnya menghantar 327.241335505966487788 aEthAAVE kepada pengguna. Sekitar 4.06398010297174764 aEthAAVE sebagai lebihan berbanding bayaran pengguna, kekal di dalam kontrak penyelesaian.

Jadi, penyelesaian tidak mengubah hasil pelaksanaan yang baik menjadi hasil yang buruk secara tiba-tiba. Ia hanya mengukuhkan hasil yang telah dihasilkan oleh rute tersebut sejak awal.

Ini adalah titik penting yang perlu dinyatakan dengan jelas: hasil bencana telah “diprasetel” di dalamnya sebelum pelaksanaan rute.

Dalam data panggilan kontrak bantu yang disematkan dalam laluan, jumlah sasaran beli adalah sekitar 331.272185078031026739 unit, jumlah beli minimum yang dijanjikan oleh pengguna adalah 324.949260918413591035 unit, dan jumlah sebenar yang disetel adalah 327.241335505966487788 unit; semua nilai utama telah dikunci pada tahap ratusan unit AAVE sebelum setel.

This route is inherently flawed.

Di mana kelemahannya?

Jawapannya adalah: Setiap mekanisme pengesahan pada setiap lapisan sistem sedang memeriksa dimensi kesalahan.

Semua peringkat hanya mengesahkan sama ada transaksi boleh dilaksanakan, sama ada tanda tangan sah, dan sama ada jumlah bukan sifar, tetapi hampir tidak ada pengesahan peringkat utama terhadap kepatutan ekonomi laluan transaksi, yang merupakan punca utama kegagalan mekanisme.

Kekurangan kod laluan tawaran penyesuai antaramuka Aave

Titik ketidaknormalan kod pertama yang jelas muncul dalam proses tawaran CoW adapter antaramuka Aave: fungsi yang sebelumnya digunakan untuk melampirkan data aplikasi khas adapter semasa meminta tawaran, telah dilumpuhkan secara terus.

Sumber: rates.helpers.ts:93 dan adapters.helpers.ts:194

Ini bermaksud bahawa antaramuka Aave tidak melampirkan metadata peminjaman kilat dan hook yang akan dilampirkan semasa mempublikasikan pesanan semasa meminta kutipan dari CoW. Dengan kata lain, perkara yang dikutip tidak sepenuhnya sama dengan perkara yang akan dilaksanakan. Komen kod bahkan menyatakan bahawa tujuan fungsi pembantu ini adalah untuk membuat kutipan penyesuai lebih tepat, tetapi fungsi ini telah dimatikan secara paksa.

Penilaian kepatutan logik persaingan tawaran CoW terlalu lemah (lubang utama)

Masalah kedua dan yang paling serius ialah logik persaingan tawaran protokol CoW: dalam kod perkhidmatan awamnya, sebarang tawaran dengan caj Gas positif dan jumlah output bukan sifar akan dianggap sebagai "tawaran yang munasabah".

Sumber: quote.rs:31

Bagi sistem penghala yang menangani pesanan nombor lapan digit, ini adalah definisi “kepatutan” yang sangat lemah.

Sistem tidak menghubungkan orakel untuk pengesahan kesahihan harga, tiada mekanisme penghalang bagi “penyimpangan harga tawaran melebihi 500 kali harga spot”, tiada penilaian risiko bagi “rute akan mengosongkan kolam likuiditi sepenuhnya”, tiada amaran bagi “likuiditi langkah terakhir tidak sepadan dengan saiz pesanan”; sistem hanya memerlukan penyelesaian mengembalikan rute yang boleh dilaksanakan dan bukan sifar, dan ia akan diterima oleh sistem — ini merupakan lubang utama dalam insiden ini.

Kelemahan logik pemodelan likuiditi Uniswap V2

Masalah ketiga ialah cara pemodelan kolam likuiditi bergaya Uniswap V2: kod hanya menggunakan algoritma hasil tetap standard, hanya menolak kes mustahil secara matematik seperti simpanan sifar, underflow nombor, dan overflow simpanan, tanpa melakukan pengesahan kelayakan ekonomi.

Sumber: pool_fetching.rs:118 dan pool_fetching.rs:153

Kod ini tidak akan menilai sama ada jumlah likuiditi mencukupi untuk menampung transaksi laluan yang berkaitan, hanya menilai sama ada operasi pertukaran secara matematik adalah sah. Oleh itu, walaupun kolam kecil dengan simpanan hanya 331 AAVE, ia akan dianggap sebagai tempat yang sah untuk menerima permintaan pembelian 17,957 WETH, kerana algoritma hasil tetap dapat menghitung hasil bukan sifar, tetapi sepenuhnya mengabaikan bahawa hasil ini akan membawa kerugian aset yang merosakkan.

Kegagalan kedua bagi SDK pinjaman kilat dan mekanisme pengesahan pesanan

Selepas itu, SDK pinjaman kilat secara langsung mengikat tawaran yang tidak sah ini ke dalam beban pelaksanaan pesanan dan hook, tanpa sebarang penghalang risiko kedua.

Seterusnya:

Sumber: index.js:484 dan index.js:591

Inilah sebabnya saya selalu mengatakan rute ini adalah “cacat sejak lahir”. Lapisan adapter tidak “menemukan” jumlah buruk yang baru semasa eksekusi. Ia telah menserialkan urutan jumlah buruk yang telah dikutip ke dalam data hook dan alamat contoh yang ditentukan. Sekali kutipan buruk wujud, mekanisme selebihnya akan dengan setia meneruskannya.

Logik pengesahan pesanan CoW pun tidak benar-benar melindungi pengguna di sini, kerana ia hanya memeriksa sama ada pesanan itu melampaui harga pasaran pada masa kutipan, tetapi tidak memeriksa sama ada kutipan itu sendiri secara absurd berbanding likuiditi sebenar.

Sumber: order_validation.rs:694

Ini adalah pemeriksaan konsistensi. Jika tawaran itu sendiri sudah tidak masuk akal, pesanan masih boleh diproses.

Mekanisme amaran antara muka pengguna tidak berfungsi

Antara muka Aave memang mempunyai amaran kesan harga tinggi, tetapi ia bukan suis pemutus yang keras. Ia menjadi kotak semak pengesahan apabila kerugian nilai melebihi 20%.

Apabila pengguna memilih kotak semak, halangan telah dihapuskan:

Sumber: helpers.ts:24 dan HighPriceImpactWarning.tsx:35

Oleh itu, walaupun transaksi ini hampir mengosongkan keseluruhan nilai aset, sistem hanya menganggapnya sebagai tindakan yang memerlukan pengesahan pengguna, bukan transaksi berisiko tinggi yang harus ditolak secara paksa oleh sistem, mekanisme amaran sepenuhnya kehilangan fungsi penghalang risiko.

Berdasarkan semua mekanisme ini gagal, saya tidak setuju dengan kesimpulan permulaan yang meremehkan, “hanya pengguna yang bodoh.” Pengguna memang telah menandatangani, tetapi sistem perisian keseluruhan mempunyai peluang berulang-ulang untuk menghalang bencana ini, tetapi setiap lapisan hanya melakukan pemeriksaan asas, menilai “bukan sifar, boleh dijalankan, telah ditandatangani,” lalu mengizinkannya secara langsung, akhirnya menyebabkan akibat buruk.

Rute tidak diubah

Bahagian ini sangat penting dan secara langsung mengelakkan banyak tekaan yang salah: prosedur antara muka rasmi Aave untuk aave-v3-interface-collateral-swap akan mengira jumlah pembelian yang telah disesuaikan dengan slippage di baris 139 fail useSwapOrderAmounts.ts, dengan menggabungkan kadar tawaran, caj rangkaian, caj rakan kongsi, dan caj pinjaman kilat; di baris 331, ia ditukar kepada nilai buyAmountBigInt; kemudian di baris 191 fail CollateralSwapActionsViaCoWAdapters.tsx, jumlah ini ditandatangani dengan tepat.

Kontrak adapter seterusnya akan mengesahkan bahawa medan pesanan tandatangan sepadan sepenuhnya dengan nilai yang disimpan di baris 141 fail AaveV3BaseAdapter.sol; kontrak penyelesaian CoW akan memaksa peraturan had yang ditetapkan dalam tandatangan di baris 337 fail GPv2Settlement.sol. Oleh itu, hasil pelaksanaan di rantai tidak melebihi lingkung yang dibenarkan oleh pesanan tandatangan, dan aset yang diterima pengguna sebenarnya melebihi had minimum yang ditetapkan dalam tandatangan.

Ini cukup membuktikan: bencana berlaku sebelum pengiraan, bukan semasa pengiraan, dan kelemahan mematikan dalam penjajaran sudah ditakdirkan hasilnya.

Di mana nilai yang hilang itu pergi?

Transaksi seterusnya dalam blok yang sama (bermula dengan hash 0x45388b0f) menyelesaikan arbirase lari balik terhadap kolam SushiSwap AAVE/WETH yang rosak. Transaksi aneh itu mengisi kolam dengan jumlah WETH yang sangat besar, mengosongkan sebahagian besar AAVE, kemudian pelaku arbirase segera menjual semula AAVE ke dalam kolam untuk mengambil kelebihan nilai yang diakibatkan oleh ketidakseimbangan likuiditi.

Sebanyak kira-kira 17929.770158685933 WETH telah ditarik dalam arbitrasi backrunning ini, kemudian dibayar kira-kira 13087.73 ETH kepada pembina blok ini, dan kira-kira 4824.31 ETH kepada alamat pelaksana arbitrage.

Nilai ekonomi sepenuhnya yang hilang oleh pengguna berubah menjadi keuntungan MEV dan keuntungan pembina blok dalam blok yang sama hampir secara serta-merta.

Pemeriksaan urutan masa peringkat blok juga mengesahkan: sebelum transaksi ini, tiada pihak yang secara jahat mengendalikan kolam SushiSwap untuk memikat pengguna; pasangan AAVE/WETH ini pertama kali disentuh dalam transaksi yang tidak biasa ini (indeks transaksi 1); transaksi seterusnya (indeks transaksi 2) segera memanfaatkan distorsi harga yang dihasilkan oleh transaksi ini; indeks transaksi 3 juga menyentuh pasangan ini semasa proses pemulihan pasaran. Garis masa jelas membuktikan: transaksi yang tidak biasa ini mencipta harga yang sangat terdistorsi, dan transaksi seterusnya secara langsung memanen keuntungan daripada distorsi ini.

Jadi, siapakah yang salah?

Jika anda bertanya sama ada protokol inti Aave V3 gagal, jawapannya tidak. Pusaka Aave beroperasi sepenuhnya mengikut arahan dan menyelesaikan proses penebusan USDT serta setoran AAVE dengan lancar.

Jika anda bertanya sama ada kontrak GPv2Settlement CoW rosak, jawapannya tidak. Penyelesaian memaksa pesanan tanda tangan yang sah dan membayar jumlah yang melebihi minimum yang ditandatangani.

Jika anda bertanya sama ada kontrak pasangan perdagangan Uniswap V3 atau SushiSwap telah rosak, jawapannya juga tidak. Kedua-dua kolam perdagangan tersebut menyelesaikan penentuan harga perdagangan mengikut peraturan algoritma masing-masing.

Kegagalan sistemik sebenar berlaku di peringkat penghalaan dan pengurusan risiko yang lebih tinggi:

Pihak utama yang bertanggungjawab ialah modul penghalaan, kutipan, dan penyelesaian CoW Protocol: sistem keseluruhan mempunyai kriteria yang terlalu lemah untuk menentukan “penghalaan yang munasabah”, membenarkan pesanan besar berjumlah jutaan dolar mengalir ke kolam dengan likuiditi rendah yang sangat kecil, selama penghalaan boleh dilaksanakan dan bukan sifar, ia diterima tanpa mempertimbangkan ketidakmunasabahan ekonomi yang ekstrem.

Pihak tanggung jawab sekunder ialah antaramuka Aave: ketika meminta kutipan penyesuai permintaan, data aplikasi yang dikaitkan dengan hook tidak disertakan, hasil ralat secara langsung dimasukkan ke dalam proses tanda tangan, dan hanya bergantung pada amaran peringatan tanpa mekanisme penolakan keras; langkah-langkah pengurusan risiko semacam ini sama sekali tidak mencukupi untuk mengelakkan risiko bagi transaksi berjumlah sangat besar seperti ini.

Ini adalah kegagalan ekstrem dalam kualiti penghalaan transaksi dan palang keselamatan pengurusan risiko, yang secara langsung mengubah operasi pertukaran jaminan yang sah dan patuh menjadi peristiwa kerugian aset yang memusnahkan.

Penafian: Maklumat yang terdapat pada halaman ini mungkin telah diperoleh daripada pihak ketiga dan tidak semestinya menggambarkan pandangan atau pendapat KuCoin. Kandungan ini adalah disediakan bagi tujuan maklumat umum sahaja, tanpa sebarang perwakilan atau waranti dalam apa jua bentuk, dan juga tidak boleh ditafsirkan sebagai nasihat kewangan atau pelaburan. KuCoin tidak akan bertanggungjawab untuk sebarang kesilapan atau pengabaian, atau untuk sebarang akibat yang terhasil daripada penggunaan maklumat ini. Pelaburan dalam aset digital boleh membawa risiko. Sila menilai risiko produk dan toleransi risiko anda dengan teliti berdasarkan keadaan kewangan anda sendiri. Untuk maklumat lanjut, sila rujuk kepada Terma Penggunaan dan Pendedahan Risiko kami.