SSRF(Server Side Request Forgery) Zafiyeti

Alperen
5 min readDec 3, 2023

--

SSRF ( Server Side Request Forgery) Nedir ?

Server Side Request Forgery, Türkçe anlam olarak bakıldığında ‘sunucu taraflı istek sahteciliği’ denilebilir. Saldırganların zafiyet bulunduran web uygulaması adına istek gönderebilmesidir. Parametreleri değiştirerek isteklerin varış noktasına kendi karar verebilir. Web sunucusunun uzak kaynakları çağırmasına izin verilen domainler ve protokoller denetlenmediğinde bu zafiyet ortaya çıkabilmektedir. Kısaca uzak bir sunucudan web uygulamasıyla veri almak için yapılan istekte, URL’ sini değiştirerek zararlı bir yönlendirme yapabiliriz. SSRF kusurları, bir web uygulaması, kullanıcı tarafından sağlanan URL’yi doğrulamadan uzak bir kaynağı getirdiğinde ortaya çıkar. Bir saldırganın, bir güvenlik duvarı, VPN veya başka türde bir ağ erişim kontrol listesi (ACL) tarafından korunuyor olsa bile, uygulamayı beklenmedik bir hedefe hazırlanmış bir istek göndermeye zorlamasına olanak tanır.

Web uygulamaları son kullanıcılara kullanışlı özellikler sağladığından, bir URL’nin getirilmesi yaygın bir senaryo haline gelir. Sonuç olarak SSRF görülme sıklığı artıyor. Ayrıca bulut hizmetleri ve mimarilerin karmaşıklığı nedeniyle SSRF’nin ciddiyeti artıyor.

SSRF Zafiyeti Nedenleri ve Tespiti

Zafiyet Nedenleri

URL validation olmaması. Bu belirli bir sayfanın Google tarafından dizine eklenmiş sürümü hakkında bilgi sağlar ve URL’nin dizine eklenebilir olup olmadığını test etmemize olanak sağlar. Bir uygulama XML biçimindeki verileri kabul edip ayrıştırdığında, XXE enjeksiyonuna karşı savunmasız olabilir ve karşılığında XXE aracılığıyla SSRF’ye karşı savunmasız olabilir. Bazı durumlarda web uygulaması yazılım güncellemesi gibi sebeplerle de uzak kaynakları alma veya URL gibi kaynaklardan içerik aldıklarında güvenlik tamamlamalarına çok dikkat edilmeli. Dolayısıyla bu çalışmalar doğru bir şekilde yapılmaz ise SSRF zafiyeti ortaya çıkmış olur.

Zafiyetin Tespiti

Uygulamadan gelen istekler içerideki başka bir sunucudan işlem yapmasını sağlayabilirsek oluşan zafiyeti ortaya çıkarmış oluruz. Api’den bilgi çekiliyor ise bunun üzerinden erişim sağlamaya çalışarak tespit edilebilir. Giden istekteki bir sunucunun, insanların ziyaret ettiği yönlendiren sayfaları veya talep edilen kaynakların nerede kullanıldığını belirlemesini üzerinde yapılan değişiklikler ile de bulabiliriz.

SSRF Zafiyetinin Kullanımı

