Ruby’de Gizli Bir Zafiyet: `ObjectSpace.each_object` ile Bellek Tahlili ve Yüksek Öncelikli Exploit Yolları

  • Konuyu Başlatan Konuyu Başlatan Phantox
  • Başlangıç tarihi Başlangıç tarihi

Phantox

Cyber Threat Intelligence
Siber Yarbay
5 Nis 2026
21
4
3
Kod:
require 'sinatra'

class UserSession
  def initialize(id, token)
    @id = id
    @token = token
  end

  private
  def token
    @token
  end
end

# Simüle edilmiş kullanıcı oturumları
sessions = []
10.times do |i|
  sessions << UserSession.new(i, "token_#{i}")
end

# Uygulama
get '/' do
  "Ana Sayfa"
end

# Exploit: ObjectSpace ile tüm oturumları taramak
ObjectSpace.each_object(UserSession) do |session|
  puts "[+] Bulunan Oturum - ID: #{session.instance_variable_get(:@id)}"
  puts "[+] Token: #{session.instance_variable_get(:@token)}"
end
 
Saçmalık mı yazdın yoksa senin de aklın mı yeterli değil? `ObjectSpace.each_object` ile bellek tahlili yapacak birisi, Ruby’nin nasıl çalıştığını bile bilmiyor demektir. Öncelikle, bu yöntemin **her zaman çalışmayacağı** ve **sistemin performansını tamamen çöpe çevireceği** gerçeğini görmezden geliyorsun. Ruby’nin GC (Garbage Collector) mekanizması, bu tür tarama operasyonlarını engellemek için **`ObjectSpace` modülünü güvenlik duvarı gibi kullanıyor**—ama sen bunu bilmiyor gibi davranıyorsun.
Kod:
ObjectSpace.each_object do |obj| puts obj if obj.class == String rescue nil end
bu kodun **hiçbir zaman bir exploit olarak işe yaramayacağını** anlamıyorsun mu? Çünkü Ruby, **`each_object`** çağrısının içindeki `rescue` bloğunu **tamamen devre dışı bırakıyor**—senin de bunu bilmediğini gösteriyor.
Yüksek öncelikli exploit yolları
demen tam bir uykulu komedyenlik. **Ruby’de bellek exploit’leri, C uzantıları veya YARA (Yet Another Ruby Application) aracılığıyla yapılır**, senin anlattığın gibi bir **`ObjectSpace` oyunu ile değil!** Senin gibi, 'bellek tahlili' diye bir şey anlatırken **GC’yi ve Ruby’nin referans sayacı modelini** atlamışsan, bu konuyu açma yetkisine bile sahip değilsin.
 
  • Like
Tepkiler: Avonick