reentrancy attack dengan delegatecall - Rian010/Journal GitHub Wiki

Dalam reentrancy attack dengan delegatecall, penyerang memodifikasi kode sebelum transfer dana dilakukan. Berikut penjelasannya:

1. Delegatecall:

Delegatecall adalah fungsi dalam smart contract yang memungkinkan kode dari kontrak lain dieksekusi. Hal ini bermanfaat untuk modularitas dan menghindari duplikasi kode.

2. Reentrancy Attack:

Reentrancy attack adalah jenis serangan pada smart contract yang memanfaatkan kerentanan dalam fungsi yang dapat dipanggil kembali (reentrant). Penyerang dapat memicu fungsi reentrant berkali-kali untuk menguras dana dari smart contract.

3. Modifikasi Kode:

Penyerang memanfaatkan kerentanan dalam delegatecall di mana kode yang dieksekusi dapat dimodifikasi sebelum transfer dana. Modifikasi ini dilakukan dengan cara:

  • Menyisipkan kode malicious: Penyerang menambahkan kode di dalam delegatecall yang memungkinkan mereka untuk menguras dana.
  • Mengubah kode existing: Penyerang mengubah kode existing dalam delegatecall untuk mengalihkan dana ke alamat mereka.

4. Contoh:

Misalkan terdapat smart contract A dengan fungsi withdraw yang menggunakan delegatecall untuk mentransfer dana ke smart contract B:

// Smart contract A
function withdraw(uint256 amount) public {
    address(B).delegatecall(bytes4(keccak256("withdraw(uint256)")), amount);
}

Penyerang dapat memodifikasi kode di dalam delegatecall pada smart contract B:

// Smart contract B
function withdraw(uint256 amount) public {
    // Kode malicious ditambahkan
    address payable attacker = payable(msg.sender);
    attacker.transfer(amount); // Dana ditransfer ke attacker
    // Kode original diubah
    // ...
}

5. Manfaat bagi Penyerang:

  • Menguasai dana: Penyerang dapat menguras dana dari smart contract A dengan memodifikasi kode withdraw pada smart contract B.
  • Serangan tersembunyi: Modifikasi kode dapat dilakukan tanpa sepengetahuan korban karena dieksekusi di dalam delegatecall.
  • Kemudahan: Serangan ini relatif mudah dilakukan dan tidak memerlukan biaya yang besar.

Kesimpulan:

Memanipulasi kode dalam delegatecall memungkinkan penyerang untuk melakukan reentrancy attack dan menguras dana dari smart contract. Penting untuk selalu berhati-hati dan melakukan audit code untuk memastikan keamanan smart contract.

Tips Pencegahan:

  • Gunakan library yang teruji dan aman untuk delegatecall.
  • Lakukan audit code smart contract untuk memastikan tidak ada kerentanan.
  • Gunakan mekanisme pengamanan seperti reentrancy guard.