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 kodewithdraw
pada smart contractB
. - 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.