GMX, bir siber saldırıya uğradı ve 40 milyon dolardan fazla kayıp yaşadı. Saldırganlar, bir reentrancy açığını kullanarak, sözleşmenin kaldıraç özelliği etkinleştirildiğinde kısa pozisyon açarak saldırıyı gerçekleştirdi.
Sorunun kökeni, executeDecreaseOrder fonksiyonunun yanlış bir şekilde kullanılmasıdır. Bu fonksiyonun ilk parametresi dış hesap (EOA) olmalıydı, ancak saldırgan bir akıllı sözleşme adresi gönderdi. Bu, saldırgana geri çekim sürecinde sisteme yeniden girmesine, iç durumu manipüle etmesine ve nihayetinde geri çekilen varlıkların, gerçek sahip olduğu GLP değerinden çok daha fazla olmasına olanak tanıdı.
GLP normal geri alma mekanizması
GMX'te GLP, hazine varlıklarına (USDC, ETH, WBTC gibi) karşılık gelen likidite sağlayıcı token'ıdır. Kullanıcı unstakeAndRedeemGlp'yi çağırdığında, sistem iade edilecek varlık miktarını hesaplamak için aşağıdaki formülü kullanır:
AUM (Yönetim Altındaki Varlıkların Toplamı) hesaplama yöntemi şudur:
AUM = Tüm token havuzlarının toplam değeri + Küresel kısa pozisyonların gerçekleşmemiş kaybı - Küresel kısa pozisyonların gerçekleşmemiş kârı - Ayrılmış miktar - Önceden belirlenen kesinti (aumDeduction)
Bu mekanizma, GLP sahiplerinin hazineye ait gerçek varlık paylarını orantılı olarak almasını garanti eder.
Kaldıraç açıldıktan sonraki sorun
enableLeverage açıldığında, kullanıcılar kaldıraç pozisyonu (uzun veya kısa) açabilir. Saldırgan, GLP'yi geri çekmeden önce büyük bir WBTC kısa pozisyonu açtı.
Kısa pozisyon açıldığında küresel kısa pozisyon büyüklüğü arttığından, fiyat değişmediği sürece sistem bu kısa pozisyonun zarar ettiğini varsayar ve bu gerçekleşmemiş zarar hazine'nin "varlık" olarak sayılır, bu da AUM'un yapay olarak artmasına neden olur. Hazine gerçekte ek bir değer elde etmemiş olsa da, geri çekim hesaplaması bu abartılmış AUM'a dayanarak yapılır, bu da saldırganın hak ettiğinden çok daha fazla varlık elde etmesine yol açar.
Saldırı süreci
Saldırı işlemi
Sonuç olarak yazılmıştır
Bu saldırı, GMX'in kaldıraç mekanizması ve yeniden giriş koruma tasarımındaki ciddi kusurları ortaya çıkardı. Temel sorun, varlık geri alma mantığının AUM'a olan güvenin aşırı olması ve bileşenlerine (örneğin, gerçekleşmemiş kayıplar) yeterli dikkatli güvenlik kontrolü yapılmamasıdır. Ayrıca, ana fonksiyonların çağıran kişinin kimliğine ilişkin varsayımları (EOA vs. sözleşme) zorunlu doğrulama eksikliği taşımaktadır. Bu olay, geliştiricilere, fonların hassas işlemlerini içeren durumlarda, sistem durumunun manipüle edilemeyeceğinden emin olmaları gerektiğini bir kez daha hatırlatmaktadır; özellikle karmaşık finansal mantıklar (kaldıraç, türev ürünler gibi) dahil edildiğinde, yeniden giriş ve durum kirlenmesi nedeniyle ortaya çıkabilecek sistemik risklere karşı dikkatli olunmalıdır.
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: GMX saldırı prensibi analizi
Yazı: BlockSec
GMX, bir siber saldırıya uğradı ve 40 milyon dolardan fazla kayıp yaşadı. Saldırganlar, bir reentrancy açığını kullanarak, sözleşmenin kaldıraç özelliği etkinleştirildiğinde kısa pozisyon açarak saldırıyı gerçekleştirdi.
Sorunun kökeni, executeDecreaseOrder fonksiyonunun yanlış bir şekilde kullanılmasıdır. Bu fonksiyonun ilk parametresi dış hesap (EOA) olmalıydı, ancak saldırgan bir akıllı sözleşme adresi gönderdi. Bu, saldırgana geri çekim sürecinde sisteme yeniden girmesine, iç durumu manipüle etmesine ve nihayetinde geri çekilen varlıkların, gerçek sahip olduğu GLP değerinden çok daha fazla olmasına olanak tanıdı.
GLP normal geri alma mekanizması
GMX'te GLP, hazine varlıklarına (USDC, ETH, WBTC gibi) karşılık gelen likidite sağlayıcı token'ıdır. Kullanıcı unstakeAndRedeemGlp'yi çağırdığında, sistem iade edilecek varlık miktarını hesaplamak için aşağıdaki formülü kullanır:
redeem_amount = (user_GLP / total_GLP_supply) * AUM
AUM (Yönetim Altındaki Varlıkların Toplamı) hesaplama yöntemi şudur:
AUM = Tüm token havuzlarının toplam değeri + Küresel kısa pozisyonların gerçekleşmemiş kaybı - Küresel kısa pozisyonların gerçekleşmemiş kârı - Ayrılmış miktar - Önceden belirlenen kesinti (aumDeduction)
Bu mekanizma, GLP sahiplerinin hazineye ait gerçek varlık paylarını orantılı olarak almasını garanti eder.
Kaldıraç açıldıktan sonraki sorun
enableLeverage açıldığında, kullanıcılar kaldıraç pozisyonu (uzun veya kısa) açabilir. Saldırgan, GLP'yi geri çekmeden önce büyük bir WBTC kısa pozisyonu açtı.
Kısa pozisyon açıldığında küresel kısa pozisyon büyüklüğü arttığından, fiyat değişmediği sürece sistem bu kısa pozisyonun zarar ettiğini varsayar ve bu gerçekleşmemiş zarar hazine'nin "varlık" olarak sayılır, bu da AUM'un yapay olarak artmasına neden olur. Hazine gerçekte ek bir değer elde etmemiş olsa da, geri çekim hesaplaması bu abartılmış AUM'a dayanarak yapılır, bu da saldırganın hak ettiğinden çok daha fazla varlık elde etmesine yol açar.
Saldırı süreci
Saldırı işlemi
Sonuç olarak yazılmıştır
Bu saldırı, GMX'in kaldıraç mekanizması ve yeniden giriş koruma tasarımındaki ciddi kusurları ortaya çıkardı. Temel sorun, varlık geri alma mantığının AUM'a olan güvenin aşırı olması ve bileşenlerine (örneğin, gerçekleşmemiş kayıplar) yeterli dikkatli güvenlik kontrolü yapılmamasıdır. Ayrıca, ana fonksiyonların çağıran kişinin kimliğine ilişkin varsayımları (EOA vs. sözleşme) zorunlu doğrulama eksikliği taşımaktadır. Bu olay, geliştiricilere, fonların hassas işlemlerini içeren durumlarda, sistem durumunun manipüle edilemeyeceğinden emin olmaları gerektiğini bir kez daha hatırlatmaktadır; özellikle karmaşık finansal mantıklar (kaldıraç, türev ürünler gibi) dahil edildiğinde, yeniden giriş ve durum kirlenmesi nedeniyle ortaya çıkabilecek sistemik risklere karşı dikkatli olunmalıdır.