Serangan ulang setelah Ethereum merger: Analisi dari serangan jembatan salib Omni

Deskripsi Peristiwa

Pada 18 September 2022,Setelah konsolidasi Ethereum, rantai PoW diserang dengan membalas kembali transaksi di rantai PoS. penyebab akarnya adalah bahwa jembatan tidak benar membaca dan verifikasi id rantai blockchain.Penyerang pertama-tama memindahkan 200 WETH melalui jembatan salib Omni dari rantai Gnosis, dan kemudian memutar kembali pesan yang sama di rantai PoW untuk mendapatkan tambahan 200 ETHW.

Tim Hiu melakukan analisis teknis peristiwa ini dan mempersingkatkan tindakan pencegahan keamanan berharap proyek-proyek berikutnya dapat belajar dari hal ini dan membangun garis pertahanan keamanan di industri blockchain.

2[UNK] Analisi peristiwa

Peristiwa ini melibatkan transaksi hash dan alamat penyerang dari dua rantai yang berbeda, seperti berikut:

(1) Hash transaksi rantai PoS: 0xbddb0cc8bc9949321e1748f03503ed1a20dd618fbf0a51dc5734c975b1f8bdf5

(2) Hash transaksi rantai PoW: 0x9c072551861ce384203516f4d705176a2d2e262d5b571d853467425f1a861fb4

(3) Alamat penyerang: 0x82FaEd2dA812D2E5CCed3C12b3baeB1a522DC677

Pertama, kami menemukan bahwa kontrak yang diakses oleh dua transaksi adalah sama, dan data input adalah identik, yaitu, fungsi yang sama dari kontrak yang sama disebut dengan parameter yang sama, dan ID ditandatangani menurut metode yang sama  0x23caab49 Bisa dilihat bahwa hacker memanggil fungsi safeExecuteSignaturesWithAutoGasLimit.

Oleh karena itu, penyerang memindahkan 200WETH melalui jembatan Omni, dan kemudian mempermainkan kembali Inputdata yang sama di rantai PoW untuk mendapatkan tambahan 200 ETHW.

Saat ini, kita skeptis tentang operasi playback di sini. Because the Ethereum network enforces EIP-155 before hard branching, which means that transactions on the ETH PoS chain cannot be repeated on the PoW chain. Dalam transaksi normal, kita menggunakan nonce untuk mengurus transaksi untuk menghindari transaksi berulang kali. Dalam rantai salib, kita akan mengidentifikasi tipe rantai menurut chianid misalnya, rantai utama Ethereum adalah 1, dan rantai utama ETHW adalah 10001.

Untuk ini, kami menganalisis kode sumber yang cocok dari jembatan Omni. Mari kita lihat logika Jembatan Omni untuk memverifikasi rantai. ditemukan bahwa rantai berasal dari nilai yang disimpan di unit Storage, bukan rantai yang dibaca langsung melalui kode operasi CHAINID (0x46).

UnitStorage adalah variabel negara dalam kontrak EternalStorage. Kontrak BasicAMB di mana fungsi sourceChainId () ditempatkan mewarisi BasicBridge dan VersionableAMB. Di antara mereka, BasicBridge telah successively mewarisi kontrak Eternal Storage. Rantai yang disimpan di sini disimpan secara awal. Jika rantai tidak ditetapkan kembali atau rantai ditetapkan dengan salah karena cabang keras dari rantai blok, rantai sebenarnya pesan rantai salib tidak akan ditetapkan dengan benar dari tingkat kontrak karena rantai tidak diperoleh melalui opcode. Kerentanan seperti itu mudah untuk dieksploitasi oleh penyerang.

Analisis dan ringkasan masalah: terutama karena versi kesiapan yang digunakan oleh Omni adalah 0.4.24, rantai disimpan dan diperbarui secara manual, dan rantai sebenarnya tidak diperoleh melalui kode operasi CHAINID (0x46) yang dinyatakan di EIP-1344.

3[UNK] saran keselamatan

Alasan insiden keamanan ini adalah bahwa Jembatan Omni gagal berurusan dengan rantai pada waktu selama proses peningkatan PoW. Sebagai hasilnya, ada masalah yang tersisa dari sejarah dalam versi kekerasan lama. It is suggested that in the subsequent project iterations, new problems should be solved in time and necessary code optimization measures should be taken. Meskipun Jembatan Omni di rantai Gnosis memiliki batas maksimum sehari-hari 250 WETHs untuk memindahkan token, kita masih perlu waspada untuk mencegah lebih banyak kerugian disebabkan akumulasi token kecil.