Pada tanggal 3 Januari 2024, menurut Beosin EagleEye, proyek Radiant Capital menjadi korban serangan pinjaman kilat oleh penyerang. Melalui tiga transaksi, penyerang mencuri lebih dari 1900 ETH, senilai lebih dari $4.5 juta. Dana yang dicuri saat ini disimpan di alamat penyerang, dan tim keamanan Beosin segera menganalisis kejadian tersebut.

Analisis Kerentanan

Akar penyebab insiden ini terletak pada perhitungan kuantitas token proyek Radiant Capital, yang melibatkan ekspansi dan pembulatan presisi. Penyerang mengeksploitasi kemampuan untuk mengontrol presisi dan, dikombinasikan dengan pembulatan, memperluas margin keuntungan untuk serangan tersebut.

Dalam kode yang diamati, fungsi rayDiv mengambil dua data uint256, a dan b. Keseluruhan proses dapat disederhanakan menjadi (a RAY + b/2) / b, dengan RAY adalah data ekspansi presisi, sama dengan 10²⁷. Ini menghasilkan RAY / b + 0,5, mencapai fungsionalitas pembulatan. Sumber kesalahan utama dalam perhitungan ini berasal dari b. Jika b secara signifikan lebih kecil dari a, kesalahannya dapat diabaikan. Namun, jika b sama besarnya dengan a, kesalahannya mungkin besar.

Misalnya, jika a RAY = 10000 dan b = 3, maka hasil perhitungannya adalah 3333, yaitu 1/10000 lebih kecil dari nilai sebenarnya. Jika a RAY = 10000 dan b = 3000 maka hasil perhitungannya adalah 3, yaitu 1/10 lebih kecil dari nilai sebenarnya.

Dalam kejadian ini, penyerang memanipulasi nilai b agar memiliki besaran yang mirip dengan a, sehingga menyebabkan penghitungan setara dengan 3/2,0001 = 1. Nilai yang dihitung 1/3 lebih kecil dari nilai sebenarnya.

Proses Serangan

  1. Penyerang awalnya meminjam 3 juta USDC melalui pinjaman flash AAVE sebagai modal awal untuk serangan tersebut.

2. 2 juta USDC dijanjikan ke kontrak Radiant, dan penyerang memperoleh 2 juta sertifikat token rUSDCn.

3. Penyerang menggunakan pinjaman kilat melalui kontrak Radiant untuk meminjam 2 juta USDC. Dalam fungsi panggilan balik, 2 juta USDC telah dilunasi, sekaligus mengekstraksi USDC yang dijaminkan dari langkah kedua. Fungsi pinjaman kilat disebut fungsi transferfrom, mentransfer USDC penyerang ke dalam kontrak, dengan biaya 9/10000 dikumpulkan sebagai likuiditas untuk kumpulan tersebut.

4. Dengan mengulangi langkah 3, penyerang mengontrol sebagian besar Indeks Likuiditas, mencapai Indeks Likuiditas=27180000000099999999999998631966035920.

5. Selanjutnya, penyerang membuat kontrak baru dan menyetor 543,600 USDC ke dalamnya. Jumlah ini setara dengan dua kali nilai Indeks Likuiditas dari langkah 4, sehingga memfasilitasi kontrol pembulatan.

6. Penyerang menjaminkan seluruh 543.600 USDC ke dalam kontrak Radiant, memperoleh jumlah yang setara dengan rUSDCn.

7. Penyerang menarik 407,700 USDC. Meskipun 407.700 rUSDCn seharusnya dibakar, seperti disebutkan di atas, fungsi pembakaran melibatkan perhitungan ekspansi dan pembulatan yang presisi. 4077000000000000000000000000000000000000/271800000000999999999999998631966035920 = 1,49999999, namun hasil pembulatannya menjadi 1 sehingga menyebabkan hasilnya 1/3 lebih kecil dari nilai sebenarnya. Seperti yang ditunjukkan di bawah ini, alih-alih membakar 407,700, hanya 271,800 yang dibakar, sehingga penyerang dapat menarik 407,700 USDC.

8. Memanfaatkan kerentanan dari langkah 7, penyerang mengulangi operasi penjaminan dan penarikan, secara konsisten menarik 1/3 lebih banyak dari jumlah yang dijanjikan, yang pada akhirnya menukarkan seluruh USDC dari kumpulan.

Pelacakan Dana

Pada saat penulisan, 1902 ETH yang dicuri tetap berada di alamat peretas tanpa pergerakan. Beosin Trace akan terus memantau dana tersebut.

Memasuki tahun 2024, kita telah menyaksikan dua kasus pencurian bernilai tinggi. (Ulasan insiden keamanan kemarin: Apa yang terjadi dalam kasus pertama tahun ini, pencurian Orbit Chain senilai $80 juta?) Rangkaian peristiwa ini berfungsi sebagai pengingat bahwa dalam ekosistem Web3, tindakan pencegahan keamanan tetap penting!

Kontak

Jika Anda memerlukan layanan keamanan blockchain, selamat datang untuk menghubungi kami:

Situs Resmi Beosin EagleEye Twitter Telegram Linkedin