Dari pra-tanda tangan hingga kehilangan hak akses, mengapa garis pertahanan keamanan Drift tampak tidak berdaya?

Ditulis oleh: Four Pillars

Kompilasi: AididiaoJP, Foresight News

Inti pokok

Pada 1 April 2026 pukul 16:05 (Waktu UTC), protokol Drift mengalami serangan besar yang mengakibatkan kerugian sekitar 285 juta dolar. Drift adalah pertukaran terdesentralisasi untuk kontrak perpetual terkemuka di ekosistem Solana. Serangan ini termasuk dalam skema manipulasi jaminan yang kompleks: penyerang memanfaatkan kunci administrator yang bocor untuk meluncurkan pasar spot baru untuk token yang tidak bernilai, kemudian menonaktifkan mekanisme perlindungan penarikan, dan akhirnya menarik aset nyata dengan nilai jaminan yang dipalsukan.

Serangan ini menggabungkan teknologi pra-tanda tangan berbasis angka acak yang persisten dengan teknik rekayasa sosial tingkat tinggi. Sejak 23 Maret, penyerang membuat akun angka acak persisten untuk dua penandatangan multisig dan dua akun yang dikendalikan oleh penyerang. Bahkan setelah pihak protokol melakukan migrasi multisig yang sah pada 27 Maret, penyerang masih berhasil mendapatkan kembali akses ke dua penandatangan baru dalam multisig tersebut. Penyerang mendapatkan pra-tanda tangan dari penandatangan yang sah dengan cara menyesatkan konten transaksi, menyimpan dengan angka acak yang persisten, dan pada 1 April melakukan eksekusi massal, akhirnya merebut hak administrator. Insiden ini tidak melibatkan kebocoran frasa pemulihan atau kerentanan kontrak pintar.

Insiden ini adalah kesalahan besar lainnya dalam keamanan operasional, hanya sepuluh hari setelah peristiwa serangan Resolv. Keruntuhan Resolv disebabkan oleh ketidakadaan mekanisme multisig sama sekali; sedangkan Drift meskipun memiliki multisig, tetap gagal karena ambang batas yang terlalu rendah dan kurangnya mekanisme keamanan tambahan. Kedua insiden ini menunjukkan bahwa desain ulang fundamental terhadap arsitektur hak istimewa sangat mendesak.

Ikhtisar peristiwa

Sumber: @DriftProtocol

Pada 1 April 2026 pukul 16:05 (Waktu UTC), protokol pertukaran terdesentralisasi Drift yang merupakan kontrak perpetual kelas atas di Solana mengalami serangan besar-besaran. Drift adalah protokol yang menawarkan perdagangan dengan leverage, perdagangan spot, pinjaman, dan berbagai layanan keuangan terdesentralisasi lainnya, yang arsitekturnya menggabungkan pembuat pasar otomatis virtual dengan buku pesanan on-chain. Sebelum serangan terjadi, nilai total yang terkunci di protokol tersebut sekitar 309 juta dolar.

Sumber: @PeckShieldAlert

Sekitar pukul 18:10 (Waktu UTC), dua jam setelah serangan dimulai, tim Drift mengumumkan di platform X, meminta pengguna untuk menghentikan setoran. Kemudian, tim mengonfirmasi insiden serangan tersebut dan menghentikan semua fungsi setoran dan penarikan. Beberapa perusahaan keamanan dan analisis on-chain, termasuk PeckShield dan Lookonchain, memperkirakan kerugian sekitar 285 juta dolar. Dompet Phantom segera mengambil tindakan, memblokir akses ke protokol tersebut.

Alasan mengapa peristiwa ini sangat menarik perhatian adalah karena terjadi hanya 10 hari setelah peristiwa serangan Resolv, menjadi insiden kebocoran kunci administrator besar-besaran lainnya yang terjadi dalam waktu singkat. Kedua insiden memiliki akar penyebab yang sama: penyebab mendasar bukanlah kerentanan dalam kode kontrak pintar, tetapi kesalahan dalam aspek keamanan operasional.

