Selamat datang kembali di Sorotan Kerentanan Sherlock, di mana kami menyoroti kerentanan berdampak yang terungkap selama audit Sherlock. Minggu ini, kami memiliki Deposit Spoofing. Itu ditemukan oleh @0xalpharush & @bernd_eth di @zetablockchain Cross-Chain Contest. 🧵
Berikut adalah ringkasan kerentanan @bernd_eth: 1. Pengamat ZetaChain memantau transaksi di rantai eksternal (misalnya, Ethereum, Solana) dan menambahkannya ke pelacak masuk terpusat untuk memprosesnya sebagai setoran dan penarikan, dengan asumsi keberhasilan transaksi. 2. Tidak seperti integrasi EVM, implementasi Solana melewatkan pemeriksaan keberhasilan transaksi, memungkinkan pengamat jahat untuk menambahkan setoran yang gagal, mencetak ZRC20 SOL yang tidak didukung, dan menguras dana yang dijembatani. 3. Meskipun pengamat secara eksplisit diizinkan oleh ZetaChain, sangat penting untuk memastikan bahwa tidak ada satu pihak pun yang dapat membahayakan rantai atau menyedot aset.
Biasanya, pengamat tidak memproses transaksi yang gagal, tetapi jalur kode ini gagal melakukan validasi yang sama dengan rekan EVM-nya. Meskipun ini membutuhkan peran "istimewa", setiap validator adalah pengamat, dan konsensus BFT seharusnya toleran bizantium, yaitu, mentolerir <1/3 pihak jahat. Dengan demikian, satu pengamat jahat seharusnya tidak dapat memalsukan setoran dan membujuk validator yang jujur untuk memilih untuk mencetak ZRC20 Sol untuk transaksi yang gagal melalui pelacak masuk, yang tidak memiliki validasi untuk implementasi Solana-nya.
Akar penyebab kerentanan ini: Fungsi ProcessInboundEvents tidak mengharuskan transaksi berhasil, tidak seperti pengamat masuk EVM, yang melakukannya dengan benar di sini. Karena instruksi didekodekan seolah-olah berhasil, pengamat jahat dapat memalsukan deposit untuk seluruh saldo ZRC20-SOL dan kemudian menarik SOL yang terkunci di sisi Solana jembatan, mencuri semua lamport di jembatan. Serangan ini juga dapat digunakan untuk menarik token SPL atau melakukan setoran dan panggilan sewenang-wenang. Misalnya, menghapus properti yang dapat ditulis dari PDA gateway dalam instruksi setoran menghasilkan transaksi yang gagal (lihat kesalahan batasan jangkar di POC), dan masih dapat diproses setelah ditambahkan ke pelacak masuk melalui MsgAddInboundTracker.
Pra-kondisi internal: Pengamat yang jahat atau lalai menambahkan Solana tx yang gagal yang berisi instruksi Gateway ke pelacak masuk menggunakan MsgAddInboundTracker, sehingga semua validator memproses dan memberikan suara untuk mencetak ZRC20 Sol di Zetachain. CCTX menerima suara yang cukup, dan ZRC20 Sol yang tidak didukung di Zetachain dicetak.
Pra-kondisi eksternal: Setiap pihak mengirimkan transaksi yang gagal ke gateway dengan instruksi deposit (atau deposit dan panggilan). Penerima ZRC20 Sol di Zetachain menariknya dan menerima lamport di Solana.
Jalur Serangan: 1) Setiap pihak mengirimkan transaksi yang gagal ke gateway dengan instruksi setoran (atau setoran dan panggilan). 2) Pengamat yang jahat atau lalai menambahkan Solana tx yang gagal yang berisi instruksi Gateway ke pelacak masuk menggunakan MsgAddInboundTracker, yang mengakibatkan semua validator memproses dan memberikan suara untuk mencetak ZRC20 Sol di Zetachain. 3) Tugas ProcessInboundTrackers menyebabkan CCTX yang dipalsukan menerima suara yang cukup, dan ZRC20 Sol yang tidak didukung di Zetachain dicetak. 4) Penerima ZRC20 Sol di Zetachain menariknya dan menerima lamport di Solana.
Apa dampaknya? Semua token lamport dan SPL yang disimpan di jembatan Solana dapat dicuri, mengingat setoran dapat dipalsukan dengan jumlah berapa pun (mereka diproses meskipun program Gateway menyebabkan transaksi dikembalikan).
Mitigasi: Dalam pemrosesan pelacak masuk Solana Observer, periksa apakah transaksi berhasil sebelum memberikan suara.
Kami bangga telah membantu mengamankan @zetablockchain melalui penemuan ini. Ketika benar-benar perlu aman, Sherlock adalah pilihan yang tepat.
2,62K