Ruby on Rails Kritik Güvenlik Zafiyetleri

Geçtiğimiz hafta Ruby on Rails web framework’ünde ortaya çıkan kritik zafiyetler geliştiricileri korkuttu. Ortaya çıkan zafiyetler arasında uzak sunucudaki dosya içeriği görüntüleme(File Content Disclosure), servis dışı bırakma (DoS), uzak sunucuda kod çalıştırma(RCE) zafiyeti gibi kritik güvenlik zafiyetler bulunmaktadır. CVE-2019-5418, CVE-2019-5419 ve CVE-2019-5420 olarak numaralandırılan zafiyetler 6.0.0.be3, 5.2.2.1, 5.1.6.2, 5.0.7.2 ve 4.2.11.1’den önceki tüm Rails sürümlerindeki uygulamalarınızı tehdit etmektedir. Bu zafiyetler, uygulamaların servis dışı kalmasının yanı sıra sunucudaki özel dosyaların görüntülenmesine, uzaktan sunucu üzerinde komut çalıştırılabilmesine dahi sebep olabilmektedir. Saldırganlar uygulamanızda komut çalıştırabildiği takdirde uygulama sunucunuz ve uygulamanın kontrolü saldırganların eline geçebilmektedir.

Etkileri

CVE-2019-5418 numaralı zafiyet sayesinde saldırgan zararlı HTTP header’ı zafiyetli uygulama sunucusuna göndererek, sunucuda yetkisi dahilinde bir dosyanın içeriğini görüntüleyebilmektedir.

CVE-2019-5419 numaralı zafiyet, rails uygulamalarını servis dışı bırakma (DoS) saldırısına maruz bırakmaktadır. Saldırganlar özel hazırlanmış HTTP header’ı kullanılarak, CPU’yu en üst düzeye çıkarabilmekte ve uygulamayı devre dışı bırakabilmektedir.

CVE-2019-5420 numaralı zafiyet ise sadece 6.0.0.X, 5.2.X versiyonlarını etkilerken rails uygulamalarının bulunduğu sunucularda saldırganların uzaktan kod çalıştırabilmesine olanak tanımaktadır. Böylece uygulama ve sunucunun kontrolü saldırgana geçebilmektedir.

Zafiyet Sebebi

Zafiyetlerin temel sebebi, uygulamadaki render file çağrılarından kaynaklanmaktadır. content_negotiation_test.rb, mime_negotiation.rb, respond_to_test.rb gibi dosyalarda yapılan hatalardan kaynaklanan zafiyet, özel bir kabul formatı olmayan render dosyaları dışındaki bütün render file çağrılarında istismar edilebilmektedir. Aşağıda zafiyetli ve zafiyetsiz(özel kabul formatı içeren) olarak kod örnekleri görülmektedir.

Zafiyetli Kod Parçası

class UserController < ApplicationController
def index
render “index”
end
end

Zafiyetsiz Kod Parçası

class UserController < ApplicationController
def index
respond_to |format|
format.html { render “index” }
end
end
end

CVE-2019–5420 numaralı zafiyet ise biraz daha farklı sebeplere dayanmaktadır. Ruby-on-Rails, kişilerin uygulamalarını kolayca yazabilmelerini sağlamak için “imza oturumları”(signed-sessions) kullanmaktadır. CVE-2019-5420 numaralı zafiyette ise oturumları şifrelemek için kullanılan anahtar, uygulama adına göre belirli bir düzende atandığı için bu anahtar tahmin edilebilir bir seviyede olmaktadır. Böylece saldırganlar anahtarı ele geçirerek sesionı kullanabilmektedir. Bu sorunda uzaktan kod çalıştırma (RCE) için kullanılabilmektedir.

Demo

Zafiyetimizin demosunu yapmak için rails:5.2.2 sürümünü kullanılmaktadır. Uygulamamızın görünümü şekildeki gibidir. Zafiyetimizi istismar etmek için özel olarak hazırlanmış header’i uygulamaya göndermemiz gerekmektedir.

Ruby on Rails Kritik Güvenlik Zafiyetleri

Zararlı payloadımız aşağıdaki gibidir. Zafiyetli rails uygulamamıza özel bir istek göndererek, directory traversal tekniğini ile /etc/passwd dosyası gibi özel bir dosyayı görüntülemek istemekteyiz.

curl -H ‘Accept: ../../../../../../../../etc/passwd{{‘ ‘http://localhost:3000/robots’;

Ruby on Rails Kritik Güvenlik Zafiyetleri

Yukarıdaki ekran görüntüsünde zafiyetli uygulamamıza gönderdiğimiz isteğe gelen cevap görülmektedir. Zararlı isteğimizde /etc/passwd dosyası görüntülemek istenmektedir. Sunucudan gelen yanıtta da sunucu içindeki /etc/passwd dosyası görüntülenmektedir. Bu teknik kullanılarak sunucu içindeki dosyalar görüntülenebilmekte ve zafiyet istismar edilebilmektedir.

Yukarıda bahsedilen zafiyetlerin kapatılması için content_negotiation_test.rb, mime_negotiation.rb, respond_to_test.rb gibi dosyalarda düzeltmeler yapılması gerekmektedir. Zafiyetler ile ilgili yayınlanan patch dosyalarına aşağıdaki linklerden erişilmektedir.

https://groups.google.com/forum/#!topic/rubyonrails-security/pFRKI96Sm8Q
https://groups.google.com/forum/#!topic/rubyonrails-security/IsQKvDqZdKw
https://groups.google.com/forum/#!topic/rubyonrails-security/GN7w9fFAQeI

Blog postu ile ilgili bir sorunuz varsa bizimle iletişime geçebilirsiniz.

Size nasıl yardımcı olalım?

İhtiyacınız olan her an Prisma danışmanları yanı başınızda. Bizimle 7/24 iletişime geçebilirsiniz.


    Sızma testi hizmetlerimizi incelediniz mi?