Analisis akar penyebab

Inti dari serangan ini adalah penyerang memanfaatkan hak administrator yang bocor untuk melakukan manipulasi jaminan. Jika peristiwa Resolv adalah 'kunci dengan hak pencetakan bocor', maka peristiwa Drift adalah 'kunci dengan hak peluncuran pasar dan pengaturan keamanan bocor'. Keduanya memiliki bentuk yang berbeda, tetapi akar penyebabnya sama. Berikut ini adalah analisis bertahap dari proses serangan.

Sumber: Dexscreener

Alat yang paling langsung digunakan dalam serangan ini adalah CarbonVote Token (CVT), sebuah token dengan likuiditas sangat rendah. Salah satu alamat yang dikendalikan oleh penyerang (FnYXwy...LpAjjx) menerbitkan token tersebut tiga minggu sebelum serangan. Total pasokan CVT sekitar 750 juta, di mana dompet penyerang memegang lebih dari 80%. Penyerang menciptakan kolam likuiditas minimum senilai sekitar 500 dolar di Raydium, kemudian melakukan perdagangan volume yang berkelanjutan.

Fungsi initializeSpotMarket dalam protokol Drift memungkinkan administrator untuk secara langsung menentukan alamat oracle dan sumber parameternya. Menyusuri konfigurasi software development kit untuk pasar spot yang ada, dapat diketahui bahwa setiap pasar didefinisikan secara terpisah dengan oracle, sumber oracle, dan bidang pencetakan token. Ini berarti, meskipun token seperti CVT tidak memiliki harga dari Pyth, selama penyerang mendapatkan hak administrator, mereka dapat menggunakan sumber oracle mana pun untuk meluncurkannya sebagai pasar.

Dalam serangan ini, penyerang menetapkan harga oracle dari Switchboard untuk pasar CVT sebagai oracle mereka. Switchboard adalah jaringan oracle yang membuatnya relatif mudah untuk membuat harga kustom. Penyerang mengonfigurasi harga yang mereka kendalikan, menetapkan nilai 785 juta CVT menjadi beberapa ratus juta dolar. Platform pelacak harga seperti Dexscreener menunjukkan harga CVT sekitar 1 dolar, tetapi likuiditas pasar yang sebenarnya dan nilai intrinsiknya hampir nol.

Dompet yang digunakan dalam serangan (HkGz4K...ovpZES) muncul aktif sekitar delapan hari sebelumnya, yaitu pada 24 Maret. Dompet ini berniat mendapatkan prapengisian melalui protokol NEAR, dan catatan on-chain menunjukkan bahwa hingga hari serangan, dompet ini telah menyelesaikan total 325 transaksi.

Riwayat aktivitas on-chain dari penandatangan administrator yang digunakan pada hari serangan (H7PiGq...y7ZgL) juga patut diperhatikan. Kunci tersebut hanya mencatat total 29 transaksi. Transaksi pertama terjadi pada 31 Maret pukul 15:05 (Waktu UTC), yaitu sehari sebelum serangan; transaksi terakhir terjadi pada 1 April pukul 18:05 (Waktu UTC), yaitu pada hari serangan. Seluruh waktu keberadaan kunci tersebut di blockchain adalah sekitar 27 jam. Alasannya dapat dilihat dengan jelas dari catatan on-chain.

