Ruby on Rails’te kritik bir açık, uygulama yüklemeleri ImageMagick ile işliyorsa kimliği doğrulanmamış bir saldırganın hazırlanmış bir dosya yükleyerek uygulamanın sunucusuna keyfi dosya yazmasına olanak tanıyabilir. Rails projesi açığı bir duyuruda açıkladı ve 8.1.4.1 ile 8.0.5.2 sürümlerinde düzeltti.
Açık, Rails’in dosya yüklemelerini yöneten Active Storage bileşeninde bulunuyor. Bazı uygulamalar yüklenen dosyaları Active Storage’ın Disk servisiyle sunucu diskinde saklıyor. Bu uygulamalarda saldırgan, uygulamanın okuyabildiği her dosyayı da okuyabiliyor.
Rails’e göre bu dosyalar tipik olarak uygulamanın secret_key_base değerini ve diğer sistemler için kimlik bilgilerini içeriyor. Bu bilgilerin okunması uzaktan kod çalıştırılmasına ya da söz konusu sistemlere yatay hareket etmeye olanak tanıyabilir.
Rails açığa CVSS ölçeğinde 9.8 üzerinden 10 puan verdi. Açık GHSA-f3w6-w445-fwh9 olarak izleniyor ve henüz bir CVE tanımlayıcısı yok.
ImageMagick, dosyanın içeriğine göre bir biçim işleyici seçiyor; bu işleyicilere coder deniyor. Bazı coder’lar görüntünün kendisi yerine görüntü içinde adı geçen diğer dosyalar üzerinde işlem yapıyor. Active Storage, yüklemede hangi coder’ların kullanılabileceğine dair bir sınır koymuyor; dolayısıyla sunucunun kendi ImageMagick politikası tek sınırlayıcı unsur kalıyor.
Active Storage’daki ImageMagick analizörü bir dosya eklendiğinde çalışıyor. Yüklemenin eklenmesi açığa ulaşmak için yeterli. Uygulamanın varyant oluşturması, önizleme üretmesi ya da analyze çağırması gerekmiyor.
Açığı kapatan işleme göre yüklenen bir SVG dosyası bu analizör üzerinden ImageMagick’in MSL coder’ına ulaştı. MSL, betik tabanlı bir coder ve betiğinde adı geçen dosyaları okuyup yazabiliyor.
Rails’e bir saldırı zinciri bildirildiğini söyledi, ancak bunun tek başına olmadığını varsaymıyor. Duyuruda açığın istismar edilip edilmediği belirtilmiyor.
Açık, HackerOne üzerinden GMO Flatt Security araştırmacısı RyotaK tarafından bildirildi.
Hangi Rails Uygulamaları Etkileniyor
Bir uygulama yalnızca şu üç koşulun tamamı doğruysa etkileniyor:
Active Storage görüntü işleme için ImageMagick kullanıyor. Bu ayar config.active_storage.variant_processor = :mini_magick şeklindedir ve load_defaults 6.1 veya daha önceki uygulamalar için varsayılandır.
ImageMagick güvenlik politikası söz konusu coder’ları zaten engellemiyor. Rails, Debian ve Ubuntu’nun gönderdiği politikaların engellemediğini belirtiyor.
Güvenilmeyen kullanıcılardan dosya yüklemesi kabul ediliyor.
İlk koşulu kontrol etmek için config.active_storage.variant_processor bakılır. Ayar yapılmamışsa varsayılan, load_defaults 7.0 öncesinde :mini_magick, 7.0 ve sonrasında :vips oluyor. Aynı ayar yalnızca varyant oluşturmayı değil, yüklemelerin analizinde hangi kütüphanenin kullanıldığını da belirliyor.
8.0.5.2’den önceki her Active Storage sürümü etkileniyor; 8.1 serisinde de 8.1.4.1’den önceki sürümler etkileniyor. 8.0’dan eski sürüm serileri artık desteklenmiyor ve Rails onlar için düzeltme yayınlamayacak.
Temmuz ayında Rails, libvips kullanan uygulamaları etkileyen CVE-2026-66066 olarak bilinen farklı bir kritik Active Storage açığını kapattı. ImageMagick kullanan uygulamalar o açığın saldırı yoluna maruz kalmıyordu, ancak bu açığa maruz kalabiliyor.
Aynı sürümler GHSA-v924-7rp8-4mxh olarak izlenen ikinci bir Active Storage açığını da kapatıyor. Rails bu açığa CVSS puanı olarak 8.8 verdi. Active Storage, yüklemeleri yüklenen dosyanın uzantısını koruyan geçici dosya adları altında ImageMagick ve FFmpeg’e iletiyordu.
Bu araçlar dosya içeriği biçimi göstermediğinde uzantıdan bir kod çözücü seçebiliyor. Böylece saldırgan yüklemenin dosya adını ve içerik türünü seçerek işlenecek kod çözücüyü belirleyebiliyor.
Ne Yapılmalı
Rails mümkün olan en kısa sürede yükseltme yapılmasını güçlü şekilde öneriyor. İki sürüm toplamda 21 güvenlik sorununu düzeltiyor.
Düzeltilmiş sürümler bir ImageMagick güvenlik politikası gönderiyor. MiniMagick, Active Storage’ın ImageMagick’i çağırmak için kullandığı Ruby gem’idir. Varsayılan kurulumda MiniMagick’in çalıştırdığı her ImageMagick komutuna politika uygulanıyor; yalnızca Active Storage komutları değil.
Politika MSL coder’ını; görüntü dışındaki dosyaları okuyan ya da silen coder’ları; uzak ya da yerel referansları alan ya da ekranda gösteren coder’ları; Ghostscript’e dayalı her coder’ı ve gs aracısını; @filename yönlendirmesini engelliyor.
Rails 8.1.4.1 veya 8.0.5.2’ye yükseltin. :mini_magick kullanan uygulamalar mini_magick 5.1 veya daha yenisi olmadan başlatmada hata alır. Rails 8.0, bakım politikası gereği 7 Kasım 2026’ya kadar güvenlik düzeltmesi alıyor.
Uygulamanın yeni politikayı yüklediğini doğrulamak için Active Storage kılavuzunda anlatıldığı gibi bin/rails runner 'puts MiniMagick.identify { |i| i.list "policy" }' komutu çalıştırılabilir.
Gönderilen politikanın uygulamaya ulaşıp ulaşmadığı kontrol edilmeli. Uygulama başlatma sonrası MiniMagick.cli_env’i değiştiriyorsa, MiniMagick.cli_prefix ile ortamı temizliyorsa ya da kendi MiniMagick::Shell’ini kuruyorsa politika ulaşmıyor. Bu durumda kurallar ImageMagick’in sistem politikasına konmalı.
GraphicsMagick kullanan uygulamalar gönderilen politikadan korunmuyor; GraphicsMagick ImageMagick politikalarını okumuyor.
Sunucunun kendi ImageMagick politikası kontrol edilmeli. Gönderilen politika üzerine ekleniyor, değiştirmiyor. Sistem politikasında bir coder’a izin veren, örneğin pattern="*" gibi joker içeren bir kural, gönderilen politikanın o coder’ı engellemesini geçersiz kılıyor.
Uygulama ImageMagick üzerinden PDF ya da PostScript dosyası işliyorsa, sunucunun policy.xml dosyasında gs aracısı ve kullandığı coder’lar yeniden izin verilmeli.
Hemen yükseltme yapılamıyorsa, activestorage/lib/active_storage/image_magick/policy.xml içindeki kurallar ImageMagick’in sistem politikasına, örneğin /etc/ImageMagick-7/policy.xml dosyasına kopyalanabilir. En azından MSL coder’ı, Ghostscript coder’ları ve gs aracısı engellenmeli. Rails düzeltmeyi 8.1 ve 8.0 için yama olarak da yayınladı.
8.0’dan eski sürüm serilerindeki uygulamalar bu geçici çözümü kullanabilir ya da 8.0 ve sonrasına yükseltebilir.
Rails’in ikinci açık için önerdiği geçici çözümler yalnızca FFmpeg kullanımını değiştiriyor. Hiçbiri ImageMagick’i kapsamıyor.
Uygulama ekleri Disk servisiyle saklanıyorsa secret_key_base ve uygulama sürecinin okuyabildiği her diğer gizli bilgi değiştirilmeli. Bu, anahtar, config/credentials.yml.enc içindeki her şey, depolama ve veritabanı kimlik bilgileri ve üçüncü taraf belirteçlerini kapsıyor. Ortaya çıkmış bir gizli bilgi yedek olarak tutulmamalı.
Duyuruda uygulamanın daha önce hedeflenip hedeflenmediğinin nasıl kontrol edileceği açıklanmıyor.