SSRF zafiyetinin sömürülmesiyle;

  • Normal olarak erişilemeyen iç ağlarda keşif ve saldırı
  • Siteler arası yazım biçiminde çalıştırma
  • Uzaktan kod çalıştırma
  • Sunucudan dosya okunması
  • URL şemaları kullanarak sunucuya işlem yaptırılması, (ftp://, dict://, http://, gopher://, file:// vb.)
  • Cloud servislerin meta-data bilgilerinin çekilmesi,
  • Whitelist ve DNS çözümlemelerinin aşılması

gibi faaliyetler yapılabilir.

SSRF Zafiyetinin Yansımaları

1. Etkilenen sunucuya duyulan güvenin kötüye kullanımı

En etkili yöntem, saldırı etki alanını en aza indirip mümkün olduğu kadar küçük tutmaktır. Belirli portlara ve eylemlere erişim genellikle, beyaz listeye alınmış cihazlarla sınırlandırılmaktadır. Beyaz listeler, belirli gereklilikleri yerine getirmiş, bazı niteliklere sahip olan kullanıcıların söz konusu etkinliğe açıkça erişimine izin veren listelerdir. Diğer bir güvenlik ise IP adresi (127.0.0.1) veya farklı olarak yerel ağdaysa, bazı işlemler için kimlik doğrulama gerekli değildir. Bu tür bir güven, bir saldırganın parolayı bildiği halde yerel ağa erişimi olmadan giriş yapamamasını sağlamak için kullanılabilir.

Yine de saldırgan, bu önlemleri atlatabilir. Sunucular verileri kolayca paylaşmak için diğer bağlantılarla güven ilişkisine sahiptir. SSRF(Server Side Request Forgery) zafiyetini de bu şekilde kullanıp cihaza güvenen diğer sunucuları sorgulayabilir veya dış ağdan erişilemeyen bazı portlarla etkileşim kurmak için çıkar amaçlı fiillerde bulunabilir.

2. Yerel veya Harici Ağların Taranması

Saldırganlar, SSRF güvenlik açığından yararlanarak, güvenlik açığı bulunan sunucunun bağlı olduğu yerel veya harici ağları tarayabilir. Aynı zamanda bir sayfanın yüklenme süresini, sayfadaki hata mesajını veya hedefteki araştırmadan cevap geri dönüşünü belirlemek ve test edilen portun açık olup olmadığını anlamak için sorguladıkları banner bilgisini kullanırlar. Bannerlar, Bannerlara, reklam verenin tescilli sitesine yönlendirmesi ve bilinirlik oluşturmasını sağlayan yöntem diyebiliriz.

Saldırganların hostun ayakta olup olmadığını anlamak için web servisinin yanıtını etkileyen nasıl farklı inputlar kullanabildiğine bakalım.

“https://victim.com/image.php?url=https://example.com/picture.jpg” şeklinde istekte bulunursak cevap olarak resmin boyutlarını alırız. Content-Type (kaynağa erişmek isteyen kullanıcının hangi medya türünde doküman istediğini bildiren içerik bilgisidir) headerı doğru olan geçerli bir resim olduğu anlamına gelir. Farklı bir istekte bulunmayı deneyelim ve sunucuya yaptığımız istekte resim yerine bir HTML dosyası gönderelim;

“https://victim.com/image.php?url=https://example.com/index.html"

Bu durumda yüklenen sayfanın Content-Type headerı “text/html” olduğundan servisin cevabı “Sadece jpeg imajları kabul edilmektedir” olur. Eğer geçersiz bir URL ile istekte bulunursak;

“https://victim.com/image.php?url=https://example.invalid/”

Servis “Resim bulunamadı” hatasının döndüğünü görürüz. Bunun anlamı ise uzak kaynak alınırken bir hata oluştuğudur. Devamında uygulamanın farklı girdiler için nasıl davrandığını artık bildiğimizden kötüye kullanmayı düşünebiliriz. Yanlış veya eksik Content-Type headerı olan geçerli bir URL’in “Sadece jpeg imajları kabul edilmektedir” hatasını döndürdüğünü biliyoruz. Bunun anlamı aşağıdaki isteği gönderirsek;

“https://victim.com/image.php?url=127.0.0.1:3306”

Ve “Resim bulunamadı” hatası alırsak, bunun anlamı 127.0.0.1 port 3306’da yanıt yok demektir. Eğer “Sadece jpeg imajları kabul edilmektedir.” hatasını alırsak sunucudan gelen bir yanıtın olduğunu, port üzerinde bir servisin çalıştığını anlayabiliriz. Bundan dolayı bu metodu, tam bir tarama yapma amacıyla farklı dahili IP adreslerini ve portlarını sorgulamak için kullanabiliriz.

3. Sunucudan Dosyaların Okunması

Uzak bir kaynağın içeriği doğrudan bir sayfaya yansıtıldığında, saldırganların dosyaların içeriğini okuma olasılığı vardır. Örnek olarak, verilen bir URL’den tüm resimleri kaldıran ve metni biçimlendiren bir web servisini örneklendirdiğimizde. İlk önce belirli bir URL’nin yanıt gövdesini elde ederek çalışır, daha sonra biçimlendirmeyi uygular.

Eğer http:// veya https:// yerine file:// kullanılırsa yerel dosya sisteminden dosyalara ulaşabiliriz. Örneğin file:///etc/passwd kullanırsak unix(çok kullanıcılı işlevselliği destekleyen bir işletim sistemidir) sistemlerindeki passwd dosyasının(Kullanıcı kimliği, grup kimliği…) içeriğini sayfaya yazdırabiliriz. Aynı teknik zafiyet bulunan web uygulamasının kaynak kodunu görmek için de kullanılabilir.

Sunucudan dosya okunması:

SSRF zafiyeti doğrulanmış bir sunucuda file:// şeması kullanılarak dosya okunabilir.

SSRF Zafiyetinin Etkileri

Anlattığımız başlıklarda bahsettiğimiz durumlara göre:

  • Portları ve IP adreslerine ulaşmaya imkan sağlar.
  • Daha fazla keşif yapmanıza izin veren Gopher gibi bazı protokollerle etkileşime izin verir. Gopher protokolü: Gopher, bir TCP/IP protokolüdür. İnternette HTTP teknolojisi yaygınlaşmadan önce sitelerin düz metin formatıyla sunulmasını sağlayan protokol. Veronica ve Jughead gibi arama motorları Gopher sayfalarına erişmek amacıyla kullanılabilmektedir.
  • Bir reverse proxynin arkasındaki sunucuların IP adreslerini tespit edebilir.
  • Uzaktan kod yönetimi yapabilir.

SSRF Zafiyeti Önleme

SSRF(Server Side Request Forgery) zafiyetini önlemenin en etkili yolu whitelistdir. Uzak kaynak çağırması için izin verilen protokol ve domainler için kullanmamız önemlidir. SSRF saldırılarına karşı korunmak için aşağıdaki önlemleri almak önemlidir:

1. Giriş Doğrulama ve Kontrol: Girişleri doğrulamak ve kontrol etmek, SSRF saldırılarının önlenmesinde etkili bir yöntemdir. Kullanıcı tarafından sağlanan girişleri sıkı bir şekilde doğrulayarak, yalnızca güvenli ve beklenen kaynaklara erişime izin verilmelidir. Girişleri filtrelemek için beyaz liste (whitelist) yaklaşımı kullanmak, izin verilen kaynakları belirlemekte yardımcı olur.

2. Sunucu Yanı Doğrulama: SSRF saldırılarını önlemek için sunucu tarafında da güvenlik önlemleri alınmalıdır. İsteklerin hedef URL’lerinin geçerliliği kontrol edilmeli ve izin verilen kaynaklara sınırlamalar getirilmelidir. Sunucu tarafında yapılandırılan yetkilendirme mekanizmalarıyla, yalnızca güvenilir ve doğrulanmış kaynaklara erişime izin verilmelidir.

3. Güvenlik Duvarı (Firewall): Güvenlik duvarı, ağ trafiğini kontrol etmek ve zararlı istekleri engellemek için kullanılabilir. SSRF saldırılarına karşı özelleştirilmiş filtrelerin ve kısıtlamaların yapılandırıldığı bir güvenlik duvarı, saldırıları tespit edip engellemekte yardımcı olur. Güvenlik duvarı, saldırganların istenmeyen ağ kaynaklarına erişimini engelleyerek SSRF saldırılarının etkisini azaltır.

4. Eğitim ve Farkındalık: SSRF saldırılarının önlenmesinde, kullanıcıların ve geliştiricilerin eğitimli olması önemlidir. Güvenlik bilincinin artırılması ve SSRF saldırılarının nasıl gerçekleştiği konusunda farkındalığın oluşturulması, güvenlik açıklarının daha iyi anlaşılmasına ve önlemlerin alınmasına yardımcı olur. Şirket içinde düzenlenen eğitimler ve güvenlik politikaları, bu konuda bilinçli bir yaklaşımın önemsenmesine katkı sağlar.

SSRF Zafiyetlerini Tespit Etmek

Temel önleyici tedbirler arasında kullanıcı girişlerinin doğrulanması, filtrelenmesi veya temizlenmesi, giden bağlantılar için izin verilenler listelerinin kullanılması ve bir SSRF saldırısının potansiyel erişimini kısıtlamak için dahili ağların bölümlere ayrılması yer alır.

SSRF güvenlik açıkları, girişleri her zaman doğrulamamız ve web uygulamalarına sağladığımız yeteneklere dikkat etmemiz gerektiğinin güçlü bir hatırlatıcısıdır.

--

--