Reentrancy Attack

Reentrancy attack mengeksploitasi kerentanan dalam kode smart contract di mana sebuah fungsi melakukan panggilan eksternal ke kontrak lain sebelum statusnya sendiri sepenuhnya diperbarui — memungkinkan kontrak yang dipanggil (yang dikendalikan penyerang) untuk “masuk kembali” ke fungsi asli dan mengulangi panggilan sebelum invokasi pertama selesai; serangan reentrancy paling terkenal adalah hack The DAO pada Juni 2016, yang menguras 3,6 juta ETH dan secara langsung memicu hard fork Ethereum.


Cara Kerja

Pola Rentan: Fungsi Withdraw

Pertimbangkan kontrak withdrawal yang rentan dan disederhanakan:

“`solidity

// RENTAN – JANGAN DIGUNAKAN

mapping(address => uint) public balances;

function withdraw(uint amount) public {

require(balances[msg.sender] >= amount);

// Langkah 1: Kirim ETH ke pemanggil

(bool sent, ) = msg.sender.call{value: amount}(“”);

require(sent);

// Langkah 2: Update saldo SETELAH mengirim (URUTAN SALAH)

balances[msg.sender] -= amount;

}

“`

Langkah Serangan:

  1. Penyerang deposit 1 ETH → balances[penyerang] = 1 ETH
  2. Penyerang memanggil withdraw(1 ETH)
  3. Kontrak memeriksa: balances[penyerang] >= 1 ETH
  4. Kontrak mengirim 1 ETH ke penyerang…
  5. Transfer ETH memicu fungsi receive() penyerang
  6. Fungsi receive() segera memanggil withdraw(1 ETH) lagi
  7. Kontrak memeriksa lagi: balances[penyerang] >= 1 ETHMASIH BENAR (Langkah 2 belum dieksekusi!)
  8. Kontrak mengirim 1 ETH lagi…
  9. Loop ini berlanjut sampai kontrak terkuras atau gas habis

Perbaikan — Pola Checks-Effects-Interactions:

Selalu perbarui status kontrak sebelum melakukan panggilan eksternal. Ini dinamakan pola CEI:

“`solidity

function withdraw(uint amount) public {

require(balances[msg.sender] >= amount);

balances[msg.sender] -= amount; // UPDATE DULU

(bool sent, ) = msg.sender.call{value: amount}(“”); // KEMUDIAN KIRIM

require(sent);

}

“`


Sejarah

  • Juni 2016 — Hack The DAO: penyerang menguras 3,6 juta ETH (~$60 juta) dari dana venture terbesar Ethereum melalui reentrancy.**
  • Juli 2016 — Hard fork Ethereum: komunitas memilih untuk mem-fork Ethereum untuk membalikkan hack; minoritas menolak, mempertahankan chain asli sebagai Ethereum Classic.**
  • 2020 — Serangan reentrancy Uniswap + Lendf.me: $25 juta diuras melalui varian reentrancy cross-function.**
  • 2023 — Curve Finance exploit: varian reentrancy di Vyper (kompiler bahasa smart contract) mempengaruhi beberapa pool Curve.**

Kesalahpahaman Umum

“Reentrancy hanya mempengaruhi kontrak lama yang buruk.”

Bahkan kontrak yang diaudit dapat memiliki kerentanan reentrancy dalam varian yang lebih canggih (cross-function reentrancy, read-only reentrancy). Serangan Curve Finance 2023 mengeksploitasi bug compiler di Vyper, bukan kode Solidity. Pola CEI dan ReentrancyGuard tetap penting untuk semua kontrak baru.

Kritik

  • Bug yang sudah diketahui sejak 2016 tapi masih terjadi: DAO hack 2016 adalah contoh reentrancy attack terbesar dan paling terkenal dalam sejarah kripto. Meskipun sudah 8+ tahun berlalu dan solusi sudah diketahui dengan baik, reentrancy attack masih menjadi penyebab hack signifikan secara reguler.
  • Audit tidak selalu mendeteksinya: Banyak kontrak yang diaudit oleh firma keamanan terkemuka masih mengandung kerentanan reentrancy yang tidak terdeteksi — terutama dalam kasus reentrancy lintas fungsi atau reentrancy read-only yang lebih kompleks.
  • Celah antara dokumentasi dan implementasi: Developer yang memahami reentrancy di teori terkadang masih membuat kesalahan saat implementasi — terutama dalam pola pewarisan kontrak yang kompleks atau saat mengintegrasikan kode pihak ketiga.

Sentimen Media Sosial

  • r/ethereum / r/ethdev: Reentrancy adalah topik wajib dalam komunitas developer Ethereum. Setiap reentrancy hack baru mendapat analisis mendalam dan dijadikan bahan pembelajaran. Penggunaan ReentrancyGuard dari OpenZeppelin direkomendasikan sebagai standar minimum.
  • X/Twitter: Postmortem reentrancy hack mendapat perhatian besar dari komunitas keamanan kripto. Rekt.news dan peneliti keamanan seperti samczsun mendapat pengakuan luas untuk analisis mereka.
  • Telegram (komunitas developer Indonesia): Reentrancy adalah kerentanan yang dikenal baik oleh developer smart contract Indonesia — menjadi bagian standar dari kurikulum pembelajaran Solidity dan audit kontrak.

Terakhir diperbarui: 2026-04


Istilah Terkait


Lihat Juga


Sumber