Jarvis Network Flaş Krediler yeniden giriş saldırısı analizi
Son zamanlarda, Jarvis_Network adlı bir proje Flaş Krediler yeniden giriş saldırısına maruz kaldı ve yaklaşık 66.3 bin MATIC token kaybına neden oldu. Bu olay 15 Ocak 2023 akşamı gerçekleşti.
İşlem çağrı yığınını derinlemesine analiz ederek, saldırganların yeniden giriş açığını kullandığını tespit ettik. Yeniden giriş sürecinde, aynı sözleşmenin aynı fonksiyonu birden fazla kez çağrıldı, ancak her çağrının geri dönüş değeri arasında büyük farklılıklar vardı. Bu fark, özellikle remove_liquidity fonksiyonunda belirgindi.
Reentrancy saldırısı, likiditenin kaldırılması sürecinde meydana gelir. Polygon ve EVM homomorfik zincirler olduğundan, MATIC sözleşmeye transfer edildiğinde, sözleşmenin reentrancy mantığı tetiklenir. Çağrı yığınını detaylı bir şekilde analiz ederek, sorunun getUnderlyingPrice fonksiyonunda olduğunu keşfettik.
Daha fazla araştırma, saldırganların likiditeyi kaldırırken self.D değişkeninin güncellenme zamanlamasındaki açığı kullandığını ortaya koydu. Normalde, remove_liquidity yönteminin akışı şöyle olmalıdır: 1) kullanıcı LP'sini yok et; 2) kullanıcıya stake edilen fonları gönder; 3) self.D'yi güncelle. Ancak, saldırgan ikinci adımda yeniden giriş işlemi gerçekleştirdi ve bu da fiyat hesaplamasında ciddi hatalara yol açtı.
remove_liquidity fonksiyonu, reentrancy'yi önlemek için @nonreentrant('lock') dekoratörünü kullanmasına rağmen, saldırganın diğer sözleşmelere kredi fonları için yeniden girmesi nedeniyle bu yeniden giriş kilidi etkili olmamıştır.
Bu saldırı esasen iki sorunu ortaya çıkardı:
Değişken değiştirme mantığı dış çağrıdan sonra yer alıyor, bu da fiyat alımında anormallik yaratıyor.
Kontratlar arası tekrar girişi, tekrar giriş kilidinin etkisiz hale gelmesine neden olur.
Benzer saldırıları önlemek için, proje sahiplerinin aşağıdaki önlemleri alması önerilir:
Kodun titiz bir güvenlik denetiminden geçtiğinden emin olun.
Değişken değişikliklerini dış çağrılardan önce yerleştirin.
Fiyat elde etmek için çoklu veri kaynağı yöntemi kullanmak.
"Önce kontrol et, sonra değişkenlere yaz, ardından dış çağrıları yap" kodlama standartlarına (Checks-Effects-Interactions) uyun.
Bu önlemleri alarak, proje güvenliğini ve istikrarını önemli ölçüde artırabilir ve kullanıcılara daha güvenilir hizmetler sunabilir.
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.
9 Likes
Reward
9
2
Share
Comment
0/400
WalletAnxietyPatient
· 19h ago
Hem acemi hem de oyun oynamayı seven bireysel yatırımcı, özel anahtarını zamanında yedeklemeyi unutma.
Jarvis Network, Flaş Krediler ile yeniden giriş saldırısına uğradı ve 66.3 bin MATIC kaybetti.
Jarvis Network Flaş Krediler yeniden giriş saldırısı analizi
Son zamanlarda, Jarvis_Network adlı bir proje Flaş Krediler yeniden giriş saldırısına maruz kaldı ve yaklaşık 66.3 bin MATIC token kaybına neden oldu. Bu olay 15 Ocak 2023 akşamı gerçekleşti.
İşlem çağrı yığınını derinlemesine analiz ederek, saldırganların yeniden giriş açığını kullandığını tespit ettik. Yeniden giriş sürecinde, aynı sözleşmenin aynı fonksiyonu birden fazla kez çağrıldı, ancak her çağrının geri dönüş değeri arasında büyük farklılıklar vardı. Bu fark, özellikle remove_liquidity fonksiyonunda belirgindi.
Reentrancy saldırısı, likiditenin kaldırılması sürecinde meydana gelir. Polygon ve EVM homomorfik zincirler olduğundan, MATIC sözleşmeye transfer edildiğinde, sözleşmenin reentrancy mantığı tetiklenir. Çağrı yığınını detaylı bir şekilde analiz ederek, sorunun getUnderlyingPrice fonksiyonunda olduğunu keşfettik.
Daha fazla araştırma, saldırganların likiditeyi kaldırırken self.D değişkeninin güncellenme zamanlamasındaki açığı kullandığını ortaya koydu. Normalde, remove_liquidity yönteminin akışı şöyle olmalıdır: 1) kullanıcı LP'sini yok et; 2) kullanıcıya stake edilen fonları gönder; 3) self.D'yi güncelle. Ancak, saldırgan ikinci adımda yeniden giriş işlemi gerçekleştirdi ve bu da fiyat hesaplamasında ciddi hatalara yol açtı.
remove_liquidity fonksiyonu, reentrancy'yi önlemek için @nonreentrant('lock') dekoratörünü kullanmasına rağmen, saldırganın diğer sözleşmelere kredi fonları için yeniden girmesi nedeniyle bu yeniden giriş kilidi etkili olmamıştır.
Bu saldırı esasen iki sorunu ortaya çıkardı:
Benzer saldırıları önlemek için, proje sahiplerinin aşağıdaki önlemleri alması önerilir:
Bu önlemleri alarak, proje güvenliğini ve istikrarını önemli ölçüde artırabilir ve kullanıcılara daha güvenilir hizmetler sunabilir.
İçerik dili: Çince
Verilen yorum:
Sözleşme denetimi yapılmadan bu zararı çekmek ~