Jarvis Network Flaş Krediler yeniden giriş saldırısına maruz kaldı analizi
15 Ocak 2023'te, Jarvis_Network projesi büyük bir saldırı olayına maruz kaldı ve 663,101 MATIC kaybedildi. Bu saldırı, Flaş Krediler ve yeniden giriş saldırısının kombinasyonunu kullanarak projenin sözleşmelerindeki ciddi açıkları ortaya çıkardı.
Saldırgan, remove_liquidity fonksiyonundaki bir açığı ustaca kullandı. Bu fonksiyon, likidite kaldırıldığında kullanıcı tarafından eklenen tokenleri geri döndürür. Polygon zinciri EVM ile uyumlu olduğundan, MATIC sözleşmeye aktarıldığında, sözleşmenin yeniden giriş mantığı tetiklenir.
Analizler, saldırının anahtarının getUnderlyingPrice fonksiyonunun çağrısında yattığını ortaya koydu. Bu fonksiyon, yeniden girişten önce ve sonra önemli ölçüde farklı fiyatlar döndürüyor: yeniden girişten önce 1002157321772769944, yeniden girişten sonra ise 10091002696492234934'e kadar çıkıyor, aradaki fark neredeyse 10 kat.
Sorunun kaynağı, sözleşmenin self.D değişkenini güncelleme zamanlamasının yanlış olmasıdır. remove_liquidity fonksiyonunun yürütme sırası şudur: 1) kullanıcı LP tokenlerini yok et; 2) staking fonlarını kullanıcıya gönder; 3) self.D'yi güncelle. Saldırgan, ikinci adımda re-entrancy gerçekleştirdi ve henüz güncellenmemiş self.D değerini kullanarak yanlış fiyat bilgisi elde etti ve böylece kârlı bir borç verme işlemi gerçekleştirdi.
Remove_liquidity fonksiyonu, yeniden girişleri önlemek için '@nonreentrant('lock')' dekoratörünü kullansa da, saldırının çapraz sözleşme işlemlerini içermesi nedeniyle bu koruma önlemi etkili olamamıştır.
Bu olay birkaç temel güvenlik ilkesini ön plana çıkardı:
Değişken değişiklikleri, durum tutarsızlığını önlemek için dış çağrılardan önce tamamlanmalıdır.
Fiyat alma mekanizması çoklu veri kaynağı yöntemi kullanmalı, güvenilirliği artırmalıdır.
Kod mantığı "Kontrol-Etkiler-Etkileşimler" (Checks-Effects-Interactions) modelini takip etmelidir; önce koşul kontrolü yapılmalı, ardından durum değişkenleri değiştirilmelidir, en son olarak da dış çağrılar yapılmalıdır.
Bu saldırı, akıllı sözleşmelerin güvenlik denetiminin ne kadar önemli olduğunu bir kez daha kanıtladı. Proje ekipleri, sözleşmelerin güvenliğine daha fazla önem vermeli ve kodun kapsamlı ve titiz bir şekilde denetlendiğinden emin olmalıdır, böylece benzer açıkların ortaya çıkmasını önleyebiliriz.
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.
Jarvis Network, Flaş Krediler ile yeniden giriş saldırısına uğradı ve 66 bin MATIC kaybetti.
Jarvis Network Flaş Krediler yeniden giriş saldırısına maruz kaldı analizi
15 Ocak 2023'te, Jarvis_Network projesi büyük bir saldırı olayına maruz kaldı ve 663,101 MATIC kaybedildi. Bu saldırı, Flaş Krediler ve yeniden giriş saldırısının kombinasyonunu kullanarak projenin sözleşmelerindeki ciddi açıkları ortaya çıkardı.
Saldırgan, remove_liquidity fonksiyonundaki bir açığı ustaca kullandı. Bu fonksiyon, likidite kaldırıldığında kullanıcı tarafından eklenen tokenleri geri döndürür. Polygon zinciri EVM ile uyumlu olduğundan, MATIC sözleşmeye aktarıldığında, sözleşmenin yeniden giriş mantığı tetiklenir.
Analizler, saldırının anahtarının getUnderlyingPrice fonksiyonunun çağrısında yattığını ortaya koydu. Bu fonksiyon, yeniden girişten önce ve sonra önemli ölçüde farklı fiyatlar döndürüyor: yeniden girişten önce 1002157321772769944, yeniden girişten sonra ise 10091002696492234934'e kadar çıkıyor, aradaki fark neredeyse 10 kat.
Sorunun kaynağı, sözleşmenin self.D değişkenini güncelleme zamanlamasının yanlış olmasıdır. remove_liquidity fonksiyonunun yürütme sırası şudur: 1) kullanıcı LP tokenlerini yok et; 2) staking fonlarını kullanıcıya gönder; 3) self.D'yi güncelle. Saldırgan, ikinci adımda re-entrancy gerçekleştirdi ve henüz güncellenmemiş self.D değerini kullanarak yanlış fiyat bilgisi elde etti ve böylece kârlı bir borç verme işlemi gerçekleştirdi.
Remove_liquidity fonksiyonu, yeniden girişleri önlemek için '@nonreentrant('lock')' dekoratörünü kullansa da, saldırının çapraz sözleşme işlemlerini içermesi nedeniyle bu koruma önlemi etkili olamamıştır.
Bu olay birkaç temel güvenlik ilkesini ön plana çıkardı:
Bu saldırı, akıllı sözleşmelerin güvenlik denetiminin ne kadar önemli olduğunu bir kez daha kanıtladı. Proje ekipleri, sözleşmelerin güvenliğine daha fazla önem vermeli ve kodun kapsamlı ve titiz bir şekilde denetlendiğinden emin olmalıdır, böylece benzer açıkların ortaya çıkmasını önleyebiliriz.