Jarvis Network projesi Flaş Krediler tekrar giriş saldırısına uğradı analizi
15 Ocak 2023'te, Jarvis_Network projesi saldırıya uğradı ve 663,101 MATIC çalındı. Bu olay projelerin güvenliği konusunda endişelere yol açtı.
İşlemlerin çağrı yığınlarının analiziyle, saldırganların yeniden giriş açığını kullandığı keşfedildi. Yeniden giriş sürecinde, aynı sözleşmenin aynı fonksiyonuna yapılan çağrılarda, giriş parametreleri aynı olmasına rağmen, dönen değerlerde önemli farklılıklar görülmektedir. Bu farklılık özellikle remove_liquidity fonksiyonunda meydana gelmektedir.
Reentrancy saldırısı esas olarak bir akıllı sözleşmenin remove_liquidity fonksiyonunu hedef alır. Bu fonksiyon, likiditeyi kaldırırken kullanıcı tarafından eklenen tokenleri geri döndürür. Polygon ve EVM zincirlerinin homojenliği nedeniyle, MATIC'in sözleşmeye aktarılması reentrancy mantığını tetikler.
Daha fazla analiz, sorunun getUnderlyingPrice fonksiyonunun uygulanmasında olduğunu gösterdi. Bu fonksiyon, analizi zorlaştıran birden fazla açık kaynaklı olmayan sözleşmeyi içeriyor. Ancak, depolama alanlarını ve çağrı yığınını kontrol ederek, kritik değişkenlerin değerlerini ve fonksiyon çağrı yollarını çıkarabiliriz.
Saldırının özü, get_virtual_price fonksiyonunun dönüş değerinin yeniden girişten önce ve sonra belirgin şekilde değişmesidir. Bu değişim, self.D değişkeninin güncellenme zamanıyla ilgilidir. Normalde, self.D transfer tamamlandıktan sonra güncellenmelidir, ancak bu saldırıda, yeniden girişin gerçekleşmesi nedeniyle fiyat hesaplamasında hata meydana gelmiştir.
remove_liquidity fonksiyonunun yürütme süreci şunları içerir: 1) kullanıcı LP token'lerini yok etme; 2) stake edilen fonları kullanıcıya gönderme; 3) self.D değerini güncelleme. Saldırgan ikinci adımda yeniden giriş yaparak, zamanında güncellenmeyen self.D değerini kullanarak borç alır ve böylece haksız kazanç elde eder.
Dikkate değer bir husus, remove_liquidity fonksiyonunun reentrancy saldırılarını önlemek için @nonreentrant('lock') dekoratörünü kullanmasına rağmen, saldırganın yeniden giriş yaparak diğer sözleşmelere borç almak için girmesi nedeniyle bu yeniden giriş kilidinin beklenen etkisini göstermediğidir.
Bu saldırı, akıllı sözleşmelerdeki değişken güncelleme zamanlamasının önemini ortaya koydu. Güvenliği artırmak için proje sahiplerinin aşağıdaki önlemleri alması önerilmektedir:
Sıkı güvenlik denetimleri gerçekleştirin
Değişken değişikliklerinin dış çağrılardan önce tamamlandığından emin olun.
Fiyat bilgilerini elde etmek için çoklu veri kaynağı yöntemi kullanmak
"Kontroller-Etki-İletişim" (Checks-Effects-Interactions) modeline göre kod yazın.
Bu en iyi uygulamaların uygulanmasıyla, akıllı sözleşmelerin güvenliği ve istikrarı önemli ölçüde artırılabilir ve Web3 ekosistemine daha güvenilir bir altyapı 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.
Jarvis Network, Flaş Krediler aracılığıyla yeniden giriş saldırısına uğradı, 663,101 MATIC çalındı.
Jarvis Network projesi Flaş Krediler tekrar giriş saldırısına uğradı analizi
15 Ocak 2023'te, Jarvis_Network projesi saldırıya uğradı ve 663,101 MATIC çalındı. Bu olay projelerin güvenliği konusunda endişelere yol açtı.
İşlemlerin çağrı yığınlarının analiziyle, saldırganların yeniden giriş açığını kullandığı keşfedildi. Yeniden giriş sürecinde, aynı sözleşmenin aynı fonksiyonuna yapılan çağrılarda, giriş parametreleri aynı olmasına rağmen, dönen değerlerde önemli farklılıklar görülmektedir. Bu farklılık özellikle remove_liquidity fonksiyonunda meydana gelmektedir.
Reentrancy saldırısı esas olarak bir akıllı sözleşmenin remove_liquidity fonksiyonunu hedef alır. Bu fonksiyon, likiditeyi kaldırırken kullanıcı tarafından eklenen tokenleri geri döndürür. Polygon ve EVM zincirlerinin homojenliği nedeniyle, MATIC'in sözleşmeye aktarılması reentrancy mantığını tetikler.
Daha fazla analiz, sorunun getUnderlyingPrice fonksiyonunun uygulanmasında olduğunu gösterdi. Bu fonksiyon, analizi zorlaştıran birden fazla açık kaynaklı olmayan sözleşmeyi içeriyor. Ancak, depolama alanlarını ve çağrı yığınını kontrol ederek, kritik değişkenlerin değerlerini ve fonksiyon çağrı yollarını çıkarabiliriz.
Saldırının özü, get_virtual_price fonksiyonunun dönüş değerinin yeniden girişten önce ve sonra belirgin şekilde değişmesidir. Bu değişim, self.D değişkeninin güncellenme zamanıyla ilgilidir. Normalde, self.D transfer tamamlandıktan sonra güncellenmelidir, ancak bu saldırıda, yeniden girişin gerçekleşmesi nedeniyle fiyat hesaplamasında hata meydana gelmiştir.
remove_liquidity fonksiyonunun yürütme süreci şunları içerir: 1) kullanıcı LP token'lerini yok etme; 2) stake edilen fonları kullanıcıya gönderme; 3) self.D değerini güncelleme. Saldırgan ikinci adımda yeniden giriş yaparak, zamanında güncellenmeyen self.D değerini kullanarak borç alır ve böylece haksız kazanç elde eder.
Dikkate değer bir husus, remove_liquidity fonksiyonunun reentrancy saldırılarını önlemek için @nonreentrant('lock') dekoratörünü kullanmasına rağmen, saldırganın yeniden giriş yaparak diğer sözleşmelere borç almak için girmesi nedeniyle bu yeniden giriş kilidinin beklenen etkisini göstermediğidir.
Bu saldırı, akıllı sözleşmelerdeki değişken güncelleme zamanlamasının önemini ortaya koydu. Güvenliği artırmak için proje sahiplerinin aşağıdaki önlemleri alması önerilmektedir:
Bu en iyi uygulamaların uygulanmasıyla, akıllı sözleşmelerin güvenliği ve istikrarı önemli ölçüde artırılabilir ve Web3 ekosistemine daha güvenilir bir altyapı sağlanabilir.