Reentrancy Attack: Ketika Smart Contract Dipanggil Berulang Kali

Pendahuluan

Di antara berbagai jenis kerentanan smart contract, reentrancy attack menempati posisi khusus dalam sejarah blockchain — bukan hanya karena dampaknya yang besar, tetapi juga karena salah satu insidennya menjadi salah satu momen paling menentukan dalam sejarah Ethereum. Kerentanan ini terjadi ketika sebuah smart contract dapat “dipanggil kembali” secara berulang sebelum proses sebelumnya selesai diperbarui, membuka celah eksploitasi yang serius. Artikel ini membahas apa itu reentrancy attack, bagaimana mekanismenya, studi kasus bersejarah yang melibatkannya, hingga cara mencegahnya.

Apa Itu Reentrancy Attack?

Reentrancy attack adalah jenis serangan yang mengeksploitasi urutan eksekusi pada smart contract, di mana sebuah kontrak memanggil kontrak eksternal (misalnya untuk mengirim dana) sebelum kontrak tersebut selesai memperbarui status internalnya sendiri. Akibatnya, kontrak eksternal yang dipanggil dapat “memanggil balik” fungsi yang sama secara berulang sebelum status awal diperbarui, memungkinkan penarikan dana berkali-kali lebih banyak dari yang seharusnya.

Bagaimana Reentrancy Attack Bisa Terjadi

Pola “Check-Effects-Interactions” yang Terbalik

Praktik pemrograman yang aman umumnya mengikuti urutan: pertama memeriksa kondisi (check), kemudian memperbarui status internal (effects), dan baru setelah itu berinteraksi dengan kontrak eksternal (interactions). Reentrancy attack terjadi ketika urutan ini terbalik — kontrak berinteraksi dengan pihak eksternal terlebih dahulu sebelum memperbarui statusnya sendiri, sehingga membuka celah bagi pemanggilan berulang sebelum status diperbarui.

Peran Fungsi Fallback/Receive pada Kontrak Eksternal

Pada Ethereum dan blockchain sejenis, sebuah kontrak dapat memiliki fungsi khusus (fallback atau receive) yang otomatis terpanggil ketika menerima transfer dana. Pelaku reentrancy attack memanfaatkan fungsi ini untuk secara otomatis memanggil kembali fungsi penarikan dana pada kontrak korban, sebelum kontrak korban sempat memperbarui saldo internalnya.

Jenis-Jenis Reentrancy

Single-Function Reentrancy

Bentuk paling sederhana, di mana fungsi yang sama dipanggil berulang kali secara langsung sebelum statusnya diperbarui.

Cross-Function Reentrancy

Terjadi ketika pemanggilan berulang tidak menargetkan fungsi yang sama persis, melainkan fungsi lain dalam kontrak yang sama yang turut memanfaatkan status yang belum diperbarui.

Cross-Contract Reentrancy

Eksploitasi yang melibatkan interaksi antara beberapa smart contract berbeda, di mana status yang belum diperbarui pada satu kontrak dieksploitasi melalui kontrak lain yang saling terhubung.

Read-Only Reentrancy

Bentuk yang lebih baru dan lebih halus, di mana pelaku tidak secara langsung mencuri dana dari kontrak yang rentan, melainkan mengeksploitasi kontrak lain yang membaca data (state) dari kontrak tersebut selagi berada dalam kondisi sementara yang belum konsisten.

Studi Kasus Bersejarah: The DAO Hack

Salah satu insiden reentrancy attack paling terkenal dalam sejarah blockchain terjadi pada 2016, ketika “The DAO” — salah satu proyek crowdfunding terdesentralisasi terbesar pada masanya di jaringan Ethereum — mengalami eksploitasi reentrancy yang menyebabkan penarikan dana dalam jumlah sangat besar. Insiden ini berdampak begitu signifikan hingga akhirnya mendorong komunitas Ethereum melakukan hard fork, memisahkan jaringan menjadi Ethereum (ETH) yang kita kenal sekarang dan Ethereum Classic (ETC) yang mempertahankan riwayat transaksi asli tanpa pembalikan. Kasus ini menjadi pengingat abadi akan pentingnya keamanan smart contract sejak masa-masa awal ekosistem blockchain.

Mengapa Reentrancy Masih Relevan Meski Sudah Lama Dikenal

Meski telah dikenal luas sejak insiden The DAO, reentrancy attack masih terus muncul dalam berbagai bentuk baru — seperti cross-contract dan read-only reentrancy — seiring semakin kompleksnya interaksi antar-protokol dalam ekosistem DeFi modern. Kompleksitas composability, di mana satu protokol sering berinteraksi dengan banyak protokol lain, menciptakan permukaan serangan yang lebih luas dan sulit diprediksi sepenuhnya, bahkan oleh pengembang yang telah memahami risiko reentrancy klasik.

Dampak Reentrancy Attack bagi Protokol dan Ekosistem DeFi

  • Kerugian finansial langsung yang bisa sangat besar, tergantung pada jumlah dana yang dikelola kontrak yang rentan
  • Kerusakan kepercayaan jangka panjang, terutama jika insiden terjadi pada protokol besar dengan reputasi yang telah lama dibangun
  • Dampak sistemik, terutama pada kasus cross-contract reentrancy yang dapat memengaruhi beberapa protokol terhubung sekaligus
  • Preseden historis, seperti insiden The DAO, yang bahkan dapat memengaruhi arah pengembangan jaringan blockchain secara keseluruhan

Cara Mencegah Reentrancy Attack

Pola Checks-Effects-Interactions

Menerapkan urutan penulisan kode yang benar — memeriksa kondisi terlebih dahulu, memperbarui status internal, baru kemudian berinteraksi dengan kontrak eksternal — sebagai prinsip dasar dalam mencegah reentrancy.

Reentrancy Guard/Mutex

Menerapkan mekanisme penguncian (lock) pada fungsi tertentu, yang mencegah fungsi tersebut dipanggil kembali sebelum eksekusi sebelumnya benar-benar selesai, sehingga menutup celah pemanggilan berulang.

Penggunaan Library Teruji

Memanfaatkan library keamanan yang telah teruji secara luas oleh komunitas pengembang, yang umumnya telah menyediakan implementasi standar untuk mencegah reentrancy, alih-alih membangun mekanisme keamanan kustom dari awal.

Audit dan Pengujian Menyeluruh

Melibatkan audit keamanan independen yang secara khusus memeriksa potensi celah reentrancy, termasuk bentuk-bentuk yang lebih kompleks seperti cross-contract dan read-only reentrancy, sebelum protokol diluncurkan ke publik.

Kesimpulan

Reentrancy attack menjadi salah satu pelajaran paling penting dalam sejarah keamanan smart contract, menunjukkan bagaimana kesalahan sederhana dalam urutan eksekusi kode dapat berujung pada kerugian finansial yang sangat besar, bahkan memengaruhi arah pengembangan seluruh jaringan blockchain seperti yang terjadi pada kasus The DAO. Meski telah dikenal luas selama bertahun-tahun, kerentanan ini terus berevolusi dalam bentuk-bentuk baru seiring kompleksitas ekosistem DeFi yang terus berkembang, menjadikannya pengingat penting bahwa keamanan smart contract harus selalu menjadi prioritas utama, bukan sekadar formalitas, dalam setiap tahap pengembangan protokol DeFi.