Move dilinde referans güvenlik kontrolündeki tamsayı taşma açığı analizi
Son zamanlarda, Move dilinde güvenlik doğrulama sürecinde yeni bir tam sayı taşma açığı bulundu. Bu açık, doğrulama kodu biriminin reference_safety adımında ortaya çıkmakta olup, Move dilindeki temel bloklar ve referans güvenliği mekanizmalarını kapsamaktadır.
Move dili, byte kodunu çalıştırmadan önce kod doğrulaması yapacak ve bu dört adımdan oluşacaktır. Referans güvenliği doğrulaması, boş referansların varlığının kontrol edilmesi, değişken referanslara erişimin güvenli olup olmadığının kontrol edilmesi gibi önemli bir aşamadır. Doğrulama süreci, her temel bloğun byte kodu talimatlarını gözden geçirecektir.
Temel bloklar, giriş ve çıkış dışında hiçbir dal komutuna sahip olmayan kod dizilerini ifade eder. Move dili, temel blokları tanımlamak için dal ve döngü komutlarını kontrol eder. Referans güvenlik doğrulaması, her temel bloktaki komutları tarayarak referans işlemlerinin yasallığını belirler.
Doğrulama süreci, durumu temsil etmek için AbstractState yapısını kullanır ve iki ana bileşen içerir: locals ve borrow grafi. Doğrulama, yürütmeden önceki ve sonraki durumları karşılaştıracak, sonuçları birleştirip sonraki bloklara yayacaktır.
Hata, join_ fonksiyonunda ortaya çıkmaktadır. Parametre uzunluğu ile yerel değişken uzunluğunun toplamı 256'yı aştığında, u8 türüyle locals üzerinde yineleme yapılması nedeniyle tam sayı taşması meydana gelir. Bu, yeni locals haritasının öncekilerden farklı olmasına neden olabilir ve bu da yeniden çalıştırıldığında mevcut olmayan bir indekse erişilmesine yol açarak hizmet reddine neden olabilir.
PoC kodu, belirli parametreler ve yerel değişken sayısını ayarlayarak tam sayı taşmasını tetikler ve yeni locals haritasının uzunluğunun kısalmasına neden olur. Yeniden çalıştırıldığında, var olmayan bir offset'e erişim sağlandığında, sonuçta panic meydana gelir.
Bu güvenlik açığı, statik tipli dillerin bile güvenlik sorunları barındırabileceğini göstermektedir. Move dili tasarımcılarına, yalnızca doğrulama aşamasına güvenmek yerine, çalışma zamanında daha fazla güvenlik kontrolü eklemeleri önerilmektedir. Aynı zamanda kod denetiminin önemini de yansıtmaktadır.
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.
13 Likes
Reward
13
5
Share
Comment
0/400
Web3ExplorerLin
· 08-01 00:31
Taşma sorunu şimdi denetim gerektiriyor
View OriginalReply0
SignatureDenied
· 07-30 09:30
Kod kalitesinin artırılmaya devam edilmesi gerekiyor.
Move dili referans güvenlik doğrulama tam sayı taşma açığı, hizmetin reddedilmesine neden olabilir.
Move dilinde referans güvenlik kontrolündeki tamsayı taşma açığı analizi
Son zamanlarda, Move dilinde güvenlik doğrulama sürecinde yeni bir tam sayı taşma açığı bulundu. Bu açık, doğrulama kodu biriminin reference_safety adımında ortaya çıkmakta olup, Move dilindeki temel bloklar ve referans güvenliği mekanizmalarını kapsamaktadır.
Move dili, byte kodunu çalıştırmadan önce kod doğrulaması yapacak ve bu dört adımdan oluşacaktır. Referans güvenliği doğrulaması, boş referansların varlığının kontrol edilmesi, değişken referanslara erişimin güvenli olup olmadığının kontrol edilmesi gibi önemli bir aşamadır. Doğrulama süreci, her temel bloğun byte kodu talimatlarını gözden geçirecektir.
Temel bloklar, giriş ve çıkış dışında hiçbir dal komutuna sahip olmayan kod dizilerini ifade eder. Move dili, temel blokları tanımlamak için dal ve döngü komutlarını kontrol eder. Referans güvenlik doğrulaması, her temel bloktaki komutları tarayarak referans işlemlerinin yasallığını belirler.
Doğrulama süreci, durumu temsil etmek için AbstractState yapısını kullanır ve iki ana bileşen içerir: locals ve borrow grafi. Doğrulama, yürütmeden önceki ve sonraki durumları karşılaştıracak, sonuçları birleştirip sonraki bloklara yayacaktır.
Hata, join_ fonksiyonunda ortaya çıkmaktadır. Parametre uzunluğu ile yerel değişken uzunluğunun toplamı 256'yı aştığında, u8 türüyle locals üzerinde yineleme yapılması nedeniyle tam sayı taşması meydana gelir. Bu, yeni locals haritasının öncekilerden farklı olmasına neden olabilir ve bu da yeniden çalıştırıldığında mevcut olmayan bir indekse erişilmesine yol açarak hizmet reddine neden olabilir.
PoC kodu, belirli parametreler ve yerel değişken sayısını ayarlayarak tam sayı taşmasını tetikler ve yeni locals haritasının uzunluğunun kısalmasına neden olur. Yeniden çalıştırıldığında, var olmayan bir offset'e erişim sağlandığında, sonuçta panic meydana gelir.
Bu güvenlik açığı, statik tipli dillerin bile güvenlik sorunları barındırabileceğini göstermektedir. Move dili tasarımcılarına, yalnızca doğrulama aşamasına güvenmek yerine, çalışma zamanında daha fazla güvenlik kontrolü eklemeleri önerilmektedir. Aynı zamanda kod denetiminin önemini de yansıtmaktadır.