Ruby on Rails uygulamalarında yeni ortaya çıkan bir güvenlik açığı, saldırganların rastgele dosya yazmaya izin veren bir kusur aracılığıyla Uzaktan Kod Yürütme (RCE) gerçekleştirmesine olanak tanıyor.
Rails kütüphanesinden yararlanan bu güvenlik açığı Bootsnapweb uygulamalarında güvenli dosya işlemenin kritik öneminin altını çiziyor.
Ne oldu?
Güvenlik araştırmacıları tarafından paylaşılan bir vaka çalışması, Rails uygulamasındaki rastgele bir dosya yazma güvenlik açığının, kötü amaçlı kodu uzaktan yürütmek için nasıl istismar edilebileceğini gösterdi.
Güvenlik açığı, örnek bir Rails uç noktasına yüklenen dosyaların hatalı işlenmesi ve pahalı dosya işlemlerini önbelleğe alarak uygulama önyükleme sürelerini hızlandırmak için tasarlanmış bir kitaplık olan Bootsnap’in kötüye kullanılmasından kaynaklanmaktadır.
Investigate Real-World Malicious Links & Phishing Attacks With Threat Intelligence Lookup - Try for Free
Gösterim, yüklenen dosyaların kullanıcı tarafından sağlanan girişler kullanılarak sınırsız yollara kaydedilebildiği, kodun güvenlik açığı bulunan bir bölümüne dayanıyordu:
def save_uploaded_file(uploaded_file, filename)
upload_path = Rails.root.join("tmp", "uploads")
FileUtils.mkdir_p(upload_path)
File.open(File.join(upload_path, filename), 'wb') do |file|
file.write(uploaded_file.read)
end
end
Saldırganlar, yol geçiş tekniklerini kullanarak kısıtlamaları aşarak dosyaları yazılabilir herhangi bir dizine yazarak bu durumdan yararlandılar.
Bootsnap ve Rastgele Dosya Yazma Nasıl Çarpışıyor?
Rails’e 5.2 sürümünde tanıtılan Bootsnap, daha hızlı yükleme süreleri için Ruby dosyalarını, YAML ve JSON kaynaklarını önbelleğe alır.
Saldırganlar, tmp/cache/bootsnap dosyasında bulunan önbellek dosyalarını değiştirerek, uygulama başlatılırken yürütülecek kötü amaçlı kodları enjekte edebilir.
Bu istismar, kesin bilgi gerektirir. Bootsnap önbellek yapısı ve Rails uygulamasını yeniden başlatma yeteneği. Saldırı şu şekilde işliyor:
- Yazılabilir Dizinleri Tanımlayın: Docker kapsayıcılarında dağıtılan uygulamalar, yazılabilir konumları /tmp veya /rails/tmp gibi dizinlerle kısıtlayabilir.
- Bootsnap Önbellek Dosyasını Hedefleme: Bootsnap, Ruby bayt kodunu derlenmiş, dosya yolunun karma değeriyle anahtarlanmış, öngörülebilir bir yapıda önbelleğe alır. Bu, rastgele dosya yazma güvenlik açığını kullanarak doğru önbellek dosyasını bulmayı ve üzerine yazmayı kolaylaştırır.
- Kötü Amaçlı İçerik Enjekte Etme: Saldırgan, kötü amaçlı Ruby kodu içeren bir veri yükü oluşturur ve bunu uygun önbellek dosyasına yazar. Örneğin, yük şu şekilde görünebilir:
`id > >&2` # Command injection to print the current user
load("/path/to/original/file") # Load the intended file to avoid crashing the app
- Sunucunun Yeniden Başlatılmasını Tetikleyin: tmp/restart.txt dosyasına yazmak, Rails uygulama sunucusu Puma’da yeniden başlatmayı tetikler.
- RCE’ye ulaşın: Başlatma sırasında, kötü amaçlı Bootsnap önbellek dosyası yüklenir ve Ruby kodunun yürütülmesine izin verilir.
Güvenlik açığı, kontrol edilebilir dosya yüklemeleri ve Rails uygulamasında Bootsnap kullanımı gibi belirli koşullar gerektirse de, bu koşulların karşılandığı üretim ortamlarında önemli bir risk oluşturur.
Araştırmacılara göre, sürüm 7.1’den sonraki varsayılan Rails Docker yapılandırmaları, yazılabilir yolları tmp ve log gibi birkaç önemli dizinle sınırlandırarak sorunu daha da kötüleştiriyor.
- Beyaz Kutu Kullanımı: Uygulamaya tam erişim sayesinde, kötü amaçlı önbellek anahtarları oluşturmaya yönelik tüm bilgilere erişilebildiğinden, güvenlik açığından yararlanmak kolaydır.
- Kara Kutu Sömürü: Sınırlı ortamlarda bile dosya yolları, Ruby sürümleri ve önbellek formatları gibi kaba kuvvet değerleri, yeterli kaynağa sahip saldırganlar için uygun olmaya devam eder.
- Güvenli Dosya İşleme: Yol geçişi saldırılarını önlemek için dosya yüklemeleriyle ilgili kullanıcı girişlerini doğrulayın ve temizleyin.
- Yazılabilir Dizinleri Kısıtla: Üretimde geniş yazma izinleri vermekten kaçının. Dosya yazma yeteneklerini kritik olmayan yollara dahil etmek için zorunlu erişim kontrolleri gibi mekanizmalar kullanın.
- İzleme ve Yama: Bilinen güvenlik açıklarına karşı korunmaya devam etmek için Bootsnap ve Rails gibi bağımlılıkları düzenli olarak güncelleyin.
- Root Dışı Kullanıcıları Kullan: Docker dağıtımlarında en iyi uygulama olarak, potansiyel hasarı en aza indirmek için konteynerlerin root olmayan kullanıcılarla çalıştırıldığından emin olun.
Conviso raporuna göre, “Rails Uygulamalarının Keyfi Dosya Yazma Güvenlik Açığı, Saldırganların Kodu Uzaktan Yürütmesine İzin Veriyor”, güvenli olmayan kodlama uygulamalarını mevcut kitaplıklarla birleştirmenin tehlikelerini vurguluyor.
Geliştiriciler ve sistem yöneticileri, uygulama kodunu ve yapılandırmalarını düzenli olarak denetlemek için birlikte çalışmalı ve bu gibi güvenlik açıklarının, kullanımdan önce tanımlanmasını ve azaltılmasını sağlamalıdır.
Jenkins & Jira’yı Kullanarak Uygulama Güvenliğini CI/CD İş Akışlarınıza Entegre Etme -> Ücretsiz Web Semineri