Reentrancy Nedir?
Reentrancy, sözleşmenin bir dış çağrı sırasında yeniden çağrılarak henüz tamamlanmamış durumundan yararlanılmasıdır.
Bu sayfada
Reentrancy nasıl bir açıktır?
Reentrancy, bir akıllı sözleşmenin dışarıya yaptığı çağrı sırasında aynı işlev akışına yeniden girilmesiyle ortaya çıkabilen güvenlik sorunudur. Türkçede “yeniden giriş” olarak anlatılır. Sözleşme kendi kayıtlarını tamamlamadan başka bir sözleşmeye kontrol verirse, karşı taraf bu eksik güncellenmiş durumu kullanabilir.
Her yeniden çağrı saldırı değildir. Sorun, tekrar girişin uygulamanın beklediği işlem sırasını bozarak yetkisiz sonuç üretmesidir. Hangi işlevlerin birbirini çağırabildiği ve paylaşılan kayıtların ne zaman güncellendiği belirleyicidir.
Basit para çekme örneği
Bir sözleşmenin önce kullanıcıya para gönderdiğini, ardından kullanıcının iç bakiyesini sıfırladığını düşünün. Alıcı sözleşme, para geldiği anda ilk sözleşmeyi tekrar çağırabilir. İç bakiye henüz sıfırlanmadığı için sistem ikinci çekimi de uygun sanabilir. İşlem aynı zincirleme çağrı içinde tekrarlanırsa beklenenden fazla ödeme yapılabilir.
Bu örnek sorunun mantığını gösterir; gerçek açıklar farklı işlevler veya farklı sözleşmeler arasında da oluşabilir. Yalnızca tek para çekme fonksiyonuna bakmak bütün riski açıklamayabilir.
Nasıl önlenir, kullanıcı ne anlayabilir?
Geliştiriciler kayıtları dış çağrıdan önce güncelleme, yeniden giriş kilidi kullanma ve işlevler arası etkileri denetleme gibi yöntemler uygular. Ancak bir güvenlik aracının bulunması bütün tasarımın doğru olduğu anlamına gelmez. Korumanın nerede ve nasıl kullanıldığı önemlidir.
Kullanıcı için “reentrancy korumalı” ifadesi tek başına güvenlik sertifikası değildir. Denetim raporunun hangi kod sürümünü kapsadığı ve daha sonra değişiklik yapılıp yapılmadığı incelenmelidir. Bu tür açıklar imza vermiş olmanın ötesinde, uygulamanın tuttuğu ortak fonları da etkileyebilir; cüzdan bağlantısını kesmek geçmişte yatırılan varlıkları sözleşmeden çıkarmaz.