Kelemahan penyimpanan transien menyebabkan kerugian $300.000 pada proyek perdagangan margin Ethereum.

Kerentanan Penyimpanan Sementara Mengakibatkan Pencurian Aset Senilai 300.000 Dolar

Pada tanggal 30 Maret 2025, proyek perdagangan dengan leverage di rantai Ethereum diserang, mengakibatkan kerugian aset lebih dari 300.000 dolar AS. Tim keamanan telah melakukan analisis mendalam tentang peristiwa ini dan sekarang membagikan hasilnya sebagai berikut:

Latar Belakang

Versi Solidity 0.8.24 memperkenalkan fitur penyimpanan transien berdasarkan EIP-1153. Ini adalah lokasi penyimpanan data baru yang dirancang untuk memberikan cara penyimpanan sementara yang efektif biaya dan berlaku selama transaksi bagi pengembang. Penyimpanan transien diimplementasikan melalui dua instruksi EVM baru, TSTORE dan TLOAD, yang memiliki biaya gas rendah, ketahanan dalam transaksi, dan pembersihan otomatis.

Sisa Mematikan: Sebuah Perampokan On-Chain Senilai 300 Ribu Dolar yang Dipicu oleh Penyimpanan Transien

Alasan Serangan

Penyebab mendasar dari kejadian ini adalah bahwa nilai yang disimpan secara transien menggunakan tstore dalam fungsi tidak dibersihkan setelah pemanggilan fungsi selesai. Penyerang memanfaatkan fitur ini untuk membangun alamat jahat tertentu, melewati pemeriksaan izin untuk mengeluarkan token.

Bahan Berbahaya: Sebuah Perampokan On-Chain Senilai $300 Ribu yang Dipicu oleh Penyimpanan Transien

Langkah Serangan

  1. Penyerang membuat dua token jahat A dan B, dan menciptakan kolam untuk kedua token ini di suatu DEX dan menyuntikkan likuiditas.

  2. Penyerang memanggil fungsi initialize dari kontrak Vault, menggunakan token A sebagai token jaminan dan token B sebagai token utang untuk membuat pasar perdagangan leverage.

  3. Penyerang memanggil fungsi mint dari kontrak Vault, menyimpan token utang B untuk mencetak token leverage. Dalam proses ini, alamat kolam DEX dan jumlah yang dicetak disimpan sementara.

  4. Penyerang membuat kontrak jahat yang alamatnya sama dengan nilai penyimpanan sementara kedua.

  5. Penyerang mengeluarkan token dengan memanggil fungsi callback dari kontrak Vault melalui kontrak jahat. Karena nilai penyimpanan sementara tidak dibersihkan, pemeriksaan identitas dilalui secara salah.

  6. Terakhir, penyerang menggunakan serangan kontrak (token A) untuk memanggil fungsi callback dari kontrak Vault, mengeluarkan token lain (seperti WBTC, WETH) untuk mendapatkan keuntungan.

Residue Mematikan: Sebuah Perampokan On-chain Senilai $300.000 yang Dipicu oleh Penyimpanan Transien

Dampak Fatal: Sebuah Perampokan On-Chain Senilai $300.000 yang Dipicu oleh Penyimpanan Transien

Sisa Mematikan: Sebuah Perampokan On-Chain Senilai 300 Ribu Dolar yang Dipicu oleh Penyimpanan Transien

Sisa Mematikan: Sebuah Perampokan On-chain Seharga 300.000 Dolar yang Dipicu oleh Penyimpanan Transien

Dampak Mematikan: Sebuah perampokan on-chain senilai 300.000 dolar yang dipicu oleh penyimpanan sementara

Residue Mematikan: Sebuah Perampokan On-Chain Senilai $300.000 yang Dipicu oleh Penyimpanan Transien

Residual memat: Sebuah perampokan $300.000 di blockchain yang dipicu oleh penyimpanan transien

