Move diline derinlemesine araştırma yaptıktan sonra yeni bir tam sayı taşma açığı keşfettik. Bu açık, Move dilinin byte kodu doğrulama sürecinin referans güvenliği kontrol aşamasında ortaya çıkmaktadır. Bu makalede, bu açığın tetiklenme sürecini detaylı bir şekilde analiz edecek ve Move dilinin bazı temel kavramlarını tartışacağız.
Move dilinin bytecode doğrulama süreci
Move dili, byte kodunu çalıştırmadan önce kod doğrulaması yapar ve bu işlem 4 aşamaya ayrılır. Bu güvenlik açığı, reference_safety aşamasında meydana gelmiştir. Bu aşama, referansların güvenliğini doğrulamaktan sorumludur ve boş referansların varlığını kontrol etme, değişken referans erişiminin güvenli olup olmadığını kontrol etme gibi işlemleri içerir.
Doğrulama süreci öncelikle kod içindeki temel blokları tanımlar. Temel blok, giriş ve çıkış dışında dalga komutları olmayan kod dizileridir. Move, bayt kodunu dolaşarak tüm dalga komutlarını ve döngü komutlarını arar ve temel blokları belirler.
Move'deki Referans Güvenliği
Move, iki tür referans türünü destekler: değişmez referans (&) ve değişken referans (&mut). Referans güvenliği modülü, her temel bloğun bayt kodu talimatlarını tarar ve tüm referans işlemlerinin geçerliliğini doğrular.
Doğrulama süreci, durumu temsil etmek için AbstractState yapısını kullanır ve borrow graph ile locals içerir. Doğrulama sırasında, yürütme öncesi ve sonrası durumlar karşılaştırılacak ve blok durumu güncellenecektir.
Açık Analizi
Hata, join_ fonksiyonunda ortaya çıkıyor. Bu fonksiyon, yürütme öncesi ve sonrası durumu birleştirmek, locals haritasını ve borç grafiğini güncellemek için kullanılır. Sorun, locals iterator'ının u8 türü döndürmesi ve parametre uzunluğu ile yerel değişken uzunluğunun toplamı 256'yı aştığında taşma yaşanmasıdır.
Move, locals sayısını kontrol eden bir sürece sahip olmasına rağmen, yalnızca yerel değişkenlerin sayısını kontrol eder, parametre uzunluğunu dahil etmez.
Açık Kullanım
Bu taşma kullanılarak temel bloğun durumu değiştirilebilir. Döngü kodunda, temel blok her çalıştırıldığında durum değişir. Yeniden çalıştırıldığında, eğer komutun eriştiği indeks yeni locals haritasında yoksa, panic'e yol açarak DoS saldırısı gerçekleştirilir.
PoC Gösterimi
Belirli parametreler ve yerel değişken sayısı ayarlanarak tamsayı taşmasına neden olan, programın çökmesine yol açan yeniden üretilebilir bir PoC kodu sağladı.
Özet
Bu açık, kod denetiminin önemini bir kez daha kanıtladı. Move dili için, yalnızca doğrulama aşamasındaki kontrolere güvenmek yerine, çalışma zamanında daha fazla güvenlik kontrolü eklenmesi önerilmektedir. Move dilinin güvenlik sorunlarını derinlemesine incelemeye devam edeceğiz ve 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.
25 Likes
Reward
25
7
Share
Comment
0/400
RektButStillHere
· 07-11 04:35
Yine taşma oldu, tsk tsk
View OriginalReply0
consensus_failure
· 07-11 01:01
Bununla birlikte bu hata var.
View OriginalReply0
SchrodingersPaper
· 07-09 07:32
move yine mi gönderdi? Her şey yolunda gitmedi, her şey yolunda gitmedi.
View OriginalReply0
DevChive
· 07-08 16:28
Yeni başlayanlar insanları enayi yerine koymak
View OriginalReply0
ProposalManiac
· 07-08 06:09
Parametre doğrulamasının sadece belgede yazılmasının yeterli olmadığını daha önce söyledim.
Move dilindeki tam sayı taşma açığı ifşa edildi: bytecode doğrulama tehlikesi
Move dilinde tam sayı taşma açığı analizi
Move diline derinlemesine araştırma yaptıktan sonra yeni bir tam sayı taşma açığı keşfettik. Bu açık, Move dilinin byte kodu doğrulama sürecinin referans güvenliği kontrol aşamasında ortaya çıkmaktadır. Bu makalede, bu açığın tetiklenme sürecini detaylı bir şekilde analiz edecek ve Move dilinin bazı temel kavramlarını tartışacağız.
Move dilinin bytecode doğrulama süreci
Move dili, byte kodunu çalıştırmadan önce kod doğrulaması yapar ve bu işlem 4 aşamaya ayrılır. Bu güvenlik açığı, reference_safety aşamasında meydana gelmiştir. Bu aşama, referansların güvenliğini doğrulamaktan sorumludur ve boş referansların varlığını kontrol etme, değişken referans erişiminin güvenli olup olmadığını kontrol etme gibi işlemleri içerir.
Doğrulama süreci öncelikle kod içindeki temel blokları tanımlar. Temel blok, giriş ve çıkış dışında dalga komutları olmayan kod dizileridir. Move, bayt kodunu dolaşarak tüm dalga komutlarını ve döngü komutlarını arar ve temel blokları belirler.
Move'deki Referans Güvenliği
Move, iki tür referans türünü destekler: değişmez referans (&) ve değişken referans (&mut). Referans güvenliği modülü, her temel bloğun bayt kodu talimatlarını tarar ve tüm referans işlemlerinin geçerliliğini doğrular.
Doğrulama süreci, durumu temsil etmek için AbstractState yapısını kullanır ve borrow graph ile locals içerir. Doğrulama sırasında, yürütme öncesi ve sonrası durumlar karşılaştırılacak ve blok durumu güncellenecektir.
Açık Analizi
Hata, join_ fonksiyonunda ortaya çıkıyor. Bu fonksiyon, yürütme öncesi ve sonrası durumu birleştirmek, locals haritasını ve borç grafiğini güncellemek için kullanılır. Sorun, locals iterator'ının u8 türü döndürmesi ve parametre uzunluğu ile yerel değişken uzunluğunun toplamı 256'yı aştığında taşma yaşanmasıdır.
Move, locals sayısını kontrol eden bir sürece sahip olmasına rağmen, yalnızca yerel değişkenlerin sayısını kontrol eder, parametre uzunluğunu dahil etmez.
Açık Kullanım
Bu taşma kullanılarak temel bloğun durumu değiştirilebilir. Döngü kodunda, temel blok her çalıştırıldığında durum değişir. Yeniden çalıştırıldığında, eğer komutun eriştiği indeks yeni locals haritasında yoksa, panic'e yol açarak DoS saldırısı gerçekleştirilir.
PoC Gösterimi
Belirli parametreler ve yerel değişken sayısı ayarlanarak tamsayı taşmasına neden olan, programın çökmesine yol açan yeniden üretilebilir bir PoC kodu sağladı.
Özet
Bu açık, kod denetiminin önemini bir kez daha kanıtladı. Move dili için, yalnızca doğrulama aşamasındaki kontrolere güvenmek yerine, çalışma zamanında daha fazla güvenlik kontrolü eklenmesi önerilmektedir. Move dilinin güvenlik sorunlarını derinlemesine incelemeye devam edeceğiz ve gelişimine katkıda bulunacağız.