Jarvis Network projesi Flaş Krediler geri alma saldırısı analizi
15 Ocak 2023'te, Jarvis_Network projesi saldırıya uğradı ve 663,101 MATIC kaybedildi. Saldırı işleminin çağrı yığınını analiz ederek, bir reentrancy (yeniden giriş) mantığı olduğu tespit edildi. Yeniden giriş sürecinde, aynı sözleşmenin aynı fonksiyonunun çağrısı yapılırken, parametreler aynı olmasına rağmen dönen değerler büyük farklılıklar gösterdi.
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 EVM ile eşleştiğinden, MATIC'in sözleşmeye transferi reentrancy'i tetikler.
Derinlemesine analiz, sorunun getUnderlyingPrice fonksiyonunun uygulanmasında olduğunu ortaya koyuyor. Bu fonksiyon, birçok sözleşme çağrısını içeriyor ve nihayetinde get_virtual_price fonksiyonunun döndürdüğü değeri etkiliyor. get_virtual_price fonksiyonunun döndürdüğü değer, self.D değişkeninden etkileniyor ve self.D'nin güncellenmesi transferden sonra gerçekleştiriliyor.
Saldırgan, likiditeyi kaldırdığında, MATIC saldırı sözleşmesine transfer edilir ve fiyatı sorgulamak için fallback fonksiyonu çağrılır. self.D güncellemesinin transferden sonra gerçekleşmesi, önceki fiyatın yanlış alınmasına neden olur. Likiditeyi kaldırma işlem süreci şöyledir: 1) kullanıcı LP'sini yok et; 2) kullanıcı staking fonlarını gönder; 3) self.D'yi güncelle.
self.D, fiyat hesaplaması için kullanılır ve likidite eklenirken de güncellenir. Saldırganın likidite fonları oldukça büyük, normalde self.D değeri çok daha düşük olacaktır. Ancak saldırgan, adım 2'de yeniden giriş yapar ve orijinal fiyatın 10 katı bir fiyatla borç alır. Bunun nedeni, likidite eklendiğinde self.D değerinin artması ve likidite kaldırıldığında zamanında güncellenmemesidir.
remove_liquidity yöntemi @nonreentrant('lock') kullanarak reentrancy'i önlese de, saldırgan diğer sözleşmelere reenter ederek borç para alabilir ve reentrancy kilidini etkisiz hale getirebilir.
Bu saldırının başlıca nedeni, dış çağrıdan sonra değişken değiştirme mantığının bozulması ve fiyat alımında anormallik yaratmasıdır. Sözleşten sözleşmeye yeniden giriş, yeniden giriş kilidini etkisiz hale getirmiştir. Proje sahiplerine sıkı bir güvenlik denetimi yapmalarını, değişken değiştirmeyi dış çağrılardan önce yapmalarını ve çoklu veri kaynakları kullanarak fiyat alma yöntemini benimsemelerini öneririz. "Önce kontrol et, sonra değişkeni yaz, ardından dış çağrı yap" kodlama standartlarına (Checks-Effects-Interactions) uymak, projenin güvenliğini ve istikrarını artırabilir.
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
7
Repost
Share
Comment
0/400
All-InQueen
· 08-05 00:42
Blok Zinciri tekrar patladı 麻了
View OriginalReply0
HalfBuddhaMoney
· 08-02 05:37
Bu kadarını elde edemem ki...
View OriginalReply0
ZeroRushCaptain
· 08-02 05:37
Yine bir kişi daha kaybedildi, tüm birikimler suya gitti. Kaybeden Sam Altman saldır!
View OriginalReply0
ForkLibertarian
· 08-02 05:29
El hızı bu kadar yavaş, Kesinti Kaybı Rug Pull bile geçti.
View OriginalReply0
StakeTillRetire
· 08-02 05:24
Bir başka yeniden giriş felaketi, kapandı.
View OriginalReply0
SighingCashier
· 08-02 05:13
Başına iş açtın değil mi? Yine bir yeniden giriş açığı.
Jarvis Network Flaş Krediler reentrancy saldırısına uğradı, 663,101 MATIC kaybetti.
Jarvis Network projesi Flaş Krediler geri alma saldırısı analizi
15 Ocak 2023'te, Jarvis_Network projesi saldırıya uğradı ve 663,101 MATIC kaybedildi. Saldırı işleminin çağrı yığınını analiz ederek, bir reentrancy (yeniden giriş) mantığı olduğu tespit edildi. Yeniden giriş sürecinde, aynı sözleşmenin aynı fonksiyonunun çağrısı yapılırken, parametreler aynı olmasına rağmen dönen değerler büyük farklılıklar gösterdi.
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 EVM ile eşleştiğinden, MATIC'in sözleşmeye transferi reentrancy'i tetikler.
Derinlemesine analiz, sorunun getUnderlyingPrice fonksiyonunun uygulanmasında olduğunu ortaya koyuyor. Bu fonksiyon, birçok sözleşme çağrısını içeriyor ve nihayetinde get_virtual_price fonksiyonunun döndürdüğü değeri etkiliyor. get_virtual_price fonksiyonunun döndürdüğü değer, self.D değişkeninden etkileniyor ve self.D'nin güncellenmesi transferden sonra gerçekleştiriliyor.
Saldırgan, likiditeyi kaldırdığında, MATIC saldırı sözleşmesine transfer edilir ve fiyatı sorgulamak için fallback fonksiyonu çağrılır. self.D güncellemesinin transferden sonra gerçekleşmesi, önceki fiyatın yanlış alınmasına neden olur. Likiditeyi kaldırma işlem süreci şöyledir: 1) kullanıcı LP'sini yok et; 2) kullanıcı staking fonlarını gönder; 3) self.D'yi güncelle.
self.D, fiyat hesaplaması için kullanılır ve likidite eklenirken de güncellenir. Saldırganın likidite fonları oldukça büyük, normalde self.D değeri çok daha düşük olacaktır. Ancak saldırgan, adım 2'de yeniden giriş yapar ve orijinal fiyatın 10 katı bir fiyatla borç alır. Bunun nedeni, likidite eklendiğinde self.D değerinin artması ve likidite kaldırıldığında zamanında güncellenmemesidir.
remove_liquidity yöntemi @nonreentrant('lock') kullanarak reentrancy'i önlese de, saldırgan diğer sözleşmelere reenter ederek borç para alabilir ve reentrancy kilidini etkisiz hale getirebilir.
Bu saldırının başlıca nedeni, dış çağrıdan sonra değişken değiştirme mantığının bozulması ve fiyat alımında anormallik yaratmasıdır. Sözleşten sözleşmeye yeniden giriş, yeniden giriş kilidini etkisiz hale getirmiştir. Proje sahiplerine sıkı bir güvenlik denetimi yapmalarını, değişken değiştirmeyi dış çağrılardan önce yapmalarını ve çoklu veri kaynakları kullanarak fiyat alma yöntemini benimsemelerini öneririz. "Önce kontrol et, sonra değişkeni yaz, ardından dış çağrı yap" kodlama standartlarına (Checks-Effects-Interactions) uymak, projenin güvenliğini ve istikrarını artırabilir.