OPSWAT'ın Kırmızı Ekibi tarafından yürütülen kapsamlı bir güvenlik analizi aracılığıyla, güvenlik araştırmacıları Thai Do ve Minh Pham, özellikle CVE-2025-25184, CVE-2025-27111 ve CVE-2025-27610 olmak üzere Rack Ruby çerçevesini etkileyen birden fazla güvenlik açığı tespit etti.
Bu makale, özellikle CVE-2025-27610'a odaklanarak bu güvenlik açıklarına ayrıntılı bir genel bakış sunmaktadır. Temel nedenleri incelemekte, potansiyel etkileri değerlendirmekte ve Rack çerçevesine dayanan uygulamaları güvence altına almak için etkili hafifletme stratejilerini ana hatlarıyla belirtmektedir.
Rafa Genel Bakış
Rack, web sunucularını Ruby tabanlı web uygulamalarına bağlayan modüler bir arayüzdür. HTTP isteklerini ve yanıtlarını tek bir yöntem çağrısına sararak, geliştirme sürecini basitleştirerek ve çeşitli çerçeveler ve sunucular arasında uyumluluğu teşvik ederek bu bileşenler arasındaki etkileşimi standartlaştırır.
Rack, Ruby on Rails ve Sinatra gibi birçok Ruby web çerçevesi ve kütüphanesi tarafından kullanılır. Bir Ruby Gem'i olarak mevcuttur. Dünya çapında bir milyardan fazla indirme ile Rack'in yaygın küresel benimsenmesi, Ruby geliştirme ekosistemindeki ayrılmaz rolünü vurgular. Rack::Static ve Rack::Sendfile gibi ara katman bileşenleri, statik içerik dağıtımını ele alarak ve dosya iletimini optimize ederek verimliliği artırır. Bu kapsamlı entegrasyon nedeniyle, Rack içinde keşfedilen güvenlik açıkları, potansiyel olarak dünya çapında çok sayıda uygulama ve sistemi etkileyen önemli güvenlik etkileri sunar.
Rack'te Güvenlik Açığı Keşfi
OPSWAT araştırmacıları Thai Do ve Minh Pham, Rack ara katman çerçevesi üzerinde yürütülen son güvenlik araştırması sırasında Ruby tabanlı web uygulamaları için önemli güvenlik riskleri oluşturan birkaç güvenlik açığı tespit etti:
- CVE-2025-25184: Thai Do, saldırganların CRLF (Satır Başı Besleme) karakterleri aracılığıyla günlük enjeksiyonu gerçekleştirmesine olanak tanıyan ve potansiyel olarak günlük girdilerini manipüle eden bir güvenlik açığı keşfetti.
- CVE-2025-27111: Minh Pham, saldırganların kötü amaçlı başlık değerleri aracılığıyla günlük içeriğini enjekte etmesine ve manipüle etmesine olanak tanıyan bir güvenlik açığını ortaya çıkardı.
- CVE-2025-27610: Minh Pham ayrıca, saldırganların belirlenen statik dosya dizininin dışında bulunan dosyalara yetkisiz erişim sağlamasına olanak tanıyarak önemli bir güvenlik tehdidi oluşturabilecek bir Yol Geçişi güvenlik açığı tespit etti.
Bu güvenlik açıkları arasında CVE-2025-27610, kimliği doğrulanmamış saldırganların yapılandırma dosyaları, kimlik bilgileri ve gizli veriler dahil olmak üzere hassas bilgileri almasına ve böylece veri ihlallerine yol açmasına olanak sağlayabileceğinden özellikle ciddidir. Bu güvenlik açığına 7.5 CVSS puanı atanmıştır ve yüksek önem derecesine sahip bir risk olarak kategorize edilmiştir.
Rack::Static ve Yerel Dosya Ekleme Güvenlik Açığı
Rack::Static'i Anlama
Rack::Static, Rack uygulamalarında öncelikle JavaScript, CSS ve görüntüler gibi statik dosyaları verimli bir şekilde sunmak için kullanılan temel bir ara yazılımdır. Geliştiriciler, Rack::Static'ten yararlanarak, ek web sunucusu yapılandırmasına ihtiyaç duymadan statik içerik sunumunu Ruby uygulamalarına sorunsuz bir şekilde entegre edebilirler.
Rack::Static'i yapılandırırken iki temel seçenek öne çıkar - :urls ve :root. Bu seçeneklerin doğru anlaşılması ve kullanılması, statik dosya sunma sürecini önemli ölçüde basitleştirir ve kolaylaştırır.
1. urls Seçeneği
urls seçeneği, Rack uygulamasının hangi URL yollarını statik varlıklar olarak işlemesi gerektiğini belirtir. Her biri statik dosya işlemeyi tetikleyen bir yol önekini temsil eden dizelerden oluşan bir dizi olarak sağlanır.
Örneğin:
Bu yapılandırmada, /images, /css veya /js 'ye yapılan istekler Rack::Static tarafından durdurulur ve işlenir. Bu yollarla eşleşen herhangi bir dosya doğrudan dosya sisteminden sunulacaktır.
2. Kök Seçeneği
root seçeneği, statik dosyaların sunulacağı temel dizini tanımlar. Bu dizin, Rack uygulamanızın geçerli çalışma dizinine görelidir.
Önceki örnek göz önüne alındığında:
assets/logo.png adresine bir istek yapıldığında, Rack::Static public/assets/logo . png adresinde bulunan dosyayı sunmaya çalışır.
Pratik Örnek
Rack::Static'in :urls ve :root seçenekleri ile etkili bir şekilde uygulanması, Ruby web uygulamaları içinde statik içerik sunmak için düzenli ve performanslı bir yöntem sunar:
Bu senaryoda, /assets/* ve /favicon.ico'ya yönelik istekler otomatik olarak Rack::Static tarafından ele alınacaktır. İlgili tüm dosyalar sırasıyla public/assets dizininde ve public/favicon.ico dizininde bulunmalıdır.
CVE-2025-27610 Teknik Detay
Minh Pham , Rack::Static'in kapsamlı bir güvenlik analizi sırasında :root seçeneğinin yanlış işlenmesiyle ilgili önemli bir güvenlik açığı keşfetti. Özellikle, :root parametresi açıkça tanımlanmadığında, Rack bu değeri varsayılan olarak Dir.pwd değerini atayarak geçerli çalışma dizinine atar ve dolaylı olarak Rack uygulaması için web kök dizini olarak belirler.
Önemli olarak, Rack::Static gelen URL yollarını yeterli doğrulama veya sanitizasyon olmadan belirtilen :root dizini ile doğrudan birleştirir. Sonuç olarak, :root seçeneği tanımlanmamışsa veya :urls seçeneğine göre yanlış yapılandırılmışsa, kimliği doğrulanmamış bir saldırgan, amaçlanan web dizini dışındaki hassas dosyalara erişmek için yol çaprazlama teknikleri aracılığıyla bu güvenlik açığından yararlanabilir.
Aşağıdaki bölüm, Rack::Static'in istek işleme sürecinin ayrıntılı bir analizini sunarak bu güvenlik açığından nasıl yararlanılabileceğini açıkça göstermektedir.
Rack::Static'te Yol Geçişi ve Yerel Dosya Ekleme Güvenlik Açığı
Minh Pham, Rack::Static ara yazılımının istekleri nasıl işlediğini daha iyi anlamak için Rack'in kaynak kodunda kapsamlı bir analiz gerçekleştirdi. Rack::Static sınıfının başlatılması sırasında, :root seçeneğinin açıkça tanımlanmaması durumunda, Rack::Static'in varsayılan olarak geçerli çalışma dizininden (Dir.pwd) dosya sunmaya başladığını gözlemledi. Sonuç olarak, bu seçeneğin atlanması, ara yazılımın dolaylı olarak uygulamanın yürütüldüğü dizini kullanmasına neden olur.
İlklendirmenin ardından, Rack::Static gelen bir HTTP isteği aldığında, çağrı yönteminin çağrıldığı belirlenmiştir.
Daha sonra, Rack::Static dosya sunma işlemini, yapılandırılmış :root dizini ve kullanıcı tarafından sağlanan PATH_INFO'dan türetilen yapılandırılmış dosya yoluna dayalı olarak dosyayı bulmaya ve sunmaya çalışan Rack::Files'a devreder.
İlk olarak, can_serve(path) ve overwrite_file_path(path) yöntemlerini çağırarak, ara yazılım, gelen isteğin yapılandırılmış URL öneklerinden (örn. /static, /public) herhangi biriyle eşleşip eşleşmediğini belirlemek için env["PATH_INFO"] dosyasını inceler.
Koşul karşılanırsa, Rack::Static yapılandırılmış kök dizini (:root) kullanıcı tarafından sağlanan PATH_INFO ile birleştirerek dosya yolunu oluşturur. Bu yapı, girdi yolunun yeterli normalizasyonu veya sanitizasyonu olmadan gerçekleşir. Özellikle, ara yazılım gelen istekten gelen PATH_INFO'yu doğrudan :root seçeneği tarafından belirtilen dizinle birleştirir ve sağlanan yolun yetersiz doğrulanması nedeniyle bir güvenlik açığı ortaya çıkarır
Minh Pham, bu iş akışında uygun sanitizasyon veya doğrulama olmaması nedeniyle, kullanıcı tarafından sağlanan PATH_INFO dizin çaprazlama dizileri içeriyorsa ve :root seçeneği açıkça tanımlanmamışsa, oluşturulan dosya yolunun amaçlanan kök dizinin dışındaki bir konuma çözümlenebileceğini ve hassas dosyaların açığa çıkabileceğini keşfetti.
CVE-2025-27610 Kavram Kanıtı
Rack::Static'teki bu güvenlik açığını göstermek için, Rack sürüm 3.1.10 kullanan Ruby tabanlı bir web uygulaması geliştirdik. Uygulamanın :root seçeneğini açıkça tanımlamadığı senaryolarda, kimliği doğrulanmamış bir saldırgan, kimlik bilgileri, yapılandırma dosyaları veya veritabanı dosyaları gibi hassas verilere erişmek için bu güvenlik açığından yararlanabilir ve potansiyel olarak önemli bir veri ihlaline yol açabilir.
Bu güvenlik açığı ile ilişkili önemli etkinin ayrıntılı bir gösterimi için lütfen aşağıdaki videoya bakın:
Hafifletme ve Rehberlik
Yukarıda bahsettiğimiz güvenlik açıklarını azaltmak için lütfen sisteminizin en son Rack sürümüne güncellendiğinden emin olun.
SBOM motorunu kullanan MetaDefender Core bu güvenlik açığını tespit edebilir.
OPSWAT MetaDefender CoreGelişmiş SBOMSoftware Bill of Materials) özellikleri ile donatılmış olan MetaDefender Core, kurumların güvenlik risklerini ele almada proaktif bir yaklaşım benimsemelerini sağlar. MetaDefender Core , yazılım uygulamalarını ve bağımlılıklarını tarayarak, listelenen bileşenlerdeki CVE-2025-27610, CVE-2025-27111 ve CVE-2025-25184 gibi bilinen güvenlik açıklarını tanımlar. Bu da geliştirme ve güvenlik ekiplerinin yama çalışmalarına öncelik vermesini sağlayarak olası güvenlik risklerini kötü niyetli kişiler tarafından istismar edilmeden önce azaltıyor.
Aşağıda MetaDefender Core tarafından SBOM ile tespit edilen CVE-2025-27610, CVE-2025-27111 ve CVE-2025-25184'ün ekran görüntüsü yer almaktadır: