Move dilindeki tam sayı taşma açığı analizi: Referans güvenliğinden DoS saldırısına

robot
Abstract generation in progress

Move dilindeki tam sayı taşma açığı analizi

Giriş

Aptos Moveevm üzerinde derinlemesine araştırma yaptıktan sonra, yeni bir tamsayı taşma açığı keşfettik. Bu açığın tetiklenme süreci oldukça ilginçtir, aşağıda bu açığı detaylı bir şekilde analiz edecek ve Move diline dair bazı temel bilgileri tanıtacağız. Bu makalenin açıklamalarıyla, Move dilini daha derinlemesine anlayacağınıza inanıyorum.

Move dili, byte kodunu çalıştırmadan önce kod birimlerini doğrular. Doğrulama süreci 4 adıma ayrılır ve bu açık reference_safety adımında ortaya çıkar.

Numen Cyber, move dilinde başka bir yüksek riskli güvenlik açığı keşfetti

Move'daki referans güvenliği

Move dili iki tür referansı destekler: değiştirilemez referans (&) ve değiştirilebilir referans (&mut). Değiştirilemez referans, yapıdan veri okumak için kullanılırken, değiştirilebilir referans veriyi değiştirmek için kullanılır. Uygun referans türlerini kullanmak, güvenliğin korunmasına ve okuma modüllerinin tanınmasına yardımcı olur.

Move'un referans güvenliği modülünde, fonksiyonlar bazında temel blokların bytecode talimatları taranarak tüm referans işlemlerinin geçerliliği doğrulanır. Referans güvenliğini doğrulama süreci, temel blokların yürütülmesi, son durumların üretilmesi, önceki ve sonraki durumların birleştirilmesi gibi adımları içerir.

Numen Cyber'un özel keşfi move dilinde bir yüksek riskli açık daha bulundu

Açık Analizi

Açık, güvenlik modülünü referans alan join_ fonksiyonunda ortaya çıkmaktadır. Fonksiyon parametre uzunluğu ile yerel değişken uzunluğunun toplamı 256'dan büyük olduğunda, local değişkenleri u8 tipi ile temsil edildiği için tam sayı taşması meydana gelir.

Move'un locals sayısını kontrol eden bir süreci olmasına rağmen, check bounds modülünde yalnızca locals kontrol edilmiştir, parametre uzunluğu dahil edilmemiştir. Geliştiricilerin parametreler ve yerel değerlerin toplamını kontrol etmesi gerektiğini fark ettikleri anlaşılıyor, ancak kod yalnızca yerel değişkenlerin sayısını kontrol etmiştir.

Numen Cyber'in özel keşfi move dilinde bir yüksek riskli açık daha bulundu

Tam Sayı Taşmasından DoS Saldırısına

Bu tam sayı taşma açığını kullanarak, saldırgan bir döngü kod bloğu oluşturabilir ve bloğun durumunu değiştirebilir. execute_block fonksiyonu tekrar çalıştırıldığında, eğer talimatın erişmesi gereken indeks yeni AbstractState locals haritasında yoksa, DoS saldırısına yol açacaktır.

reference safety modülünde, MoveLoc/CopyLoc/FreeRef gibi işlem kodları bu durumu tetikleyebilir. Örneğin, copy_loc fonksiyonunda, LocalIndex mevcut değilse panic ile sonuçlanabilir ve bu da tüm düğümün çökmesine neden olabilir.

Numen Cyber, move dilinde bir başka yüksek riskli zafiyeti keşfetti

Açıkların Yeniden Üretilmesi

Bu güvenlik açığını git'te aşağıdaki PoC kodu ile yeniden oluşturabilirsiniz:

hareket public fun test(a: u64, b: u64, c: u64, d: u64) { let x = 0; döngü { if (x == 1) { kırmak }; x = x + 1; } }

DoS'u tetikleme adımları şunlardır:

  1. execute_block fonksiyonu ilk kez çalıştırıldığında, parameters ve locals her ikisi de SignatureIndex(0) olarak ayarlandığı için num_locals 264 oldu. join_ fonksiyonu çalıştırıldıktan sonra, yeni locals haritasının uzunluğu 8'e dönüştü.

  2. execute_block fonksiyonu ikinci kez çalıştırıldığında, move kodunun ilk komutu olan copyloc(57) çalıştırılır. Bu noktada locals yalnızca 8 uzunluğundadır, offset 57 mevcut değildir, bu nedenle get(57).unwrap() fonksiyonu None döndürür ve nihayetinde panic'e neden olur.

Numen Cyber özel keşfi move dilinde bir başka yüksek riskli güvenlik açığı

Numen Cyber özel keşfi move dilinde bir başka yüksek riskli açık

Numen Cyber, move dilinde bir başka yüksek riskli açığı keşfetti

Numen Cyber özel keşfi move dilinde bir başka yüksek riskli güvenlik açığı

Numen Cyber, move dilinde başka bir yüksek riskli güvenlik açığı keşfetti

Numen Cyber, move dilinde bir başka yüksek riskli açık keşfetti

Numen Cyber, move dilinde başka bir yüksek riskli açık keşfetti

Numen Cyber özel keşfi move dilinde başka bir yüksek riskli açık

Numen Cyber özel keşfi move dilinde bir yüksek riskli açık daha bulundu

Numen Cyber, move dilinde başka bir yüksek tehlike açığı keşfetti

Özet

Bu açık, mutlak güvenli bir kodun olmadığını gösteriyor. Move dilinin kod yürütmeden önce statik bir kontrol gerçekleştirmesine rağmen, yine de taşma açıkları tarafından aşılabilir. Bu, kod denetiminin önemini bir kez daha vurguluyor.

Move dili için, beklenmeyen durumların önlenmesi amacıyla çalışma sırasında daha fazla kontrol kodu eklenmesini öneriyoruz. Şu anda Move, güvenlik kontrollerini doğrulama aşamasında gerçekleştiriyor, ancak doğrulama aşıldığında, çalışma aşamasındaki yetersiz güvenlik güçlendirmesi daha ciddi sorunlara yol açabilir.

Move dilinin güvenlik araştırmalarında lider olarak, Move'un güvenlik sorunlarını derinlemesine incelemeye devam edeceğiz ve gelecekte daha fazla bulguyu paylaşacağız.

Numen Cyber, move dilinde bir yüksek risk açığı daha keşfetti

MOVE3.33%
View Original
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.
  • Reward
  • 4
  • Repost
  • Share
Comment
0/400
PretendingToReadDocsvip
· 08-15 17:34
move yine boğa, bu da sorun çıkarır
View OriginalReply0
WalletDetectivevip
· 08-14 07:06
Biraz inceledim, bu açık gerçekten ilginç.
View OriginalReply0
ponzi_poetvip
· 08-14 07:00
Samimi mi yoksa para kazanma amacıyla mı move taşması
View OriginalReply0
ForkTonguevip
· 08-14 06:52
Güvenlik hatalarını yazmaya devam ediyorsunuz, öyle mi?
View OriginalReply0
Trade Crypto Anywhere Anytime
qrCode
Scan to download Gate app
Community
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)