GMX mengalami serangan hacker, kehilangan lebih dari 40 juta dolar. Penyerang memanfaatkan kerentanan reentrancy dan membuka posisi short dalam kondisi kontrak mengaktifkan fitur leverage untuk melancarkan serangan.
Akar masalah terletak pada penggunaan fungsi executeDecreaseOrder yang salah. Parameter pertama dari fungsi tersebut seharusnya adalah akun eksternal (EOA), tetapi penyerang memasukkan alamat kontrak pintar. Hal ini memungkinkan penyerang untuk memasuki kembali sistem selama proses penebusan, memanipulasi status internal, dan akhirnya menebus aset yang jauh melebihi nilai GLP yang sebenarnya mereka miliki.
Mekanisme penebusan GLP normal
Di GMX, GLP adalah token penyedia likuiditas yang mewakili bagian dari aset kas (seperti USDC, ETH, WBTC). Ketika pengguna memanggil unstakeAndRedeemGlp, sistem menggunakan rumus berikut untuk menghitung jumlah aset yang harus dikembalikan:
Perhitungan AUM (Total Aset yang Dikelola) adalah:
AUM = Nilai total semua kolam token + Kerugian yang belum direalisasikan dari posisi pendek global - Keuntungan yang belum direalisasikan dari posisi pendek global - Jumlah yang telah dialokasikan - Pengurangan yang telah ditetapkan (aumDeduction)
Mekanisme ini menjamin bahwa pemegang GLP menerima bagian proporsional dari aset nyata dalam kas.
Masalah setelah leverage diaktifkan
Ketika enableLeverage diaktifkan, pengguna dapat membuka posisi leverage (long atau short). Penyerang membuka posisi short WBTC yang besar sebelum menebus GLP.
Karena posisi short yang dibuka segera meningkatkan ukuran posisi short global, sistem secara default menganggap posisi short tersebut rugi meskipun harga belum bergerak, dan bagian dari kerugian yang belum direalisasikan ini akan dihitung sebagai "aset" dari gudang, menyebabkan AUM meningkat secara artifisial. Meskipun gudang tidak benar-benar mendapatkan nilai tambahan, perhitungan penebusan akan didasarkan pada AUM yang terlalu tinggi ini, sehingga penyerang memperoleh aset yang jauh melebihi yang seharusnya mereka dapatkan.
Proses serangan
Serangan transaksi
Ditulis di akhir
Serangan ini mengungkapkan kekurangan serius dalam mekanisme leverage dan desain perlindungan reentrancy GMX. Masalah inti terletak pada logika penebusan aset yang terlalu mengandalkan AUM, tanpa melakukan verifikasi keamanan yang cukup terhadap komponen-komponennya (seperti kerugian yang belum direalisasikan). Selain itu, asumsi identitas pemanggil di fungsi kunci (EOA vs kontrak) juga kurang memiliki verifikasi yang memadai. Peristiwa ini kembali mengingatkan para pengembang bahwa dalam operasi yang melibatkan dana sensitif, penting untuk memastikan bahwa status sistem tidak dapat dimanipul, terutama ketika memperkenalkan logika keuangan yang kompleks (seperti leverage, derivatif), sangat penting untuk mencegah risiko sistemik yang diakibatkan oleh reentrancy dan pencemaran status.
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
BlockSec: Analisis Prinsip Serangan GMX
Penulis: BlockSec
GMX mengalami serangan hacker, kehilangan lebih dari 40 juta dolar. Penyerang memanfaatkan kerentanan reentrancy dan membuka posisi short dalam kondisi kontrak mengaktifkan fitur leverage untuk melancarkan serangan.
Akar masalah terletak pada penggunaan fungsi executeDecreaseOrder yang salah. Parameter pertama dari fungsi tersebut seharusnya adalah akun eksternal (EOA), tetapi penyerang memasukkan alamat kontrak pintar. Hal ini memungkinkan penyerang untuk memasuki kembali sistem selama proses penebusan, memanipulasi status internal, dan akhirnya menebus aset yang jauh melebihi nilai GLP yang sebenarnya mereka miliki.
Mekanisme penebusan GLP normal
Di GMX, GLP adalah token penyedia likuiditas yang mewakili bagian dari aset kas (seperti USDC, ETH, WBTC). Ketika pengguna memanggil unstakeAndRedeemGlp, sistem menggunakan rumus berikut untuk menghitung jumlah aset yang harus dikembalikan:
redeem_amount = (user_GLP / total_GLP_supply) * AUM
Perhitungan AUM (Total Aset yang Dikelola) adalah:
AUM = Nilai total semua kolam token + Kerugian yang belum direalisasikan dari posisi pendek global - Keuntungan yang belum direalisasikan dari posisi pendek global - Jumlah yang telah dialokasikan - Pengurangan yang telah ditetapkan (aumDeduction)
Mekanisme ini menjamin bahwa pemegang GLP menerima bagian proporsional dari aset nyata dalam kas.
Masalah setelah leverage diaktifkan
Ketika enableLeverage diaktifkan, pengguna dapat membuka posisi leverage (long atau short). Penyerang membuka posisi short WBTC yang besar sebelum menebus GLP.
Karena posisi short yang dibuka segera meningkatkan ukuran posisi short global, sistem secara default menganggap posisi short tersebut rugi meskipun harga belum bergerak, dan bagian dari kerugian yang belum direalisasikan ini akan dihitung sebagai "aset" dari gudang, menyebabkan AUM meningkat secara artifisial. Meskipun gudang tidak benar-benar mendapatkan nilai tambahan, perhitungan penebusan akan didasarkan pada AUM yang terlalu tinggi ini, sehingga penyerang memperoleh aset yang jauh melebihi yang seharusnya mereka dapatkan.
Proses serangan
Serangan transaksi
Ditulis di akhir
Serangan ini mengungkapkan kekurangan serius dalam mekanisme leverage dan desain perlindungan reentrancy GMX. Masalah inti terletak pada logika penebusan aset yang terlalu mengandalkan AUM, tanpa melakukan verifikasi keamanan yang cukup terhadap komponen-komponennya (seperti kerugian yang belum direalisasikan). Selain itu, asumsi identitas pemanggil di fungsi kunci (EOA vs kontrak) juga kurang memiliki verifikasi yang memadai. Peristiwa ini kembali mengingatkan para pengembang bahwa dalam operasi yang melibatkan dana sensitif, penting untuk memastikan bahwa status sistem tidak dapat dimanipul, terutama ketika memperkenalkan logika keuangan yang kompleks (seperti leverage, derivatif), sangat penting untuk mencegah risiko sistemik yang diakibatkan oleh reentrancy dan pencemaran status.