Rails Active Storage’da CVSS 9.5: libvips ile kimlik doğrulamasız dosya okuma

Ruby on Rails, CVE-2026-66066 (GHSA-xr9x-r78c-5hrm) için kritik yamalar yayımladı. CVSS 9.5 puanlı açık, Active Storage’ın libvips ile görsel varyant işlemesinde “unfuzzed” operasyonları kapatmamasından kaynaklanıyor. Kimlik doğrulamasız bir saldırgan, özel hazırlanmış görsel yüklemeleriyle sunucudaki keyfi dosyaları — süreç ortamındaki secret_key_base dahil — okuyabilir; bu da RCE yoluna açılabilir.

Rapid7, 30 Temmuz 2026 itibarıyla bilinen vahşi kullanım bildirmiyor. Bu yazı savunma odaklıdır; exploit veya PoC tarifi vermez. Rails, attack-chain ayrıntılarını 28 Ağustos 2026’ya erteledi.

Ana Gelişme

Resmi GHSA’ya göre etkilenen koşul: Active Storage’da variant_processor = :vips ve güvenilmeyen kullanıcı yüklemeleri. ImageMagick (Magick) bu vektör değildir.

Yama sürümleri:

HatYamalı sürüm
7.2.x7.2.3.2
8.0.x8.0.5.1
8.1.x8.1.3.1

libvips ≥ 8.13 zorunlu. Geçici önlem: VIPS_BLOCK_UNTRUSTED ortam değişkeni veya Vips.block_untrusted(true).

Kredi: Ethiack ve GMO Flatt Security (KindaRails2Shell). SecurityWeek ve Rapid7 ETR ikincil kapsama sağlıyor.

EOL 7.1 / 7.0 / 6.x satırlarında upstream OSS fix olmayabilir — eski major’da kalan ekipler için ayrı risk.

Neden Önemli?

Rails 7.0+ varsayılanlarında Active Storage + libvips yaygın. Kullanıcı avatarı, belge önizlemesi veya ürün görseli kabul eden her SaaS, kimlik doğrulamasız dosya okuma yüzeyi taşıyabilir. Sızan secret_key_base ve ortam sırları, oturum sahteciliği ve daha geniş uzlaşmaya yol açabilir.

Türk Rails ekipleri için haber doğrudan aksiyonel: yama matrisi, libvips sürümü, workaround ve secret rotasyonu aynı sprint’te kapatılmalı.

Savunma checklist’i

  1. Active Storage’ı 7.2.3.2 / 8.0.5.1 / 8.1.3.1 (veya üzeri yamalı) sürüme yükseltin.
  2. libvips’i ≥ 8.13 yapın; yama ile birlikte doğrulayın.
  3. Hemen yükseltemiyorsanız VIPS_BLOCK_UNTRUSTED uygulayın.
  4. Maruz kalma olasılığı varsa secret_key_base ve ilgili ortam sırlarını döndürün.
  5. ImageMagick’e geçiş bu CVE’yi “otomatik çözmez” diye varsaymayın — etkilenen vektör vips’tir; genel application-security hijyeni ayrı konu.
  6. EOL major’daysanız: upstream fix beklemeyin; HeroDevs / ticari destek veya major yükseltme planlayın.

Kim etkilenir, kim etkilenmez?

Etkilenen tipik profil: Rails 7.2 / 8.0 / 8.1 uygulaması, Active Storage ile kullanıcı görseli kabul eden, variant_processor = :vips kullanan kurulumlar. Avatar yükleme, CMS medya galerisi, e-ticaret ürün görselleri ve destek ticket ekleri bu sınıfa girer.

Etkilenmeyen / farklı vektör: yalnızca Magick processor kullanan kurulumlar bu GHSA’nın tanımladığı vips yolunda değildir. Bu, Magick’in genel olarak “güvenli” olduğu anlamına gelmez; yalnızca bu CVE’nin kapsamı dışındadır. Hiç görsel varyant üretmeyen veya güvenilmeyen yükleme kabul etmeyen iç araçlar riski düşüktür — yine de sürüm yükseltmesi ucuz sigortadır.

EOL 7.1 / 7.0 / 6.x satırlarında kalan ekipler için özel uyarı: upstream OSS fix gelmeyebilir. HeroDevs benzeri ticari backport veya major yükseltme planı şarttır. “Biz hâlâ 6.1’deyiz, yama yok, o zaman risk yok” çıkarımı yanlıştır — yama olmaması riski azaltmaz.

Bağlam

web-framework-cves-2026 hattında bu olay, “güvenli varsayılan” imaj pipeline’larının framework düzeyinde nasıl kırıldığını gösteriyor. KindaRails2Shell framing’i, dosya okumadan RCE’ye giden zinciri vurguluyor — yine de Rapid7’nin “no known exploitation” notu panik değil, acil yama çağrısı üretmeli.

Attack-chain ayrıntılarının 28 Ağustos’a ertelenmesi, savunma ekipleri için iki anlamlı sonuç doğurur. Birincisi: kamu PoC’si olmadan da yama uygulanmalıdır — “exploit yok = bekleyebiliriz” yanılgısıdır. İkincisi: ayrıntılar yayımlandığında WAF / IDS imzaları ve log hunting kuralları güncellenecektir; bugünden sürüm ve secret hijyeni tamamlanmış olmalıdır.

Rails ekosisteminde Active Storage’ın varsayılanlaşması, güvenliği “opsiyonel gem” olmaktan çıkarıp framework sözleşmesine taşıdı. libvips’in performans avantajı (hızlı thumbnail, düşük bellek) yaygın benimsenmeyi hızlandırdı; “unfuzzed” operasyonların varsayılan açık kalması ise bu performans seçiminin güvenlik borcunu üretti. CVSS 9.5, kimlik doğrulamasız erişim + yüksek etki kombinasyonunu yansıtır.

Türk SaaS ekipleri için ek pratik: staging’de variant üretimi kapalı olsa bile production’da açık olabilir. CI’da activestorage gem sürümünü ve sistem libvips paketini ayrı assert edin. Container imajlarında OS paketi ile gem sürümü senkron değilse yama “yarım” kalır.

Sonraki Adımlar

  • Üretim ve staging’de sürüm doğrulaması
  • Secret rotasyonu sonrası oturum / credential invalidation
  • 28 Ağustos’ta beklenen attack-chain ayrıntılarına göre ek izleme kuralları
  • Bağımlılık bot’larında Active Storage pin’lerinin güncellenmesi
  • EOL major planının ürün/backlog’a alınması
  • VIPS_BLOCK_UNTRUSTED geçici önleminin yama sonrası temizlenip temizlenmediğinin kontrolü

Kaynaklar