Hak administrator protokol Drift tidak dikelola oleh satu akun eksternal saja, tetapi melalui mekanisme multisig. Namun, penyelidikan selanjutnya mengungkapkan jalur serangan yang jauh lebih kompleks daripada sekadar invasi multisig. Sekitar sembilan hari sebelum serangan, penyerang membuat empat akun angka acak persisten. Dua di antaranya terkait dengan penandatangan multisig dewan keamanan Drift, sementara dua lainnya dikendalikan oleh penyerang. Angka acak persisten adalah mekanisme di Solana yang memungkinkan untuk menghindari waktu validitas hash blok yang sekitar satu menit dalam transaksi biasa, memungkinkan penandatangan untuk dikumpulkan sebelumnya dan dieksekusi di kemudian hari. Dipercaya bahwa penyerang memanfaatkan mekanisme ini untuk mendapatkan pra-tanda tangan dari penandatangan yang sah dengan cara menyesatkan konten transaksi.

Empat hari kemudian, tim Drift melaksanakan migrasi multisig yang direncanakan karena perubahan anggota dewan keamanan. Migrasi ini adalah bagian dari prosedur operasional rutin, tetapi penyerang berhasil beradaptasi dengan perubahan ini.

Sebelum serangan terjadi, penyerang membuat akun angka acak persisten baru untuk salah satu penandatangan dalam multisig yang telah dimigrasi (6UJbu9...Pvu924). Pada saat itu, penyerang telah mendapatkan kembali akses yang valid ke dua per lima penandatangan dalam multisig yang diperbarui. Ini menunjukkan bahwa penyerang telah menyusup dalam sistem secara mendalam, bahkan mampu merespons perubahan tak terduga seperti migrasi multisig.

Pada hari serangan, tim Drift melakukan penarikan uji rutin dari dana asuransi. Sekitar satu menit kemudian, penyerang dengan cepat mengeksekusi dua transaksi angka acak persisten yang telah ditandatangani sebelumnya.

Sumber: solscan

Transaksi pertama dilakukan pada multisig Squads dengan instruksi VaultTransactionCreate, ProposalCreate, dan ProposalApprove, menciptakan proposal pemindahan administrator yang jahat dan mencatat persetujuan pertama.

Segera setelah itu, transaksi kedua menggunakan angka acak persisten untuk mengeksekusi instruksi ProposalApprove dan VaultTransactionExecute. Ambang batas dua per lima kemudian tercapai, dan karena penguncian waktu diatur ke nol detik, transaksi ini segera dieksekusi. Pada saat itu, instruksi UpdateAdmin dalam program Drift V2 dipanggil, yang memindahkan alamat administrator kepada penyerang (H7PiGq...y7ZgL).

Detail penting di sini adalah bahwa kedua transaksi tersebut telah menyelesaikan semua tanda tangan sebelumnya dan diajukan secara massal pada hari serangan. Penandatangan pada saat itu mungkin tidak sepenuhnya memahami konten transaksi yang mereka tandatangani. Istilah 'penyajian transaksi yang menyesatkan' yang digunakan oleh tim Drift menunjukkan bahwa penandatangan telah ditipu untuk menandatangani transaksi pemindahan administrator yang jahat yang menyamar sebagai operasi biasa. Angka acak persisten berfungsi untuk menyimpan pra-tanda tangan ini secara tidak terbatas, sehingga penyerang dapat mengeksekusinya pada waktu yang mereka pilih.

Penandatangan administrator yang digantikan kemudian memanggil program Drift V2 (dRifty...cn33UH), melaksanakan dua operasi.

Sumber: solscan

Pertama, penyerang mendaftarkan CVT sebagai pasar spot baru di Drift menggunakan instruksi initializeSpotMarket. Dalam proses ini, akun pasar spot baru (BY3WYn...FVU1Cf) dan dua akun token CVT dibuat, serta alamat turunan program kas Drift (PDA, JCNCMF...XXJfrw) ditetapkan sebagai pemilik token.

