9 Temmuz 2025'te, merkeziyetsiz sürekli vadeli işlem platformu GMX, Arbitrum ağındaki V1 sözleşmelerini hedef alan bir saldırıya [1, 2] maruz kaldı ve bu saldırı sonucunda yaklaşık 42 milyon dolar kayıp yaşandı. Saldırgan, GLP fiyatını manipüle etmek amacıyla çapraz sözleşme yeniden giriş (cross-contract reentrancy) açığını istismar etti ve ardından çarpıtılmış fiyatı kullanarak GMX V1'in likidite havuzlarından dayanak varlıkları boşalttı.
Arka Plan
GMX V1 [3], Arbitrum üzerinde dağıtılmış merkeziyetsiz bir sürekli vadeli işlem platformudur. Kullanıcıların izinsiz ve gözetim altında olmayan bir şekilde birden fazla kripto varlık üzerinde kaldıraçlı sürekli sözleşme ticareti yapmasına olanak tanır. GMX V1, tek bir çoklu varlık havuzu tasarımını benimser; desteklenen tüm varlıkların likiditesi birleşik bir Vault sistemi içinde toplanır.
GMX'te Pozisyon Yönetimi
GMX'te pozisyon yönetimi iki adımlı bir süreçtir. Özellikle, kullanıcılar OrderBook veya PositionRouter sözleşmeleriyle etkileşime girerek artırma/azaltma emirleri oluşturur. Ardından yetkili bekçi (keeper) hesabı, kullanıcıların emirlerini yürütür; bu işlem ShortTracker sözleşmesindeki küresel açığa satış verilerini ve Vault sözleşmesinin ilgili durumunu günceller. Aşağıdaki iki şekil, GMX'te pozisyon yönetimi için iki yürütme yolunu (emir defteri yürütme ve yönlendirici yürütme yolları) göstermektedir. Bu olayda saldırgan, küresel açığa satış verilerini manipüle etmek ve kâr elde etmek için her iki yolu da kullandı.
Emir Defteri Yürütme Yolu
Yönlendirici Yürütme Yolu
GMX Vault
GMX'teki Vault sözleşmesi, kullanıcıların pozisyonlarını ve varlıklarını (ör. kâr ve zararın kesinleştirilmesi) yönetmekten sorumludur. Kötü niyetli etkileşimleri önlemek amacıyla Vault sözleşmesine yalnızca "kaldıraç penceresi" açık olduğunda erişilebilir (yani Vault sözleşmesindeki isLeverageEnabled değişkeni, Timelock.enableLeverage() fonksiyonu aracılığıyla true olarak ayarlandığında). Bu doğrulama, emir yürütmenin sabit yolları (emir defteri yürütme ve yönlendirici yürütme) izlemesini zorunlu kılar.
GMX Short Tracker
ShortTracker sözleşmesi, emir yürütme sırasında küresel açığa satış verilerini (ör. globalShortAveragePrice değişkeni) takip etmek ve güncellemekten sorumludur. Emir defteri yürütme ve yönlendirici yürütme yollarına göre, kullanıcıların emirleri yürütülmeden önce en güncel küresel açığa satış verilerini senkronize etmek amacıyla ShortTracker sözleşmesinin updateGlobalShortData() fonksiyonu çağrılır. Bu adım, kullanıcıların pozisyonlarında doğru kâr ve zarar gerçekleştirmesini sağlar.
WETH Pozisyonunun Azaltılması
Diğer emirlerden farklı olarak, emir defteri yürütme yolu aracılığıyla WETH pozisyonunun azaltılması, WETH tokenlarını çekmek ve yerel ETH tokenlarını kullanıcılara aktarmak için OrderBook sözleşmesindeki _transferOutETH() fonksiyonunu çağırır. Alıcı _receiver bir sözleşme ise, sendValue() sözleşmenin fallback() fonksiyonunu tetikleyebilir ve bu durum potansiyel bir yeniden giriş açığı oluşturur. Bu olayda saldırgan, önemli kârlar elde etmek için bu yeniden giriş açığını defalarca istismar etti.
GLP Token
GLP (GMX Likidite Sağlayıcısı) token, Vault sözleşmesindeki çeşitli varlıklar için birleşik payları temsil eder. Kullanıcıların GLP basarak ve yakarak varlık sağlamasına ve kullandırmasına izin verilir.
GLP fiyatı aşağıdaki denklemlerle hesaplanabilir:
Burada:
GLPTotalSupply, GLP tokenlarının toplam arzını temsil eder.AUMaşağıdaki iki bileşenden oluşur.- , tüm açığa satış pozisyonlarının gerçekleşmemiş Kâr ve Zararını (uPnL) temsil eder.
- , LP'nin sağladığı likiditeyi artı tüm uzun pozisyonların gerçekleşmemiş uPnL'sini temsil eder. Bu terim, kâr gerçekleştirmesinden önce olay boyunca neredeyse değişmeden kaldı.
AssetMarketPrice, dayanak varlığın piyasa fiyatıdır (USD cinsinden).globalShortSize, tüm açığa satış pozisyonlarının toplamıdır (USD cinsinden).globalShortAveragePrice, birleşik küresel açığa satış pozisyonunun ortalama giriş fiyatıdır.
Bu olayda saldırgan, GLP fiyatını manipüle etmek ve kâr elde etmek için globalShortAveragePrice değerini çarpıttı.
Açık Analizi
Temel neden, OrderBook sözleşmesindeki çapraz sözleşme yeniden giriş açığıdır. Arka Plan bölümünde açıklandığı üzere, emir defteri yürütme yolu aracılığıyla WETH pozisyonlarının azaltılması, _transferOutETH() üzerinden alıcıya düşük seviyeli bir fallback çağrısı tetikler. Fonksiyon bir nonReentrant niteleyicisi taşır; ancak bu koruma yalnızca OrderBook sözleşmesinin kendisinde yeniden girişi önler, Vault'a yapılan çapraz sözleşme çağrılarını engellemez.
Normal çalışma koşullarında, Vault'un increasePosition() fonksiyonu yalnızca PositionRouter ve PositionManager aracılığıyla çağrılabilir; bu bileşenler her pozisyon değişikliğinden önce globalShortAveragePrice'ı güncellemek için ShortTracker'ı çağırır. Saldırgan, alıcı olarak kötü niyetli bir sözleşme kullanarak emirler oluşturdu ve fallback çağrısı sırasında PositionRouter/PositionManager'ı ve buna bağlı ShortTracker güncellemesini atlayarak doğrudan Vault üzerindeki increasePosition() fonksiyonunu çağırdı. globalShortAveragePrice'ı güncellemeden açığa satış pozisyonlarını defalarca açıp kapatarak saldırgan değişkeni aşamalı olarak çarpıttı. Çarpıtılmış değer GLP fiyatını şişirdi ve saldırganın GLP basıp kullandırarak kâr elde etmesine olanak tanıdı.
Saldırı Analizi
Saldırgan, küresel açığa satış verilerini manipüle eden ve kârı gerçekleştiren bir dizi işlem başlattı. Özellikle bu olay üç aşamaya ayrılabilir: Hazırlık, Fiyat Manipülasyonu ve Kâr Gerçekleştirme. İlgili tüm işlemler aşağıdaki tabloda listelenmiştir.
| İşlem No. | Aşama | Açıklama | İşlem | Zaman (UTC) |
|---|---|---|---|---|
| 1 | Hazırlık | Saldırı sözleşmesinin dağıtımı | 0xa4ece5...8cd4c93f | 09 Tem 2025 12:16:32 |
| 2 | WETH-uzun emir artışı oluşturma | 0x0b8cd6...e90a4712 | 09 Tem 2025 12:22:28 | |
| 3 | WETH-uzun emir artışını yürütme | 0x28a000...7bf0beef | 09 Tem 2025 12:23:23 | |
| 4 | WETH-uzun emir azaltması oluşturma | 0x20abfe...decc49af | 09 Tem 2025 12:24:56 | |
| 5 | Fiyat Manipülasyonu 1 | WETH-uzun emir azaltmasını yürütme | 0x1f00da...6a4a7353 | 09 Tem 2025 12:25:37 |
| 6 | WBTC-kısa emir azaltmasını yürütme | 0x222cda…c994464e | 09 Tem 2025 12:25:43 | |
| 7 | Fiyat Manipülasyonu 2 | İşlem 5 ile aynı | 0xc9a469...221293c2 | 09 Tem 2025 12:26:25 |
| 8 | İşlem 6 ile aynı | 0x1cbf25...d853943a | 09 Tem 2025 12:26:30 | |
| 9 | Fiyat Manipülasyonu 3 | İşlem 5 ile aynı | 0xb58415...3b4cfb0b | 09 Tem 2025 12:27:22 |
| 10 | İşlem 6 ile aynı | 0x5a37ff...cb59c3b7 | 09 Tem 2025 12:27:28 | |
| 11 | Fiyat Manipülasyonu 4 | İşlem 5 ile aynı | 0xff6fe6...377bf108 | 09 Tem 2025 12:28:13 |
| 12 | İşlem 6 ile aynı | 0xbd65d6...e0187be6 | 09 Tem 2025 12:28:18 | |
| 13 | Fiyat Manipülasyonu 5 | İşlem 5 ile aynı | 0x105273...19fcdec6 | 09 Tem 2025 12:29:12 |
| 14 | İşlem 6 ile aynı | 0x0cdbac...84339fcc | 09 Tem 2025 12:29:17 | |
| 15 | Kâr Gerçekleştirme | Kârların gerçekleştirilmesi | 0x03182d....a32626ef | 09 Tem 2025 12:30:11 |
| 16 | Geri Ödeme | Saldırgana mesaj gönderme | 0x92a39e...89547380 | 09 Tem 2025 14:04:19 |
| 17 | GMX protokolüne yanıt | 0x1d806c...919feac0 | 11 Tem 2025 06:29:00 | |
| 18 | Saldırgana yanıt | 0x9c4ca9...39fa27fc | 11 Tem 2025 07:42:17 | |
| 19 | Geri ödeme | 0x62b845...99211841 | 11 Tem 2025 08:04:34 | |
| 20 | Geri ödeme | 0x255d0a...9321b3 | 11 Tem 2025 08:08:27 | |
| 21 | Geri ödeme | 0xceafc3...a6313b22 | 11 Tem 2025 10:17:23 |
Hazırlık Aşaması
-
(İşlem 1) Saldırgan, emir yürütme sırasında varlık alıcısı olarak kullanılacak saldırı sözleşmesini dağıttı. Saldırı sözleşmesi kötü niyetli bir
fallback()fonksiyonu içeriyordu. -
(İşlem 2) Saldırgan,
OrderBooksözleşmesinde saldırı sözleşmesi için bir WETH-uzun emir artışı oluşturdu.
-
(İşlem 3) Bir Keeper, saldırganın artırma emrini (adım 2'de oluşturulan) yürüterek saldırı sözleşmesi için bir WETH-uzun pozisyon açtı. (İşlem 3).
-
(İşlem 4) Saldırgan,
OrderBooksözleşmesinde saldırı sözleşmesi için bir WETH-uzun emir azaltması oluşturdu.
Manipülasyon Aşaması
-
(İşlem 5) Bir Keeper, emir defteri yürütme yolu aracılığıyla saldırı sözleşmesinin WETH-uzun emir azaltmasını (adım 4'te oluşturulan) yürüttü. Yürütme yolu
_transferOutETH()fonksiyonunu çağırdı ve saldırı sözleşmesindeki kötü niyetlifallback()fonksiyonunu tetikledi.fallback()"kaldıraç penceresi" açık durumdayken çağrıldığından, saldırı sözleşmesiglobalShortAveragePrice'ı güncellemeden doğrudan Vault sözleşmesiyle etkileşime girerek (increasePosition()aracılığıyla) bir WBTC-kısa pozisyon açtı ve ardından bir WBTC-kısa emir azaltması/kapatma emri oluşturdu.
-
(İşlem 6) Bir Keeper, yönlendirici yürütme yolu aracılığıyla WBTC-kısa emir azaltmasını (adım 5'te oluşturulan) yürüttü. Yürütme ayrıca
PositionRoutersözleşmesindeki fallback mekanizması aracılığıyla bir WETH-uzun emir azaltması oluşturdu.WBTC-kısa pozisyonu
globalShortAveragePricegüncellenmeden açıldığından, pozisyonu kapatırken değişkeni güncellemekglobalShortAveragePrice'da beklenmedik bir düşüşe neden oldu.
-
(İşlem 7-14) Saldırgan, adım 5-6'yı dört kez tekrarladı. Sonuç olarak
globalShortAveragePrice, 1.08e35'ten 1.9e33'e çarpıtıldı.
Kâr Gerçekleştirme Aşaması
-
(İşlem 15) Bir Keeper, emir defteri yürütme yolu aracılığıyla WETH-uzun emir azaltmasını (İşlem 14'te oluşturulan) yürüttü. Bu yürütme,
OrderBooksözleşmesindeki yeniden giriş açığı nedeniyle saldırı sözleşmesindeki kâr gerçekleştirme mantığını tetikledi.
-
Fallback çağrısında saldırı sözleşmesi önce 7.538.567e18 USDC tutarında bir flaş kredi aldı.
-
Saldırı sözleşmesi, 6.000.000e18 USDC kullanarak 4.129.578e18 GLP basmak için
mintAndStakeGlp()fonksiyonunu çağırdı. -
Saldırı sözleşmesi, kalan 1.538.567e18 USDC ile bir WBTC-kısa pozisyon açmak için
Vault.increasePosition()fonksiyonunu çağırdı. WBTC'nin küresel açığa satış verileri son derece çarpıtılmış olduğundan, emir yürütme AUM'u önemli ölçüde artırdı ve GLP fiyatını keskin biçimde yükseltti. -
Saldırı sözleşmesi,
Vaultsözleşmesindeki birden fazla varlık için yükseltilmiş fiyat üzerinden GLP kullandırmak amacıylaunstakeAndRedeemGlp()fonksiyonunu çağırdı. -
Saldırı sözleşmesi, WBTC-kısa pozisyonu kapatmak için
Vault.decreasePosition()fonksiyonunu çağırdı. -
Saldırı sözleşmesi,
Vaultsözleşmesindeki tüm varlıkları tüketmek için 8.b-8.e adımlarını dört kez tekrarladı. -
Saldırı sözleşmesi, yaklaşık 42 milyon dolar kârla flaş krediyi geri ödedi.
-
Geri Ödeme
Saldırganla yürütülen müzakereler (İşlem 16-18) sonucunda saldırgan %10 ödül kabul etti ve çalınan varlıkların geri kalanını iade etti (İşlem 19-21).
Özet
Bu olay, Arbitrum üzerindeki GMX V1'e karşı çok aşamalı bir istismarı kapsadı ve tahminen 42 milyon dolarlık bir kayıpla sonuçlandı. Saldırgan, globalShortAveragePrice değişkenini çarpıtmak ve GLP fiyatını şişirmek için OrderBook sözleşmesindeki yeniden giriş açığını istismar etti. Saldırgan, manipüle edilmiş fiyattan yararlanarak önemli miktarda varlık sifon etti.
Temel dersler:
- Çapraz sözleşme yeniden girişi: Tek bir sözleşmedeki
nonReentrantniteleyicisi, aynı sistem içindeki diğer sözleşmelere yeniden girişi engellemez. Geçici bir bayrana dayanan erişim kontrol mekanizmaları (ör. "kaldıraç penceresi"), bayrak sıfırlanmadan önce harici bir çağrı gerçekleştiğinde atlatılabilir. - Operasyonel Güvenlik: Bu saldırgan, protokolü üç ayrı aşamada istismar ederek toplam 15 işlem gerçekleştirdi. Bu olay, gerçek zamanlı izleme, hızlı uyarılar ve etkili müdahale planlarının kritik önemini vurgulamaktadır.
Referans
- https://x.com/GMX_IO/status/1942955807756165574
- https://x.com/GMX_IO/status/1943336664102756471
- GMX V1
BlockSec Hakkında
BlockSec, tam kapsamlı bir blok zinciri güvenliği ve kripto uyumluluk sağlayıcısıdır. Müşterilerin kod denetimi (akıllı sözleşmeler, blok zinciri ve cüzdanlar dahil) yapmasına, saldırıları gerçek zamanlı olarak engellemesine, olayları analiz etmesine, yasadışı fonları takip etmesine ve protokollerin ve platformların tam yaşam döngüsü boyunca AML/CFT yükümlülüklerini yerine getirmesine yardımcı olan ürünler ve hizmetler geliştiriyoruz.
BlockSec, saygın konferanslarda birden fazla blok zinciri güvenlik makalesi yayımlamış, DeFi uygulamalarının çeşitli sıfırıncı gün saldırılarını raporlamış, 20 milyon dolardan fazlasını kurtarmak için birden fazla saldırıyı engellemiş ve milyarlarca dolar değerinde kripto para güvence altına almıştır.
-
Resmi web sitesi: https://blocksec.com/
-
Resmi Twitter hesabı: https://twitter.com/BlockSecTeam



