Jarvis Network projesi Flaş Krediler yeniden giriş saldırısı analizi
Veriler, 15 Ocak 2023 17:43:37 UTC'de Jarvis_Network projesinin saldırıya uğradığını ve 663,101 MATIC kaybettiğini gösteriyor.
İşlem çağrı yığınını analiz ettiğimizde, likidite kaldırma sürecinde yeniden giriş mantığının bulunduğunu tespit ettik. Yeniden girişten önce ve sonra aynı sözleşmenin aynı fonksiyonuna, aynı parametreler ile çağrı yapılıyor fakat dönen değerler arasında büyük farklılıklar var:
Yeniden girişten önce: 1,002,157,321,772,769,944
Yeniden girişte: 10,091,002,696,492,234,934
Reentrancy, remove_liquidity fonksiyonunda meydana gelir. Bu fonksiyon, likiditeyi kaldırırken kullanıcının eklediği tokenleri geri döndürür. Polygon ve EVM homomorfik zincirler olduğundan, MATIC'in sözleşmeye aktarılması sözleşmenin reentrancy'sini tetikler.
Derinlemesine analiz, sorunun getUnderlyingPrice fonksiyonunun uygulanmasında olduğunu ortaya koyuyor. Bu fonksiyon, bir dizi iç hesaplama ve dış çağrılarla ilgilidir, burada anahtar, get_virtual_price fonksiyonunun döndürdüğü değerdir.
get_virtual_price fonksiyonunun döndürdüğü değer self.D değişkeninden etkilenir. remove_liquidity fonksiyonunda, self.D'nin güncellenmesi token transferinden sonra gerçekleşir. Saldırgan likiditeyi kaldırırken, MATIC saldırı sözleşmesine transfer edilir ve fallback geri çağrısı sırasında önce token fiyatı sorgulanır. self.D henüz güncellenmediği için fiyat alma hatası oluşur.
remove_liquidity fonksiyonu akışı:
Kullanıcı LP'sini yok et
Kullanıcı teminat fonlarını gönder
self.D'yi güncelle
Saldırgan, 2. adımda yeniden giriş yaparak güncellenmemiş self.D değerini kullanarak borç aldı ve normal fiyatın 10 katı kadar fon elde etti.
remove_liquidity fonksiyonu '@nonreentrant('lock')' kullanarak yeniden girişleri önlese de, saldırganlar bu koruma mekanizmasını sözleşmeler arası yeniden giriş ile aşmayı başardı.
Bu saldırı birkaç önemli sorunu ortaya koydu:
Değişken değiştirme mantığı dış çağrıdan sonra, fiyat alma anormalliğine neden oldu.
Sözleşmeler arası yeniden giriş, yeniden giriş kilidini devre dışı bırakır.
Güvenliği artırmak için proje sahipleri şunları yapmalıdır:
Sıkı güvenlik denetimleri gerçekleştirin
Değişken değişikliklerini dışarıdan çağırmadan önce yapın
Fiyat almak için birden fazla veri kaynağı kullanma
"Önce değerlendir, sonra değişkene yaz, ardından dış çağrı yap" kodlama standardına uy.
Bu önlemler sayesinde, projenin güvenliği ve istikrarı önemli ölçüde artırılabilir ve benzer saldırıların etkili bir şekilde önlenmesi sağlanabilir.
View Original
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.
11 Likes
Reward
11
5
Share
Comment
0/400
DisillusiionOracle
· 07-25 05:19
Yine balık patlayarak öldü.
View OriginalReply0
FlatlineTrader
· 07-23 14:13
Bir enayiler daha kutu yemeği aldı.
View OriginalReply0
MidnightGenesis
· 07-23 14:09
Kod karışıklığı yeterince değil, bu çoktan olmalıydı.
View OriginalReply0
CryptoGoldmine
· 07-23 13:59
Bir veri kanıtı daha: akıllı sözleşmeler geriye dönük kazanç kaybı 65w
Jarvis Network, Flaş Krediler ile yeniden giriş saldırısına uğradı ve 663,101 MATIC kaybetti.
Jarvis Network projesi Flaş Krediler yeniden giriş saldırısı analizi
Veriler, 15 Ocak 2023 17:43:37 UTC'de Jarvis_Network projesinin saldırıya uğradığını ve 663,101 MATIC kaybettiğini gösteriyor.
İşlem çağrı yığınını analiz ettiğimizde, likidite kaldırma sürecinde yeniden giriş mantığının bulunduğunu tespit ettik. Yeniden girişten önce ve sonra aynı sözleşmenin aynı fonksiyonuna, aynı parametreler ile çağrı yapılıyor fakat dönen değerler arasında büyük farklılıklar var:
Reentrancy, remove_liquidity fonksiyonunda meydana gelir. Bu fonksiyon, likiditeyi kaldırırken kullanıcının eklediği tokenleri geri döndürür. Polygon ve EVM homomorfik zincirler olduğundan, MATIC'in sözleşmeye aktarılması sözleşmenin reentrancy'sini tetikler.
Derinlemesine analiz, sorunun getUnderlyingPrice fonksiyonunun uygulanmasında olduğunu ortaya koyuyor. Bu fonksiyon, bir dizi iç hesaplama ve dış çağrılarla ilgilidir, burada anahtar, get_virtual_price fonksiyonunun döndürdüğü değerdir.
get_virtual_price fonksiyonunun döndürdüğü değer self.D değişkeninden etkilenir. remove_liquidity fonksiyonunda, self.D'nin güncellenmesi token transferinden sonra gerçekleşir. Saldırgan likiditeyi kaldırırken, MATIC saldırı sözleşmesine transfer edilir ve fallback geri çağrısı sırasında önce token fiyatı sorgulanır. self.D henüz güncellenmediği için fiyat alma hatası oluşur.
remove_liquidity fonksiyonu akışı:
Saldırgan, 2. adımda yeniden giriş yaparak güncellenmemiş self.D değerini kullanarak borç aldı ve normal fiyatın 10 katı kadar fon elde etti.
remove_liquidity fonksiyonu '@nonreentrant('lock')' kullanarak yeniden girişleri önlese de, saldırganlar bu koruma mekanizmasını sözleşmeler arası yeniden giriş ile aşmayı başardı.
Bu saldırı birkaç önemli sorunu ortaya koydu:
Güvenliği artırmak için proje sahipleri şunları yapmalıdır:
Bu önlemler sayesinde, projenin güvenliği ve istikrarı önemli ölçüde artırılabilir ve benzer saldırıların etkili bir şekilde önlenmesi sağlanabilir.