50 juta USDT ditukar menjadi 35 ribu AAVE dalam Insiden Aave CoW Protocol

iconOdaily
Bagikan
Share IconShare IconShare IconShare IconShare IconShare IconCopy
AI summary iconRingkasan

expand icon
Pembaruan protokol untuk Aave CoW terungkap setelah seorang pengguna menukar 50,4 juta USDT hanya menjadi 35.900 AAVE pada 12 Maret 2026. Perdagangan ini menguras kolam SushiSwap dengan likuiditas rendah akibat jalur routing yang cacat. Berita on-chain menunjukkan logika routing protokol CoW dan antarmuka depan Aave gagal memblokir perdagangan tersebut. Tidak ada pemeriksaan kelayakan ekonomi yang menghentikan transaksi tersebut.

Artikel ini berasal dari: @Ehsan1579

Compilation | Odaily Planet Daily (@OdailyChina); Translator | Ethan (@ethanzhang_web3

Dari judul kejadian saja, kemungkinan besar akan salah mengira ini adalah serangan eksploitasi kerentanan.

Inti peristiwa ini adalah: seseorang menukar USDT senilai $50,4 juta, tetapi hanya menerima AAVE senilai $35.900.

Saat pertama kali mendengar hal ini, saya benar-benar terkejut. Oleh karena itu, saya memeriksa seluruh peristiwa ini secara menyeluruh: pelacakan transaksi, jalur solver, pemanggilan kontrak, cadangan historis, data penyelesaian, proses adapter, kode antarmuka Aave, SDK CoW flash loan, serta kode routing yang menilai apakah penawaran tersebut "masuk akal".

Ini bukan serangan peretas. Protokol inti Aave tidak ada kesalahan. Penyelesaian CoW tidak ada kesalahan. Uniswap tidak ada kesalahan. SushiSwap tidak ada kesalahan. Transaksi sah, tanda tangan sah, dan semua kontrak dieksekusi tepat sesuai kode. Namun, hampir seluruh nilai ekonomi hancur hanya karena rute yang diizinkan sangat absurd.

Blockchain utama tidak bermasalah, yang bermasalah adalah routing.

Menurut saya, meredakan insiden ini sebagai sekadar "kesalahan operasi pengguna" bukanlah sikap yang objektif dan ketat. Memang, pengguna telah menandatangani pesanan, tetapi seluruh sistem perangkat lunak memungkinkan operasi pergantian jaminan senilai hampir 50 juta dolar AS untuk menyelesaikan proses penawaran, penandatanganan, perencanaan rute, hingga eksekusi akhir, dengan seluruh langkah mengarah ke kolam likuiditas rendah yang hanya memiliki sekitar 331 AAVE. Ini seharusnya sama sekali tidak mungkin terjadi, dan setidaknya seharusnya sudah diblokir secara keras oleh sistem sebelum tahap penyelesaian dimulai.

Pelacakan informasi inti perdagangan

Hash transaksi anomali ini adalah: 0x9fa9feab3c1989a33424728c23e6de07a40a26a98ff7ff5139f3492ce430801f, dikonfirmasi pada blok tinggi 24643151 di Ethereum mainnet pada 12 Maret 2026, dengan indeks transaksi 1, mengonsumsi 3780570 unit Gas, dan eksekusi transaksi berhasil. Alamat dompet yang menjadi milik pesanan dimulai dengan 0x98b9, sedangkan alamat solver (pengirim transaksi) yang sebenarnya melakukan transaksi dimulai dengan 0x3980, dan ditandai sebagai tsolver dalam data CoW Competition.

Pertama-tama, perlu dipahami bahwa ini bukan sekadar pertukaran USDT ke AAVE pada level dompet. Token yang dijual adalah aEthUSDT, yaitu bukti simpanan USDT yang menghasilkan bunga di platform Aave. Token yang dibeli adalah aEthAAVE, yaitu bukti simpanan AAVE yang menghasilkan bunga di platform Aave. Jadi, ini sebenarnya adalah pergantian jaminan Aave melalui sistem penyelesaian CoW Protocol dan proses adaptor flash loan-nya.

Sebelum perdagangan, dompet tersebut memegang sekitar 50.432.693,075254 aEthUSDT dan 0 aEthAAVE. Setelah perdagangan, hanya tersisa 4,980399 aEthUSDT, dan menerima 327,241335505966487788 aEthAAVE. Sebenarnya, dompet tersebut menjual hampir seluruh posisinya.

Metadata yang lebih jelas menunjukkan bahwa rute tersebut sudah “beracun” sebelum dieksekusi. Pesanan berasal dari proses aave-v3-interface-collateral-swap. API CoW menampilkan nya sebagai pesanan jual yang ditandatangani, sementara metadata aplikasi menandainya sebagai pertukaran jaminan gaya pasar dengan smart slippage 121 basis poin. Jumlah jual yang ditandatangani adalah 50.432.688,41618 aEthUSDT. Jumlah beli minimum yang ditandatangani adalah 324,949260918413591035 aEthAAVE. Pembayaran yang sebenarnya diselesaikan adalah 327,241335505966487788 aEthAAVE.

Ini adalah detail yang sangat penting. Pesanan ini sama sekali tidak bertujuan untuk mendapatkan ribuan AAVE, lalu tiba-tiba dihancurkan di tengah jalan. Ini dirancang sejak awal untuk menghasilkan sekitar tiga ratus lebih AAVE.

Rantai lengkap kegagalan routing

Setelah kamu mengikuti jejak perdagangan, seluruh prosesnya menjadi sangat lurus dan jelas.

Transaksi dana tingkat atas secara utama bergantung pada kontrak penyelesaian GPv2Settlement yang dimulai dengan 0x9008. Pertama, kontrak HooksTrampoline yang dimulai dengan 0x60bf menyelesaikan otorisasi aEthUSDT, memungkinkan relayer CoW Vault untuk menarik aset pengguna tanpa otorisasi transaksi terpisah; selanjutnya, kontrak GPv2VaultRelayer yang dimulai dengan 0xc92e menarik 50432688.41618 aEthUSDT dari dompet pengguna ke dalam proses penyelesaian, hingga tahap ini, semua operasi sesuai dengan logika normal.

Kontrak penyelesaian selanjutnya memberikan otorisasi operasi aEthUSDT kepada kontrak bantuan tidak bersumber yang dimulai dengan 0xd524, dan memicu panggilan melalui fungsi selector 0x494b3137; kontrak bantuan ini kemudian menyerahkan otorisasi eksekusi ke kontrak eksekutor tidak bersumber yang dimulai dengan 0x699c, sehingga seluruh gambaran rute transaksi异常 terungkap sepenuhnya.

Panggilan pertama yang valid menunjuk ke kontrak kolam dana Aave yang dimulai dengan 0x87870, yang menghancurkan aEthUSDT melalui fungsi withdraw (selector 0x69328dec) untuk menebus USDT asli yang mendasarinya; kemudian rute dialihkan ke kolam perdagangan Uniswap V3 mendalam USDT/WETH yang dimulai dengan 0x4e68, menukar seluruh 50432688.41618 USDT menjadi 17957.810805702142342238 WETH.

Transaksi pada tahap ini berjalan normal: nilai tukar sekitar 2808,4 USDT untuk 1 WETH, sesuai dengan kondisi pasar saat itu, tidak ada masalah likuiditas, tidak ada kesalahan perhitungan, dan tidak ada kelainan pada jalur transaksi pertama.

Masalahnya ada pada lompatan kedua, begitu Anda melihat cadangan likuiditas, sisa ceritanya tak terhindarkan.

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

Saya memeriksa data cadangan likuiditas historis dari kolam perdagangan pada saat tepat sebelum transaksi anomali terjadi (tingkat blok 24643150), kolam tersebut hanya memegang:

331.631982538108027323 lembar AAVE, 17.653276196397688066 lembar WETH

Ini bukan kesalahan input data, melainkan fakta yang tak terbantahkan.

Rute perdagangan ini memasukkan hampir 17.958 WETH ke dalam kolam perdagangan mikro yang hanya memiliki cadangan WETH sebesar 17,65 WETH dan total cadangan AAVE sebesar 331,63 WETH, dengan jumlah WETH yang dimasukkan sekitar 1.017 kali lebih besar dari cadangan WETH di dalam kolam.

Ini bukan masalah umum seperti "slippage tinggi" atau "likuiditas sedikit", melainkan jalur eksekusi pesan pasar yang sangat absurd, setara dengan memaksa kolam AMM produk konstan dengan volume sangat kecil untuk menerima transaksi besar yang ribuan kali lebih besar dari kapasitasnya.

AMM trading pool telah menjalankan operasi sesuai algoritma yang ditetapkan, hampir menghabiskan seluruh cadangan AAVE dalam pool.

SushiSwap trading pair memicu peristiwa pertukaran Swap inti: executor mentransfer 17957.810805702142342238 WETH, hanya mendapatkan kembali 331.305315608938235428 AAVE. Setelah transaksi selesai, likuiditas tersisa di kolam ini sekitar:

0.326666929169791895 lembar AAVE, 17975.464081898540030304 lembar WETH

Secara sederhana, sekitar 99,9% cadangan AAVE di dalam kolam diekstraksi dalam satu lompatan.

Berdasarkan cadangan sebelum perdagangan, harga AAVE yang tersirat dalam kolam sekitar 149,50 dolar AS. Harga eksekusi aktual pengguna sekitar 154.114,66 USDT untuk 1 AAVE. Ini lebih dari 1.000 kali selisih dari harga spot sebelum perdagangan.

Selanjutnya, AAVE ini disuplai kembali ke kolam Aave menggunakan selector 0x617ba037, yaitu supply(address,uint256,address,uint16). Hasilnya, aEthAAVE yang baru dicetak dikirim kembali ke kontrak penyelesaian. Kontrak penyelesaian akhirnya mentransfer 327.241335505966487788 aEthAAVE ke pengguna. Sekitar 4.06398010297174764 aEthAAVE tetap berada di kontrak penyelesaian sebagai kelebihan dibandingkan yang dibayarkan oleh pengguna.

Jadi, penyelesaian tidak secara tiba-tiba memutarbalikkan hasil eksekusi yang baik menjadi hasil yang buruk. Ia hanya secara resmi menetapkan hasil yang telah dihasilkan oleh rute sebelumnya.

Ini adalah poin penting yang patut dinyatakan secara jelas: hasil bencana sudah “ditetapkan” di dalamnya sebelum rute dieksekusi.

Dalam data panggilan kontrak bantu yang tertanam dalam rute, jumlah target sisi pembelian sekitar 331.272185078031026739, jumlah minimum pembelian yang disepakati oleh pengguna adalah 324.949260918413591035, dan jumlah penyelesaian aktual adalah 327.241335505966487788, semua nilai inti dikunci pada tingkat ratusan AAVE sebelum penyelesaian.

This route was bad from birth.

Di mana kerentanannya?

Jawabannya adalah: Setiap mekanisme verifikasi sistem memeriksa dimensi kesalahan.

Semua tingkatan hanya memeriksa apakah transaksi dapat dieksekusi, apakah tanda tangan valid, dan apakah jumlahnya bukan nol, tetapi hampir tidak ada pemeriksaan tingkat inti terhadap kelayakan ekonomi rute transaksi, yang merupakan akar utama kegagalan mekanisme.

Kekurangan kode pada jalur penawaran adaptor antarmuka Aave

Titik anomali kode pertama yang jelas muncul dalam proses penawaran CoW adapter antarmuka Aave: fungsi yang sebelumnya digunakan untuk menyertakan data aplikasi khusus adapter saat meminta penawaran, dinonaktifkan secara paksa.

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

Ini berarti antarmuka Aave tidak menyertakan metadata flash loan dan hook yang akan dilampirkan saat pesanan benar-benar diterbitkan saat meminta penawaran dari CoW. Dengan kata lain, hal yang ditawarkan tidak sepenuhnya sama dengan hal yang akan dieksekusi. Komentar kode bahkan menyatakan bahwa tujuan fungsi pembantu ini adalah untuk membuat penawaran adapter lebih akurat, namun fungsi ini justru dinonaktifkan secara paksa.

Penilaian kepatuhan logika persaingan penawaran CoW terlalu lemah (celah utama)

Masalah kedua dan paling serius terletak pada logika persaingan penawaran protokol CoW: dalam kode layanan publiknya, setiap penawaran dengan biaya Gas positif dan jumlah keluaran bukan nol akan dianggap sebagai "penawaran yang valid".

Sumber: quote.rs:31

Ini adalah definisi "validitas" yang sangat lemah untuk sistem routing yang menangani pesanan delapan digit.

Sistem tidak terintegrasi dengan oracle untuk verifikasi kesehatan harga, tidak memiliki mekanisme blokir untuk “penyimpangan penawaran lebih dari 500 kali harga spot”, tidak memiliki penilaian risiko untuk “rute yang benar-benar menguras likuiditas pool”, dan tidak ada peringatan untuk “likuiditas langkah terakhir yang tidak seimbang dengan ukuran pesanan”; sistem hanya memerlukan solver untuk mengembalikan rute yang dapat dieksekusi dan non-nol, dan rute tersebut akan diterima oleh sistem—ini adalah celah utama dalam insiden ini.

Defek dalam logika pemodelan likuiditas Uniswap V2

Masalah ketiga terletak pada pendekatan pemodelan kolam likuiditas gaya Uniswap V2: kode hanya menggunakan algoritma produk konstan standar, hanya menolak kemungkinan matematis seperti cadangan nol, underflow numerik, dan overflow cadangan, tanpa melakukan verifikasi kelayakan ekonomi.

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

Kode ini tidak memeriksa apakah volume kolam likuiditas cukup untuk menampung transaksi rute yang sesuai, hanya memeriksa apakah operasi pertukaran secara matematis valid. Oleh karena itu, bahkan kolam mikro dengan cadangan hanya 331 AAVE pun akan dianggap sebagai tempat yang valid untuk menerima permintaan pembelian 17957 WETH, hanya karena algoritma produk konstan dapat menghasilkan nilai bukan nol, namun sama sekali mengabaikan bahwa hasil ini akan menyebabkan kerugian aset yang dahsyat.

Kegagalan kedua pada SDK pinjaman kilat dan mekanisme verifikasi pesanan

Selanjutnya, SDK flash loan secara langsung mengikat penawaran yang telah kedaluwarsa tersebut ke dalam beban eksekusi pesanan dan hook, tanpa melakukan intersepsi risiko sekunder apa pun.

Next:

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

Inilah mengapa saya selalu mengatakan rute ini adalah “cacat sejak lahir”. Lapisan adapter tidak “menemukan” jumlah buruk baru saat runtime. Ia telah menserialisasi urutan jumlah buruk yang diquoting ke dalam data hook dan alamat instance yang ditentukan. Begitu penawaran buruk ada, mekanisme lainnya akan dengan setia meneruskannya.

Logika verifikasi pesanan CoW pun tidak benar-benar melindungi pengguna di sini, karena ia hanya memeriksa apakah pesanan melebihi harga pasar pada saat penawaran, bukan memeriksa apakah penawaran itu sendiri tidak masuk akal dibandingkan likuiditas aktual.

Sumber: order_validation.rs:694

Ini adalah pemeriksaan konsistensi. Jika penawaran itu sendiri sudah tidak masuk akal, pesanan tetap dapat diproses.

Mekanisme peringatan antarmuka pengguna bersifat tidak berarti

Antarmuka Aave memang memiliki peringatan dampak harga tinggi, tetapi bukan merupakan tombol pemutus otomatis. Ketika kerugian nilai melebihi 20%, ia berubah menjadi kotak centang konfirmasi.

Setelah pengguna mencentang kotak centang, hambatan telah dihapus:

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

Oleh karena itu, meskipun transaksi ini hampir mengosongkan seluruh nilai aset, sistem hanya menganggapnya sebagai operasi yang memerlukan konfirmasi pengguna, bukan transaksi berisiko tinggi yang harus ditolak secara paksa oleh sistem, sehingga mekanisme peringatan sama sekali kehilangan fungsinya dalam mencegah risiko.

Berdasarkan semua mekanisme di atas yang gagal, saya sama sekali tidak setuju dengan kesimpulan dangkal bahwa “ini hanya kesalahan pengguna.” Pengguna memang telah menandatangani, tetapi seluruh sistem perangkat lunak memiliki berbagai kesempatan untuk menghentikan bencana ini, namun setiap lapisan hanya melakukan pemeriksaan dasar, memutuskan “bukan nol, dapat dieksekusi, telah ditandatangani,” lalu langsung melepaskannya, sehingga akhirnya menimbulkan konsekuensi buruk.

Routing has not been tampered with

Bagian ini sangat penting dan secara langsung menghilangkan banyak tebakan salah: proses antarmuka resmi Aave untuk aave-v3-interface-collateral-swap menghitung jumlah pembelian yang disesuaikan dengan slippage di baris 139 file useSwapOrderAmounts.ts, dengan menggabungkan penawaran, biaya jaringan, biaya mitra, dan biaya flash loan; di baris 331 mengubahnya menjadi nilai buyAmountBigInt; kemudian di baris 191 file CollateralSwapActionsViaCoWAdapters.tsx, jumlah tersebut ditandatangani secara akurat.

Kontrak adapter selanjutnya akan memverifikasi bahwa bidang tanda tangan pesanan cocok sepenuhnya dengan nilai yang disimpan di baris 141 file AaveV3BaseAdapter.sol; Kontrak penyelesaian CoW akan menegakkan aturan batas yang ditentukan dalam tanda tangan di baris 337 file GPv2Settlement.sol. Oleh karena itu, hasil eksekusi on-chain tidak melebihi batas yang diizinkan oleh pesanan yang ditandatangani, dan aset yang sebenarnya diterima pengguna bahkan lebih tinggi daripada batas minimum yang disepakati dalam tanda tangan.

Ini cukup membuktikan: bencana terjadi sebelum tahap penyelesaian, bukan selama proses penyelesaian, kelemahan mendasar pada rute sudah menentukan nasibnya.

Ke mana perginya nilai yang hilang?

Transaksi berikutnya dalam blok yang sama (berawalan hash 0x45388b0f) melakukan arbitrase run pada kolam SushiSwap AAVE/WETH yang rusak. Transaksi anomali ini mengisi kolam dengan jumlah WETH yang sangat besar, menguras sebagian besar AAVE, lalu arbitrageur segera menjual kembali AAVE ke kolam tersebut untuk menangkap nilai berlebih dari ketidakseimbangan likuiditas.

Dalam arbitrase backrun ini, sebanyak sekitar 17929.770158685933 WETH diekstraksi, kemudian dibayarkan sekitar 13087.73 ETH kepada pembangun blok ini dan sekitar 4824.31 ETH kepada alamat eksekusi arbitrase.

Seluruh nilai ekonomi yang hilang oleh pengguna secara hampir instan berubah menjadi keuntungan MEV arbitrase dan pendapatan pembangun blok dalam blok yang sama.

Selain itu, pemeriksaan urutan waktu tingkat blok memastikan: sebelum transaksi ini, tidak ada pihak yang secara jahat memanipulasi kolam SushiSwap untuk menjebak pengguna; pasangan AAVE/WETH ini pertama kali disentuh dalam transaksi anomali ini (indeks transaksi 1); transaksi berikutnya (indeks transaksi 2) langsung memanfaatkan distorsi harga yang diakibatkan oleh transaksi ini untuk melakukan arbitrase pertama; transaksi indeks 3 juga menyentuh pasangan ini selama proses pemulihan pasar. Garis waktu jelas membuktikan: transaksi anomali ini menciptakan harga yang sangat terdistorsi, dan transaksi selanjutnya secara langsung memanen keuntungan dari distorsi tersebut.

Lalu, siapa yang salah?

Jika Anda bertanya apakah protokol inti Aave V3 gagal, jawabannya tidak. Kolom Aave beroperasi sesuai perintah dan menyelesaikan proses penebusan USDT serta penyetoran AAVE secara normal.

Jika Anda bertanya apakah kontrak GPv2Settlement CoW gagal, jawabannya tidak. Penyelesaian berhasil mengeksekusi pesanan dengan tanda tangan yang valid dan membayar jumlah yang melebihi batas minimum yang ditandatangani.

Jika Anda bertanya apakah kontrak pasangan perdagangan Uniswap V3 atau SushiSwap gagal, jawabannya tetap tidak. Kedua kolam perdagangan tersebut menyelesaikan penetapan harga transaksi sesuai aturan algoritma masing-masing.

Kegagalan sistemik sejati terjadi pada lapisan routing dan pengendalian risiko yang lebih tinggi:

Pihak utama yang bertanggung jawab adalah modul routing, penawaran, dan solver dari protokol CoW: sistem keseluruhan memiliki kriteria terlalu lemah untuk menilai "routing yang wajar", memungkinkan pesanan besar bernilai jutaan dolar untuk berakhir di likuiditas mikro yang sangat rendah, selama routing dapat dieksekusi dan bukan nol, tanpa mempertimbangkan ketidakwajaran ekonomi yang ekstrem.

Pihak tanggung jawab sekunder adalah antarmuka depan Aave: saat meminta penawaran adaptor permintaan, data aplikasi yang terkait dengan hook tidak disertakan, hasil kesalahan langsung dimasukkan ke dalam proses tanda tangan, dan hanya mengandalkan peringatan peringatan tanpa mekanisme penolakan wajib; untuk transaksi berukuran ekstrem besar seperti ini, langkah pengendalian risiko semacam ini sama sekali tidak cukup untuk mencegah risiko.

Ini adalah kegagalan ekstrem dalam kualitas routing transaksi dan perlindungan risiko, yang secara langsung mengubah operasi pergantian jaminan yang sah dan sesuai peraturan menjadi peristiwa kerugian aset yang menghancurkan.

Penafian: Informasi pada halaman ini mungkin telah diperoleh dari pihak ketiga dan tidak mencerminkan pandangan atau opini KuCoin. Konten ini disediakan hanya untuk tujuan informasi umum, tanpa representasi atau jaminan apa pun, dan tidak dapat ditafsirkan sebagai saran keuangan atau investasi. KuCoin tidak bertanggung jawab terhadap segala kesalahan atau kelalaian, atau hasil apa pun yang keluar dari penggunaan informasi ini. Berinvestasi di aset digital dapat berisiko. Harap mengevaluasi risiko produk dan toleransi risiko Anda secara cermat berdasarkan situasi keuangan Anda sendiri. Untuk informasi lebih lanjut, silakan lihat Ketentuan Penggunaan dan Pengungkapan Risiko.