Residual Memorable: Sebuah perampokan sebesar 300 ribu dolar di blockchain yang dipicu oleh penyimpanan sementara

Residue Mematikan: Sebuah Perampokan On-Chain Senilai $300.000 yang Dipicu oleh Penyimpanan Transien

Dampak Mematikan: Sebuah Perampokan On-Chain senilai 300.000 dolar yang Dipicu oleh Penyimpanan Transien

Sisa Mematikan: Sebuah Perampokan On-Chain Senilai 300.000 Dolar yang Dipicu oleh Penyimpanan Transien

Residual Fatal: Sebuah perampokan on-chain senilai 300 ribu dolar yang dipicu oleh penyimpanan transien

Dampak Mematikan: Sebuah Perampokan On-Chain Senilai $300.000 yang Dipicu oleh Penyimpanan Transien

Residue Mematikan: Sebuah Kasus Perampokan Chain senilai 300.000 Dolar yang Dipicu oleh Penyimpanan Transien

Residu Mematikan: Sebuah Perampokan On-Chain Senilai 300.000 Dolar yang Dipicu oleh Penyimpanan Transien

Analisis Aliran Dana

Penyerang mencuri aset senilai sekitar 300.000 dolar AS, termasuk 17.814,8626 USDC, 1,4085 WBTC, dan 119,871 WETH. WBTC ditukar menjadi 63,5596 WETH, dan USDC ditukar menjadi 9,7122 WETH. Kemudian, total 193,1428 WETH ditransfer ke suatu platform anonim. Sumber dana awal penyerang berasal dari 0,3 ETH yang ditransfer dari platform tersebut.

Ringkasan

Inti dari serangan ini adalah penyerang memanfaatkan karakteristik penyimpanan sementara yang tetap tidak berubah selama seluruh periode transaksi, melewati verifikasi izin pada fungsi panggilan balik. Disarankan agar pihak proyek segera menggunakan tstore(key, 0) untuk menghapus nilai di penyimpanan sementara setelah panggilan fungsi selesai berdasarkan logika bisnis. Selain itu, audit kode kontrak dan pengujian keamanan harus diperkuat untuk mencegah situasi serupa terjadi.

ETH4.74%
Lihat Asli
Halaman ini mungkin berisi konten pihak ketiga, yang disediakan untuk tujuan informasi saja (bukan pernyataan/jaminan) dan tidak boleh dianggap sebagai dukungan terhadap pandangannya oleh Gate, atau sebagai nasihat keuangan atau profesional. Lihat Penafian untuk detailnya.
  • Hadiah
  • 7
  • Bagikan
Komentar
0/400
VitaliksTwinvip
· 6jam yang lalu
Gelombang ini masih membuang gas.
Lihat AsliBalas0
CountdownToBrokevip
· 6jam yang lalu
30w lagi ada kakak kirim
Lihat AsliBalas0
0xLuckboxvip
· 6jam yang lalu
Sudah dicuri tiga ratus ribu lagi~ smart contract menjaga keamanan ya
Lihat AsliBalas0
OnchainGossipervip
· 6jam yang lalu
Lagi-lagi ada celah yang dimanfaatkan, bodoh sekali.
Lihat AsliBalas0
GateUser-0717ab66vip
· 6jam yang lalu
30w juga berani menyebutnya
Lihat AsliBalas0
VibesOverChartsvip
· 6jam yang lalu
30w? Hanya biaya transaksi sehari.
Lihat AsliBalas0
DefiPlaybookvip
· 6jam yang lalu
Berdasarkan pengambilan data, kerentanan penyimpanan semacam ini dapat menyebabkan tingkat kerugian mencapai 86,3%, waspada!
Lihat AsliBalas0
Perdagangkan Kripto Di Mana Saja Kapan Saja
qrCode
Pindai untuk mengunduh aplikasi Gate
Komunitas
Bahasa Indonesia
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)