Move dili referans güvenlik modülü yeni bir tamsayı taşma açığı keşfetti
Son zamanlarda, araştırmacılar Move dilini derinlemesine analiz ederken yeni bir tam sayı taşma açığı keşfettiler. Bu açık, referans güvenliği modülünde bulunmakta olup, ciddi bir hizmet reddi saldırısına yol açabilir. Bu makalede, bu açığın keşif süreci ve teknik detayları ayrıntılı olarak sunulacaktır.
Move dilinin referans güvenliği mekanizması
Move dili, Rust'ın fikirlerinden ilham alarak iki tür referans türünü destekler: değiştirilemez referans (&) ve değiştirilebilir referans (&mut). Referans güvenliği modülü, fonksiyonlardaki temel blokları ve bayt kodu talimatlarını tarayarak tüm referans işlemlerinin yasallığını doğrular.
Doğrulama süreci esasen aşağıdaki adımları içerir:
Her bir temel bloğu analiz et
Temel blok kodunu çalıştırarak post state oluştur
pre state ve post state'i birleştir
Blok durumunu güncelle ve sonraki bloklara ilet
Bunlar arasında, state, fonksiyon içinde referansların güvenliğini sağlamak için locals ve borrow graph adlı iki ana bileşeni içerir.
Açık Kayıt Detayları
Bu güvenlik açığı, güvenli modülü referans alan join_ fonksiyonunda ortaya çıkmaktadır. Fonksiyon parametre uzunluğu ve yerel değişken uzunluğunun toplamı 256'dan büyük olduğunda, u8 türünde locals'i yineleme kullanılması nedeniyle tam sayı taşması meydana gelir.
Özellikle:
iter_locals() u8 türünde bir iterator döner
Parametre uzunluğu + yerel değişken uzunluğu 256'dan büyük olduğunda taşma meydana gelir.
Geliştiricilerin bunu kontrol etme ihtiyacının farkında olduğu görünüyor, ancak gerçek kod yalnızca yerel değişken sayısını kontrol ediyor.
Açık Kullanımı
Bu açığı kullanarak bir döngü kod bloğu oluşturulabilir:
İlk çalıştırıldığında taşmayı tetikler, locals haritasını değiştirir.
İkinci kez çalıştırıldığında mevcut olmayan locals indeksine erişim, panik yaratır.
Bu, düğüm çökmesine ve hizmet reddi saldırısına neden olacaktır.
Açıkların Tekrarı
Araştırmacılar bu açığı yeniden üretmek için bir PoC sağladı:
parameters ve locals'ı SignatureIndex(0) olarak ayarlayın, num_locals'ı 264 yapın.
İlk yürütmeden sonra, yeni locals haritasının uzunluğu 8 oldu.
İkinci yürütme sırasında, copyloc(57) mevcut olmayan bir offset'e erişim sağlamak panic'e neden oldu.
Özet ve Öneriler
Bu güvenlik açığı şöyle diyor:
Kesinlikle güvenli bir kod yoktur, statik doğrulama atlatılabilir.
Kod denetimi çok önemlidir, geliştiricilerin dikkatsizliklerini bulabilir.
Move dili, yalnızca doğrulama aşamasındaki güvenlik kontrollerine dayanmak yerine, çalışma zamanı kontrollerini artırmalıdır.
Araştırmacılar, Move dilinin tasarımcılarını, benzer güvenlik açıklarının kullanılmasının daha ciddi sorunlara yol açmasını önlemek için çalışma zamanı güvenlik mekanizmalarını güçlendirmeye çağırıyor.
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.
14 Likes
Reward
14
7
Share
Comment
0/400
SmartContractWorker
· 3h ago
Yine kaynadı! Onarıma takıldım.
View OriginalReply0
staking_gramps
· 07-06 05:24
Move bu açık çok amatörce değil mi?
View OriginalReply0
ChainMaskedRider
· 07-06 05:22
Kod yazma yeteneği çok ince değil mi?
View OriginalReply0
MissedTheBoat
· 07-06 05:20
Yine bir açık ortaya çıktı, Move da pek iyi değil.
View OriginalReply0
GateUser-c799715c
· 07-06 05:19
Kodu kim yazdı, bu kadar kötü mü?
View OriginalReply0
YieldChaser
· 07-06 05:17
u8 yine sorun çıkardı
View OriginalReply0
BridgeJumper
· 07-06 05:09
Geliştirme düzensiz, hata düzeltirken iki damla gözyaşı.
Move dili referans güvenlik modülünde tamsayı taşma açığı bulundu. Bu, hizmet reddi saldırısına yol açabilir.
Move dili referans güvenlik modülü yeni bir tamsayı taşma açığı keşfetti
Son zamanlarda, araştırmacılar Move dilini derinlemesine analiz ederken yeni bir tam sayı taşma açığı keşfettiler. Bu açık, referans güvenliği modülünde bulunmakta olup, ciddi bir hizmet reddi saldırısına yol açabilir. Bu makalede, bu açığın keşif süreci ve teknik detayları ayrıntılı olarak sunulacaktır.
Move dilinin referans güvenliği mekanizması
Move dili, Rust'ın fikirlerinden ilham alarak iki tür referans türünü destekler: değiştirilemez referans (&) ve değiştirilebilir referans (&mut). Referans güvenliği modülü, fonksiyonlardaki temel blokları ve bayt kodu talimatlarını tarayarak tüm referans işlemlerinin yasallığını doğrular.
Doğrulama süreci esasen aşağıdaki adımları içerir:
Bunlar arasında, state, fonksiyon içinde referansların güvenliğini sağlamak için locals ve borrow graph adlı iki ana bileşeni içerir.
Açık Kayıt Detayları
Bu güvenlik açığı, güvenli modülü referans alan join_ fonksiyonunda ortaya çıkmaktadır. Fonksiyon parametre uzunluğu ve yerel değişken uzunluğunun toplamı 256'dan büyük olduğunda, u8 türünde locals'i yineleme kullanılması nedeniyle tam sayı taşması meydana gelir.
Özellikle:
Açık Kullanımı
Bu açığı kullanarak bir döngü kod bloğu oluşturulabilir:
Bu, düğüm çökmesine ve hizmet reddi saldırısına neden olacaktır.
Açıkların Tekrarı
Araştırmacılar bu açığı yeniden üretmek için bir PoC sağladı:
Özet ve Öneriler
Bu güvenlik açığı şöyle diyor:
Araştırmacılar, Move dilinin tasarımcılarını, benzer güvenlik açıklarının kullanılmasının daha ciddi sorunlara yol açmasını önlemek için çalışma zamanı güvenlik mekanizmalarını güçlendirmeye çağırıyor.