OrionProtocol mengalami serangan reentrancy dengan kerugian 2,9 juta dolar AS. Analisis celah keamanan dan saran pencegahan.

robot
Pembuatan abstrak sedang berlangsung

Analisis Insiden Serangan Reentrancy di OrionProtocol

Pada 2 Februari 2023 sore, OrionProtocol di jaringan Ethereum dan Binance mengalami serangan reentrancy akibat kerentanan kontrak, dengan kerugian sekitar 2,9 juta dolar AS, termasuk 2.844.766 USDT di Ethereum dan 191.606 BUSD di BSC.

Analisis Proses Serangan

Penyerang pertama-tama membuat kontrak Token dan melakukan operasi transfer serta otorisasi, mempersiapkan serangan selanjutnya. Kemudian, penyerang meminjam melalui metode swap UNI-V2, dan memanggil metode swapThroughOrionPool dari kontrak ExchangeWithAtomic untuk menukar token. Jalur penukaran diatur menjadi [USDC, Token yang dibuat oleh penyerang, USDT].

Dalam proses penukaran, karena kontrak Token yang dibuat oleh penyerang memiliki fungsi callback, penyerang terus memanggil metode ExchangeWithAtomic.depositAsset melalui Token.Transfer, yang mengakibatkan serangan reentrancy. Hal ini menyebabkan jumlah deposit terus bertambah, dan akhirnya penyerang menyelesaikan keuntungannya melalui operasi penarikan.

Analisis Serangan Re-entrancy OrionProtocol dengan PoC

Aliran Dana

Modal awal penyerang berasal dari akun dompet panas di suatu platform perdagangan. Dari 1651 ETH yang diperoleh, 657,5 ETH masih tersisa di alamat dompet penyerang, sementara sisanya telah dipindahkan melalui layanan pencampuran.

Analisis serangan reentrancy OrionProtocol dengan PoC

Analisis Kerentanan

Masalah inti dari celah muncul dalam fungsi doSwapThroughOrionPool. Fungsi ini memperbarui variabel curBalance setelah melakukan transfer token, yang memberikan kesempatan bagi penyerang. Penyerang menambahkan fungsi callback dalam fungsi transfer dari token palsu, yang memanggil fungsi depositAsset, menyebabkan pembaruan curBalance yang salah. Akhirnya, setelah melunasi pinjaman kilat, penyerang menarik dana berlebih melalui fungsi withdraw.

Analisis Serangan Reentrancy OrionProtocol dengan PoC

Analisis Serangan Re-Entry OrionProtocol dengan PoC

Analisis serangan Reentrancy OrionProtocol dengan PoC

Analisis Serangan Re-Entry OrionProtocol dengan PoC

Reproduksi Serangan

Peneliti menyediakan sebagian kode POC yang mensimulasikan proses serangan. Hasil pengujian menunjukkan bahwa penyerang berhasil memanfaatkan celah kontrak untuk mendapatkan USDT tambahan.

Analisis Serangan Re-Entrancy OrionProtocol dengan PoC

Analisis serangan reentrancy OrionProtocol dengan PoC

Analisis Serangan Reentrancy OrionProtocol dengan PoC

Analisis serangan reentrancy OrionProtocol dengan PoC

Analisis serangan reentrancy OrionProtocol dengan PoC

Saran Keamanan

Untuk proyek yang memiliki fungsi pertukaran token, perlu mempertimbangkan berbagai risiko keamanan yang mungkin timbul dari berbagai Token dan jalur pertukaran. Disarankan untuk mengikuti norma pengkodean "periksa terlebih dahulu, kemudian tulis ke variabel, kemudian lakukan panggilan eksternal" (model Checks-Effects-Interactions) untuk meningkatkan keamanan dan stabilitas kontrak. Selain itu, pihak proyek harus berusaha untuk menghilangkan risiko kontrak secara off-chain sebanyak mungkin untuk memastikan operasi yang aman dari ekosistem Web3.

Lihat Asli
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
  • Hadiah
  • 2
  • Bagikan
Komentar
0/400
HallucinationGrowervip
· 07-12 12:30
Apa saja yang telah dilakukan tanpa pekerjaan pemeriksaan keamanan?
Lihat AsliBalas0
degenonymousvip
· 07-12 12:23
Kontrak umumnya memiliki banyak celah.
Lihat AsliBalas0
  • Sematkan
Perdagangkan Kripto Di Mana Saja Kapan Saja
qrCode
Pindai untuk mengunduh aplikasi Gate
Komunitas
Bahasa Indonesia
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)