Move dilinde güvenlik modülünde yeni bir tam sayı taşma açığı bulundu
Son zamanlarda, Move dilini derinlemesine araştırırken yeni bir tamsayı taşma açığı bulduk. Bu açık, referans güvenliği doğrulama sürecinde mevcut olup, tetiklenme süreci oldukça ilginç. Bu yazıda, bu açığı derinlemesine analiz edecek ve Move dilinin bazı arka plan bilgilerini inceleyeceğiz.
Move dili, bytecode'u yürütmeden önce kod birimi doğrulaması yapar ve bu dört adıma ayrılır. Bu açık, reference_safety adımında ortaya çıkar. Bu adım, referansların güvenliğini doğrulamaktan sorumludur ve boş referansların var olup olmadığını, değişken referans erişiminin güvenliğini, global depolama referans erişiminin güvenliğini kontrol eder.
Güvenlik doğrulama için kullanılan giriş fonksiyonu, her bir temel bloğu doğrulamak üzere analyze_function'ı çağıracaktır. Temel blok, giriş ve çıkış dışında hiçbir dallanma talimatı içermeyen bir kod dizisidir. Move dili, bytecode'u tarayarak tüm dallanma talimatlarını ve döngü talimatı dizilerini bularak temel blokları tanımlar.
Move dili, iki tür referans türünü destekler: değiştirilemez referans (&) ve değiştirilebilir referans (&mut). Referans güvenliği modülü, tüm referans işlemlerinin geçerliliğini doğrulamak için işlevdeki temel blokların bayt kodu talimatlarını tarar. Doğrulama süreci, fonksiyondaki referansların güvenliğini sağlamak için borç grafiği ve yerelleri içeren AbstractState yapısını kullanır.
Hata, join_ fonksiyonunda ortaya çıkıyor. Parametre uzunluğu ile yerel değişken uzunluğu 256'yı aştığında, iter_locals() fonksiyonu u8 türünde bir iteratör döndürdüğünden, tam sayı taşmasına neden oluyor. Move'un locals sayısını kontrol eden bir süreci olmasına rağmen, check bounds modülünde sadece locals kontrol ediliyor, parametre uzunluğu dahil edilmiyor.
Bu tam sayı taşması, hizmet reddi (DoS) saldırısına neden olabilir. Döngüsel kod blokları mevcut olduğunda ve taşma, bloğun durumunu değiştirmek için kullanıldığında, yeni yerel harita öncekinden farklıdır. execute_block fonksiyonu tekrar çalıştırıldığında, eğer komutun erişmesi gereken indeks yeni AbstractState yerel haritasında yoksa, DoS'a neden olacaktır.
Git'te yeniden üretilebilen bir PoC sağladık. Bu PoC'deki kod bloğu, son talimat her çalıştırıldığında ilk talimata geri dönen koşulsuz bir dalga talimatı içeriyor ve bu da execute_block ve join fonksiyonlarını birden fazla kez çağırıyor.
Bu açık, Move gibi güvenliğe önem veren dillerin bile güvenlik açıkları barındırabileceğini göstermektedir. Kod denetiminin önemi tartışılmaz, programcıların dikkatsizliği kaçınılmazdır. Move dilinin güvenlik araştırmaları konusunda lider olarak, Move'un güvenlik sorunlarını derinlemesine araştırmaya devam edeceğiz.
Move dil tasarımcılarının, beklenmedik durumları önlemek için çalışma zamanında daha fazla kontrol kodu eklemelerini öneriyoruz. Şu anda Move, güvenlik kontrolünü esas olarak doğrulama aşamasında gerçekleştiriyor, ancak bu yeterli olmayabilir. Doğrulama atlatıldığında, çalışma aşamasında yeterli güvenlik sağlamanın eksikliği daha ciddi sorunlara yol açabilir.
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 dilinin güvenlik modülünde tamsayı taşma açığı tespit edildi, bu da DoS saldırısına yol açabilir.
Move dilinde güvenlik modülünde yeni bir tam sayı taşma açığı bulundu
Son zamanlarda, Move dilini derinlemesine araştırırken yeni bir tamsayı taşma açığı bulduk. Bu açık, referans güvenliği doğrulama sürecinde mevcut olup, tetiklenme süreci oldukça ilginç. Bu yazıda, bu açığı derinlemesine analiz edecek ve Move dilinin bazı arka plan bilgilerini inceleyeceğiz.
Move dili, bytecode'u yürütmeden önce kod birimi doğrulaması yapar ve bu dört adıma ayrılır. Bu açık, reference_safety adımında ortaya çıkar. Bu adım, referansların güvenliğini doğrulamaktan sorumludur ve boş referansların var olup olmadığını, değişken referans erişiminin güvenliğini, global depolama referans erişiminin güvenliğini kontrol eder.
Güvenlik doğrulama için kullanılan giriş fonksiyonu, her bir temel bloğu doğrulamak üzere analyze_function'ı çağıracaktır. Temel blok, giriş ve çıkış dışında hiçbir dallanma talimatı içermeyen bir kod dizisidir. Move dili, bytecode'u tarayarak tüm dallanma talimatlarını ve döngü talimatı dizilerini bularak temel blokları tanımlar.
Move dili, iki tür referans türünü destekler: değiştirilemez referans (&) ve değiştirilebilir referans (&mut). Referans güvenliği modülü, tüm referans işlemlerinin geçerliliğini doğrulamak için işlevdeki temel blokların bayt kodu talimatlarını tarar. Doğrulama süreci, fonksiyondaki referansların güvenliğini sağlamak için borç grafiği ve yerelleri içeren AbstractState yapısını kullanır.
Hata, join_ fonksiyonunda ortaya çıkıyor. Parametre uzunluğu ile yerel değişken uzunluğu 256'yı aştığında, iter_locals() fonksiyonu u8 türünde bir iteratör döndürdüğünden, tam sayı taşmasına neden oluyor. Move'un locals sayısını kontrol eden bir süreci olmasına rağmen, check bounds modülünde sadece locals kontrol ediliyor, parametre uzunluğu dahil edilmiyor.
Bu tam sayı taşması, hizmet reddi (DoS) saldırısına neden olabilir. Döngüsel kod blokları mevcut olduğunda ve taşma, bloğun durumunu değiştirmek için kullanıldığında, yeni yerel harita öncekinden farklıdır. execute_block fonksiyonu tekrar çalıştırıldığında, eğer komutun erişmesi gereken indeks yeni AbstractState yerel haritasında yoksa, DoS'a neden olacaktır.
Git'te yeniden üretilebilen bir PoC sağladık. Bu PoC'deki kod bloğu, son talimat her çalıştırıldığında ilk talimata geri dönen koşulsuz bir dalga talimatı içeriyor ve bu da execute_block ve join fonksiyonlarını birden fazla kez çağırıyor.
Bu açık, Move gibi güvenliğe önem veren dillerin bile güvenlik açıkları barındırabileceğini göstermektedir. Kod denetiminin önemi tartışılmaz, programcıların dikkatsizliği kaçınılmazdır. Move dilinin güvenlik araştırmaları konusunda lider olarak, Move'un güvenlik sorunlarını derinlemesine araştırmaya devam edeceğiz.
Move dil tasarımcılarının, beklenmedik durumları önlemek için çalışma zamanında daha fazla kontrol kodu eklemelerini öneriyoruz. Şu anda Move, güvenlik kontrolünü esas olarak doğrulama aşamasında gerçekleştiriyor, ancak bu yeterli olmayabilir. Doğrulama atlatıldığında, çalışma aşamasında yeterli güvenlik sağlamanın eksikliği daha ciddi sorunlara yol açabilir.