Lompat ke konten

Proxy yang dapat di-upgrade belum diinisialisasi: risiko pengambilalihan initializer

Proxy yang dapat di-upgrade menginisialisasi penyimpanannya melalui pemanggilan initializer, bukan konstruktor implementasi. Artikel ini menjelaskan front-running, penguncian implementasi, dan pemeriksaan deployment.

Diperbarui

Hanya untuk tujuan edukasi; bukan merupakan nasihat investasi atau rekomendasi investasi. Investasi dapat mengakibatkan kerugian.

Jawaban langsung

Kontrak yang dapat diupgrade tidak menggunakan konstruktor untuk mengatur status agen, namun bergantung pada penginisialisasi. Artikel ini menjelaskan agen yang tidak diinisialisasi, penguncian implementasi, dan pemeriksaan penerapan.

Ketika alamat proxy baru diterapkan tetapi transaksi inisialisasi belum dikonfirmasi, siapa pun dapat mencoba memanggil penginisialisasi publik terlebih dahulu dan menjadi Pemilik.

Ketika agen disebarkan, konstruktor tidak akan menjalankan logika inisialisasi kontrak di penyimpanan agen. Oleh karena itu, sistem yang dapat diupgrade sering kali menggunakan penginisialisasi yang hanya dapat dipanggil satu kali untuk mengatur pemilik, parameter token, dan modul. Jika fungsi tersebut tidak terlindungi dengan baik, atau jika penerapan dan inisialisasi dipecah menjadi dua transaksi, penyerang dapat memanggilnya terlebih dahulu.

Cara kerjanya

Proses keamanan menempatkan data panggilan penerapan dan inisialisasi dalam transaksi atom yang sama, dan menonaktifkan inisialisasi saat menerapkan konstruksi kontrak untuk mencegah pengambilalihan implementasi itu sendiri. Penginisialisasi ulang digunakan untuk menambahkan status baru ke versi baru, dan juga harus membatasi versi dan izin panggilan. Hanya memeriksa pemilik agen tanpa memeriksa status inisialisasi implementasi masih dapat membocorkan risiko.

Operasi on-chain dibagi menjadi empat lapisan: dompet bertanggung jawab atas tampilan dan tanda tangan, RPC bertanggung jawab untuk membaca dan menyiarkan, kode kontrak menentukan perubahan status, dan konsensus blok menentukan apakah transaksi akhirnya dikonfirmasi. Menampilkan “sukses” di tingkat mana pun tidak dapat menggantikan verifikasi di tingkat lainnya.

Contoh

Proyek ini menyebarkan agen terlebih dahulu dan berencana memanggil inisialisasi(tim) selanjutnya. Penyerang memonitor kumpulan memori dan pertama-tama memanggil inisialisasi (penyerang) dengan biaya lebih tinggi, menjadi administrator, dan kemudian meningkatkan ke implementasi berbahaya dan mentransfer dana. Transaksi inisialisasi tim dibatalkan, tetapi pada titik ini kendali hilang.

Gas, slippage dan waktu blok dalam case digunakan untuk mendemonstrasikan metode perhitungan. Sebelum pengoperasian sebenarnya, harga, likuiditas, izin, dan status kontrak dari rantai saat ini dan blok saat ini harus dibaca. Jumlah tersebut secara bersamaan mencatat jumlah token, nilai dolar, dan bilangan bulat mentah pada rantai.

Resiko

Pengembalian harus dihitung berdasarkan nilai keluar sebenarnya:

Nilai keluar bersih = nilai pasar aset - guncangan harga - biaya protokol - pajak transfer - Gas - diskon risiko menunggu

Tetapkan tiga skenario stres kemacetan jaringan, pengecualian oracle, dan peningkatan administrator. Asumsikan Gas mengembang lima kali lipat, kedalaman kumpulan turun 50%, stablecoin didiskon sebesar 5%, dan Anda tidak dapat keluar selama satu hari. Jika pendapatan satu bulan tidak mampu menutupi tekanan gesekan, pendapatan yang tinggi tidak memberikan kompensasi yang cukup.

Protokol tunggal, rantai tunggal, jembatan tunggal, dan mata uang stabil tunggal masing-masing menetapkan batas atas. Setiap posisi yang mengharuskan administrator, oracle, bridge, frontend, dan satu RPC menjadi normal pada saat yang sama untuk keluar harus dipersempit lebih lanjut, dan beberapa ketergantungan terkait tidak boleh disalahartikan sebagai dispersi.

Kesalahpahaman umum

  • Mitos 1: Keseimbangan front-end adalah fakta dalam rantai. Front end mungkin di-cache, terlambat diindeks, atau terhubung ke jaringan yang salah dan harus divalidasi silang dengan pembacaan kontrak.

  • Mitos 2: Peningkatan Gas atau Slippage dapat mengatasi kegagalan apa pun. Gas hanya mempengaruhi penyortiran, dan slippage hanya mengurangi harga; kesalahan izin, Nonce, dan kondisi kontrak tidak akan diperbaiki secara otomatis.

  • Mitos 3: Pengujian dalam jumlah kecil yang berhasil berarti keamanan permanen. Peningkatan administrator, parameter dinamis, dan perubahan likuiditas akan mengubah hasil dan harus ditinjau sebelum setiap perluasan posisi.

Topik terkait

Sumber

Navigasi

Cari di wiki...