Ana Sayfa

Ruby Array#pack Metodunda Bellek Sızıntısı Keşfedildi

1 dk okuma

Ruby'nin kanonik uygulaması Ruby MRI'ın 4.0.0 sürümünün yayınlanmasıyla birlikte, Ruby'deki tamsayı işleme hataları yeniden incelendi ve Array sınıfının pack metodunda bir güvenlik açığı keşfedildi. Bu güvenlik açığı, ayrılan dizge arabelleğinin dışından bellek okunmasına olanak tanıyor. Bellek açıklama güvenlik açıkları ciddi etkilere sahip olsa da, etkilenen metodun gerçek Ruby uygulamalarında nadiren kullanıldığı ve bir saldırganın metod çağrısının argümanı üzerinde kontrol sahibi olmasının çok daha nadir olduğu belirtiliyor. Güvenlik açığı, Ruby 4.0.0 ve önceki sürümleri, muhtemelen 2002'de yayınlanan Ruby 1.6.7'ye kadar olan sürümleri etkiliyor.

Güvenlik açığı, Array#pack metodunun tekrar sayısını işleyen kodunda yatıyor. Bu kod, tekrar sayısını len adlı bir değişkene kaydederken STRTOUL makrosu unsigned long döndürürken, len değişkeninin kendisi signed long tipindedir. Bu imzasız ve imzalı tip uyuşmazlığı, büyük imzasız değerlerin len değişkenine depolandığında negatif değerler olarak yorumlanmasına neden oluyor. Bu sayede, normalde pozitif olması beklenen bir tekrar sayısı, manipüle edilerek negatif hale getirilebiliyor.

Negatif bir tekrar sayısı oluşturma yeteneğiyle, X yönergesi bu durumu istismar etmek için kullanılıyor. X yönergesi, "bir bayt geri gitme" işlevi görür. Negatif bir len değeriyle X yönergesi kullanıldığında, rb_str_set_len fonksiyonu, dizgenin uzunluğunu beklenenden daha fazla küçülterek veya negatif bir uzunluğa ayarlayarak, ayrılan bellek alanının dışındaki verilere erişilmesine ve okunmasına yol açar. Bu durum, potansiyel olarak hassas bilgilerin sızmasına neden olabilir.

İçgörü

Ruby'deki bir tip uyuşmazlığı hatası, `Array#pack` metodunda bellek dışı okuma güvenlik açığına yol açarak, nadir durumlarda hassas bellek verilerinin sızdırılmasına imkan tanıyor.

Kaynak