Fase Aprikot 6: Penghentian Native Asset Call
Ringkasan
TL;DR: Dana tetap SAFU. Beberapa tim pengembang bekerja sepanjang waktu selama beberapa hari terakhir untuk mengatasi masalah potensial yang sekarang telah diperbaiki. Laporan ini menjelaskan apa yang terjadi.
Minggu lalu pada tanggal 4 September 2022, kami menerima laporan tentang masalah dari tim pengembang Abracadabra dan Sushi, yang, pada gilirannya, diberi tahu oleh kiriman anonim di Immunefi. Prakompilasi Native Asset Call, fitur khusus pada C-Chain yang digunakan untuk berinteraksi dengan Avalanche Native Tokens, dapat disalahgunakan untuk mengelabui kontrak tertentu yang melakukan panggilan yang dilindungi daftar hitam ke kontrak yang disediakan pengguna untuk memanggil target yang tidak diinginkan. Fitur ini tidak ada di subnet-evm dan Subnet tidak terpengaruh.
Kami sangat senang dan berterima kasih untuk melaporkan bahwa dengan bantuan dan kolaborasi komunitas semua dana aman, masalah yang dilaporkan belum dieksploitasi, kode telah ditambal, dan Avalanche tetap stabil. Karena sangat berhati-hati, tim Abracadabra dan Sushi untuk sementara mentransfer dana pengguna mereka dari kontrak yang terkena dampak untuk mengamankannya dan akan mengembalikannya kepada pengguna mereka. Anda dapat mengharapkan untuk mendengar lebih banyak detail dari tim mereka segera tentang bagaimana dana pengguna akan dikembalikan.
Ava Labs akan memberi penghargaan kepada Sushi dan Abracadabra atas pengungkapan tanggung jawab mereka dengan hadiah yang besar. Jika pengirim anonim di Immunefi memilih untuk maju, kami akan memberikan mereka juga untuk tip yang mengarah pada penemuan bug.
Masalah
Kontrak prakompilasi menyediakan cara standar untuk menambahkan fungsionalitas khusus ke dalam mesin virtual. Kontrak semacam itu dapat dipanggil secara langsung dengan menentukan alamat prakompilasi dan meneruskan input yang diinginkan. Fitur ini biasanya digunakan untuk mengimplementasikan fungsionalitas kriptografi yang akan sulit dan mahal untuk diterapkan di Solidity. Sebaliknya, perpustakaan umum dan teruji dapat digunakan secara langsung untuk melakukan operasi ini secara efisien.
Masalah dalam laporan ini berasal dari prakompilasi yang unik untuk Avalanche C-Chain: Native Asset Call. Prakompilasi ini digunakan untuk menawarkan fungsionalitas panggilan tingkat rendah yang sama untuk Token Native Avalanche seperti yang tersedia untuk penanganan AVAX.
EVM menyediakan opcode CALL, yang melakukan dua tindakan:
- Transfer koin native dari penelepon ke callee
- Jika yang dipanggil adalah kontrak (atau kontrak prakompilasi), aktifkan dengan data panggilan yang ditentukan
Native Asset Call ditambahkan untuk menyediakan fungsionalitas yang sama dengan pengecualian bahwa itu akan melakukan transfer Token Native Avalanche alih-alih koin native EVM. Dibutuhkan sebagai input argumen berikut:
- Alamat penerima
- AssetID dari Avalanche Native Token untuk ditransfer
- Jumlah Avalanche Native Token yang akan ditransfer
- Calldata untuk meneruskan panggilan ke alamat penerima
Native Asset Call melakukan dua langkah sederhana (mirip dengan opcode CALL tingkat rendah EVM):
- Transfer Token Native Avalanche ke alamat penerima
- Jika yang dipanggil adalah kontrak, aktifkan dengan calldata yang ditentukan
Penting untuk penerapan Native Asset Call adalah alamat yang digunakan sebagai konteks panggilan, saat Native Asset Call memanggil kontrak penerima.
Untuk menyediakan fungsionalitas yang sama dengan opcode CALL, Panggilan harus diperlakukan seolah-olah berasal dari pemanggil asli Native Asset Call sebagai lawan dari alamat Native Asset Call sendiri. Oleh karena itu, alamat pemanggil diatur ke alamat yang secara langsung memanggil Native Asset Call.
Ini membuat asumsi penting bahwa pemanggil telah secara eksplisit memilih untuk memanggil prakompilasi dan oleh karena itu harus aman untuk menyebarkan konteks pemanggil. Sementara asumsi ini berlaku untuk setiap pemanggilan di mana pemanggil secara eksplisit memutuskan alamat mana yang akan dipanggil, asumsi ini rusak dalam kasus kontrak yang memungkinkan pengguna untuk memberikan alamat panggilan balik dan tidak memfilter prakompilasi ini dari daftar hitam mereka.
Misalnya, ini memengaruhi kontrak Cauldron tim Abracadabra karena menyediakan fungsionalitas untuk melakukan panggilan tingkat rendah atas nama pengguna setelah memeriksa bahwa alamat penerima panggilan bukan alamat BentoBox atau alamat Cauldron:
Panggilan tingkat rendah ini, jika diarahkan ke Native Asset Call, menyebabkan potensi masalah karena penelepon berasumsi bahwa tidak ada panggilan yang akan mempertahankan konteks panggilan, membuat pemeriksaan validasi pada argumen input menjadi tidak efektif.
Terima kasih kepada pengembang Sushi dan Abracadabra atas kerja keras mereka untuk menyelidiki dan melaporkan masalah ini dan kepada pengirim anonim di Immunefi karena telah memberi tahu mereka.
Perbaikan
Segera setelah potensi masalah dilaporkan, pengembang platform Avalanche memeriksa klaim dan memverifikasi masalah tersebut. Tujuan utama pada titik ini adalah untuk melindungi setiap dan semua kontrak yang terpengaruh di Avalanche sesegera mungkin tanpa memberi tahu penyerang potensial tentang masalah tersebut.
Ava Labs segera merilis tambalan cepat yang melarang penerbitan pemblokiran di masa mendatang yang berisi interaksi dengan Native Asset Call sebagai tidak valid. Kami kemudian berkoordinasi dengan operator node di seluruh dunia untuk mendapatkan sebanyak mungkin saham pada versi ini. Berkat tindakan cepat dari operator node, sebagian besar saham ditingkatkan dalam beberapa jam dan mencegah siapa pun melakukan interaksi ini.
Rilis baru direncanakan untuk memberikan perbaikan yang lebih bersih dan elegan dengan menghentikan sama sekali Native Asset Calls. Namun, pemutakhiran ini diterapkan secara tidak benar dan gagal menghentikan Native Asset Calls, sementara itu menonaktifkan tambalan sebelumnya. Jika Anda melihat kemunculan kembali Native Asset Calls secara singkat setelah aktivasi Apricot Phase 6 (biasanya digunakan oleh bot peracikan otomatis), itulah alasannya. Tak satu pun dari transaksi ini mengandung exploit.
Untuk mengatasi kembali masalah ini, pengembang merilis tambalan terakhir untuk kembali menolak blok mendatang yang berisi interaksi dengan Native Asset Calls. Berkat tindakan cepat dari operator node, sebagian besar saham ditingkatkan dalam beberapa jam untuk mencegah siapa pun melakukan interaksi berbahaya ini.
Saat ini, tidak mungkin untuk berinteraksi dengan prakompilasi Panggilan Aset Asli di Fuji Testnet atau di Mainnet. Semua kontrak pada platform Avalanche yang terbuka untuk eksploitasi ini aman, tanpa perlu interaksi atau modifikasi yang diperlukan atas nama mereka. AvalancheGo@v1.9.0 akan sepenuhnya menghentikan prakompilasi ini dan memperkenalkan pengganti yang lebih aman untuk memulihkan fungsionalitas penuh untuk Token Native Avalanche di C-Chain.
Kesimpulan
Terima kasih banyak kepada tim Abracadabra dan Sushi dan kepada seluruh komunitas validator Avlanche yang telah memperbarui node mereka begitu cepat selama liburan akhir pekan untuk mencegah penyerang mengeksploitasi masalah ini. Tidak ada dana yang hilang dan hampir semua orang terus berinteraksi dengan Avalanche selama beberapa hari terakhir tanpa masalah.
Program pengungkapan yang bertanggung jawab adalah bagian penting untuk menjaga platform blockchain yang terus berkembang, seperti Avalanche, tetap aman dan kami berharap dapat terus mendukung peneliti keamanan melalui Program Bug Bounty kami.
Terjemahan dalam Bahasa Inggris
Penulis: Avalanche
Tentang Avalanche
Avalanche adalah platform kontrak pintar tercepat di industri blockchain saat ini, yang diukur dengan waktu hingga finalisasi per transaksi, dan memiliki validator yang paling banyak dalam mengamankan aktivitasnya dari protokol Proof of Stake apa pun yang ada. Avalanche sangat cepat, dengan biaya yang murah, dan ramah lingkungan. Setiap aplikasi kontrak pintar dapat mengungguli pesaingnya dengan menggunakan Avalanche. Tidak percaya? Coba Avalanche sekarang.
Website | Whitepapers | Twitter | Discord | GitHub | Documentation | Explorer | Avalanche-X | Telegram | Facebook | LinkedIn | Reddit | YouTube