Move dilinde güvenlik modülünde yeni bir tam sayı taşma açığı bulundu
Son zamanlarda, Move dilini derinlemesine incelerken yeni bir tamsayı taşma açığı keşfedildi. Bu açık, referans güvenliği doğrulama modülünde bulunmaktadır ve tetikleme süreci oldukça ilginçtir. Bu makalede, bu açığı derinlemesine analiz edeceğiz ve ilgili Move dili arka plan bilgilerini tanıtacağız.
Move dilinde byte kodu çalıştırılmadan önce kod birimleri doğrulanır, bu doğrulama süreci 4 adıma ayrılır. Bu keşfedilen güvenlik açığı reference_safety adımında ortaya çıkmıştır.
Referans güvenlik doğrulama modülü, boş referansların varlığını kontrol etmek, değişken referans erişiminin güvenli olup olmadığını ve küresel depolama referans erişiminin güvenli olup olmadığını kontrol etmekten sorumludur. Doğrulama süreci analyze_function fonksiyonundan başlar ve her temel blok için doğrulama yapılır.
Move dilinde, temel blok, giriş ve çıkış dışında dalga talimatı içermeyen kod dizisidir. Sistem, temel bloku belirlemek için bayt kodunu tarayarak tüm dalga talimatlarını ve döngü talimat dizilerini arar.
Move dilinde iki tür referans türü desteklenmektedir: değişmez referans (&) ve değiştirilebilir referans (&mut). Referans güvenliği modülü, bir fonksiyondaki her temel bloğun bytecode talimatlarını tarar ve tüm referans işlemlerinin geçerliliğini kontrol eder. Doğrulama süreci, fonksiyon içindeki referansların güvenliğini sağlamak için borrow graph ve locals adlı iki bileşeni içeren AbstractState yapısını kullanır.
Doğrulama sürecinde, sistem temel blok kodunu oluşturacak post state'i üretecek ve ardından pre state ile post state'i birleştirerek blok durumunu güncelleyecektir. Eğer durum değişirse ve bir döngü varsa, bu temel blok tekrar çalıştırılacaktır, ta ki post state pre state'e eşit olana veya bir hata oluşana kadar.
Hata, join_ fonksiyonunda meydana geliyor. Parametre uzunluğu ile yerel değişken uzunluğu 256'yı geçtiğinde, u8 türü ile locals'ı yinelemek, tam sayı taşmasına neden oluyor. Move dilinin locals sayısını kontrol eden bir süreci olsa da, yalnızca yerel değişken sayısını kontrol ediyor, parametre uzunluğunu kapsamıyor.
Bu tam sayı taşması, hizmet reddi saldırısına yol açabilir. Saldırgan, taşmayı kullanarak bloğun durumunu değiştiren bir döngü kod bloğu oluşturabilir. execute_block fonksiyonu tekrar çalıştırıldığında, eğer talimatın erişmesi gereken indeks yeni AbstractState locals haritasında yoksa, sistem çökmesine neden olur.
Bu açığı göstermek için, koşulsuz dalgıç talimatları içeren bir temel blok oluşturabiliriz. Uygun parametreler ve yerel değişken sayısını ayarlayarak, locals haritasının uzunluğunu 8'e taşmasını sağlayabiliriz. İkinci yürütmede, mevcut olmayan bir offset'e erişim denemesi panic ile sonuçlanacaktır.
Bu açık, özenle tasarlanmış dillerin bile güvenlik riskleri barındırabileceğini hatırlatıyor. Move dili için, beklenmedik durumların önüne geçmek amacıyla çalışma zamanında daha fazla kontrol kodu eklenmesi önerilmektedir. Şu anda Move, güvenlik kontrollerini çoğunlukla doğrulama aşamasında gerçekleştiriyor, ancak doğrulama atlatıldığında daha ciddi sorunlara yol açabilir.
Move dili güvenliği araştırmalarında öncülerden biri olarak, ilgili güvenlik sorunlarını derinlemesine keşfetmeye devam edeceğiz ve Move ekosisteminin sağlıklı gelişimine katkıda bulunacağız.
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.
Move dili referans güvenlik modülünde yeni bir tamsayı taşma açığı bulundu
Move dilinde güvenlik modülünde yeni bir tam sayı taşma açığı bulundu
Son zamanlarda, Move dilini derinlemesine incelerken yeni bir tamsayı taşma açığı keşfedildi. Bu açık, referans güvenliği doğrulama modülünde bulunmaktadır ve tetikleme süreci oldukça ilginçtir. Bu makalede, bu açığı derinlemesine analiz edeceğiz ve ilgili Move dili arka plan bilgilerini tanıtacağız.
Move dilinde byte kodu çalıştırılmadan önce kod birimleri doğrulanır, bu doğrulama süreci 4 adıma ayrılır. Bu keşfedilen güvenlik açığı reference_safety adımında ortaya çıkmıştır.
Referans güvenlik doğrulama modülü, boş referansların varlığını kontrol etmek, değişken referans erişiminin güvenli olup olmadığını ve küresel depolama referans erişiminin güvenli olup olmadığını kontrol etmekten sorumludur. Doğrulama süreci analyze_function fonksiyonundan başlar ve her temel blok için doğrulama yapılır.
Move dilinde, temel blok, giriş ve çıkış dışında dalga talimatı içermeyen kod dizisidir. Sistem, temel bloku belirlemek için bayt kodunu tarayarak tüm dalga talimatlarını ve döngü talimat dizilerini arar.
Move dilinde iki tür referans türü desteklenmektedir: değişmez referans (&) ve değiştirilebilir referans (&mut). Referans güvenliği modülü, bir fonksiyondaki her temel bloğun bytecode talimatlarını tarar ve tüm referans işlemlerinin geçerliliğini kontrol eder. Doğrulama süreci, fonksiyon içindeki referansların güvenliğini sağlamak için borrow graph ve locals adlı iki bileşeni içeren AbstractState yapısını kullanır.
Doğrulama sürecinde, sistem temel blok kodunu oluşturacak post state'i üretecek ve ardından pre state ile post state'i birleştirerek blok durumunu güncelleyecektir. Eğer durum değişirse ve bir döngü varsa, bu temel blok tekrar çalıştırılacaktır, ta ki post state pre state'e eşit olana veya bir hata oluşana kadar.
Hata, join_ fonksiyonunda meydana geliyor. Parametre uzunluğu ile yerel değişken uzunluğu 256'yı geçtiğinde, u8 türü ile locals'ı yinelemek, tam sayı taşmasına neden oluyor. Move dilinin locals sayısını kontrol eden bir süreci olsa da, yalnızca yerel değişken sayısını kontrol ediyor, parametre uzunluğunu kapsamıyor.
Bu tam sayı taşması, hizmet reddi saldırısına yol açabilir. Saldırgan, taşmayı kullanarak bloğun durumunu değiştiren bir döngü kod bloğu oluşturabilir. execute_block fonksiyonu tekrar çalıştırıldığında, eğer talimatın erişmesi gereken indeks yeni AbstractState locals haritasında yoksa, sistem çökmesine neden olur.
Bu açığı göstermek için, koşulsuz dalgıç talimatları içeren bir temel blok oluşturabiliriz. Uygun parametreler ve yerel değişken sayısını ayarlayarak, locals haritasının uzunluğunu 8'e taşmasını sağlayabiliriz. İkinci yürütmede, mevcut olmayan bir offset'e erişim denemesi panic ile sonuçlanacaktır.
Bu açık, özenle tasarlanmış dillerin bile güvenlik riskleri barındırabileceğini hatırlatıyor. Move dili için, beklenmedik durumların önüne geçmek amacıyla çalışma zamanında daha fazla kontrol kodu eklenmesi önerilmektedir. Şu anda Move, güvenlik kontrollerini çoğunlukla doğrulama aşamasında gerçekleştiriyor, ancak doğrulama atlatıldığında daha ciddi sorunlara yol açabilir.
Move dili güvenliği araştırmalarında öncülerden biri olarak, ilgili güvenlik sorunlarını derinlemesine keşfetmeye devam edeceğiz ve Move ekosisteminin sağlıklı gelişimine katkıda bulunacağız.