Drift menjalankan sistem jaminan multi-aset, yang berarti token yang terdaftar di pasar spot baru dapat segera digunakan sebagai jaminan. Namun, untuk dianggap sebagai jaminan yang memenuhi syarat, parameter initial_asset_weight dan maintenance_asset_weight pasar tersebut harus diatur ke nilai positif yang lebih besar dari nol, sedangkan nilai inisialisasi default biasanya rendah atau mendekati nol. Analisis terhadap transaksi serangan (4a5962R...st82X) menunjukkan bahwa updateSpotMarketMarginWeights (atau pembaruan parameter risiko yang setara) dieksekusi bersamaan dalam transaksi yang sama dengan initializeSpotMarket, di mana penyerang mengatur bobot jaminan CVT ke nilai maksimum.

Ini mengungkapkan kekurangan desain kunci dari sudut pandang pertahanan berlapis: operasi seperti peluncuran pasar, penunjukan sumber oracle, konfigurasi bobot jaminan maksimum, dan penonaktifan perlindungan penarikan dapat diselesaikan dalam satu transaksi. Faktor diskon bobot yang digunakan untuk mencegah risiko konsentrasi posisi besar, setelah bobot itu sendiri diatur ke maksimum, juga kehilangan kegunaan praktis. Jika program tersebut menetapkan batas atas untuk bobot pasar yang baru dibuat, atau menetapkan penguncian waktu yang independen untuk perubahan bobot, maka serangan yang dapat meruntuhkan semua langkah pertahanan dalam satu kali jalan tidak akan dapat dilakukan.

Sumber: solscan

Kedua, dalam transaksi yang sama, penyerang memanggil instruksi updateWithdrawGuardThreshold lima kali, meningkatkan batas penarikan untuk pasar aset utama ke tingkat yang ekstrem. Batas untuk semua pasar diatur ke nilai yang seragam sekitar 500 triliun, secara praktis mendorong ambang batas mekanisme perlindungan penarikan ke tak terhingga, sehingga membatalkan fungsi perlindungan keamanan yang dirancang untuk mencegah penarikan jumlah besar yang tidak wajar.

Transaksi ini (4a5962R...st82X) sekaligus menghancurkan tiga garis pertahanan inti Drift.

Pertama, dengan mengalokasikan harga oracle yang dikendalikan oleh penyerang dari Switchboard sebagai oracle, mekanisme harga berhasil diretas. Kedua, bobot jaminan diatur ke maksimum, sehingga token yang tidak memiliki nilai intrinsik dianggap sebagai jaminan berkualitas tinggi. Ketiga, ambang batas mekanisme perlindungan penarikan ditingkatkan ke level sekitar 500 triliun, secara substansial menghilangkan mekanisme pemblokiran penarikan yang tidak wajar.

Termasuk perubahan hak akses administrator, penyerang hanya dengan dua transaksi berhasil meruntuhkan seluruh arsitektur keamanan protokol tersebut. Dari sudut pandang audit kode, ini menghasilkan paradoks yang dalam: kode kontrak Drift berfungsi sepenuhnya sesuai dengan cara yang dikonfirmasi oleh audit. initializeSpotMarket mendaftarkan pasar baru sesuai desain, menunjuk sumber oracle dan mengatur parameter bobot; updateWithdrawGuardThreshold memodifikasi batas sesuai desain. Akar permasalahan terletak pada desain sistem itu sendiri—desain tersebut memungkinkan seluruh rantai serangan diselesaikan dalam satu transaksi. Ini bukan lagi ranah audit kode, melainkan ranah desain arsitektur hak istimewa dan batasan parameter.

Akhirnya, penyerang menyetor sekitar 785 juta CVT sebagai jaminan melalui akun pengguna Drift yang baru dibuat. Harga oracle Switchboard yang dikendalikan oleh penyerang menetapkan nilai ini menjadi beberapa ratus juta dolar, sementara bobot jaminan yang diatur ke maksimum mengakui hampir semua penilaian sebagai jaminan yang valid. Sistem margin Drift berfungsi sepenuhnya sesuai desain yang diharapkan. Masalahnya adalah, setiap parameter yang dimasukkan ke dalam sistem tersebut telah dimanipulasi secara jahat oleh penyerang.