CwMuhibban
- 20 Ara 2025
- 67 Mesaj
Aktiflik
Seviye
Deneyim
Selamın aleyküm kardeşlerim
Konumuz SSRF yani Server-Side Request Forgery. Bir web sitesini test ederken bazen uygulamanın sizden bir link istediğini görürsünüz. Örneğin bir foruma kayıt olurken "Profil resmini URL'den çek" kutucuğu veya e-ticaret sitesinde "Faturayı PDF olarak oluştur" butonu gibi. İşte uygulamanın dış dünyadan bir veri çekmeye çalıştığı o an, sunucuyu kendi silahıyla vurma fırsatının doğduğu andır.
Sunucu dediğimiz yapı aslında dış dünyadaki tehlikelere kapalı olan, güvenlik duvarlarıyla korunan bir kaledir. Siz bu kalenin içindeki kuryeye bir not verirsiniz ve "Git bana şu adresteki resmi al getir" dersiniz. Kurye kaleden çıkar, resmi alır ve size getirir. Buraya kadar sistem normal çalışıyor. Ama ya siz kuryeye dışarıdaki bir adresi değil de, kalenin kendi içindeki gizli bir odanın adresini verirseniz ne olur.
Normalde bir saldırgan olarak sizin sunucunun iç ağındaki veritabanına veya yerel dosyalarına doğrudan erişiminiz yoktur. Güvenlik duvarı sizi anında engeller. Ancak kurye yani sunucunun kendisi zaten içeridedir. İçerideki kurye kalenin kendi kapısını çaldığında kimse ona kimlik sormaz.
Şimdi hacker şapkamızı takalım. O kutucuğa resim linki yerine
ya da
yazdığımızı düşünelim.
Sunucu bu isteği aldığında dışarıya gitmek yerine kendi içindeki 3306 portuna yani veritabanına bakmaya çalışacaktır. Güvenlik duvarı dışarıdan gelen size kapalıdır ama sunucu kendi kendine soru sorduğu için kapılar ardına kadar açılır. Sonuç olarak profil resminiz olduğu yerde veritabanının hata mesajlarını veya sunucunun iç ağına ait banner bilgilerini okumaya başlarsınız. Kendi bilgisayarınızdan asla ulaşamayacağınız bir yere, sunucuyu aracı kılarak ulaştınız.
Eğer bulutta koşan bir uygulamada SSRF zafiyeti bulursanız, kuryeye şu sihirli adresi verirsiniz:
Bu IP adresi bulut sistemlerinin evrensel kara kutusudur. Sunucu bu adrese gidip o paketi açtığında, size sunucunun en gizli AWS erişim anahtarlarını, IAM tokenlarını ve tüm bulut altyapısının kontrolünü altın tepside sunar. Hiçbir exploit kodu yazmadan, sadece bir URL girerek koca bir şirketin bulut altyapısını ele geçirmiş olursunuz.
En kesin çözüm, kullanıcının girdiği alan adını (domain) önce IP adresine çevirmek (DNS Resolve) ve bu IP adresinin yerel bir ağa ait olup olmadığını kontrol etmektir. Python kullanan bir uygulamanın güvenli kod yaklaşımı şu şekilde olmalıdır:
Bu kod bloğu sayesinde saldırgan ne kadar kelime oyunu yaparsa yapsın, sistem önce o adresin nihai IP adresine bakar. Eğer hedef içerideki bir yerse kapıyı anında kapatır.
Ayrıca tehlikeli protokollerle konuşulmasını da baştan engellemiş oluruz.
Geliştirdiğiniz projelerde veya sızma testi yaptığınız sistemlerde dış kaynaklardan veri çekiliyorsa, sadece dış kapıyı değil içerideki odaların kapılarını da kilitli tutmayı bir standart haline getirmelisiniz. Yazılım mimarisini kurgularken içerideki bileşenlerin birbirine olan yetkilerini her zaman en alt seviyede tutmak zorundasınız. Unutmayın siber savaşlarda devasa kaleler genellikle dış surların yıkılmasıyla değil, içeri sızan bir kuryenin kapıları içeriden açmasıyla düşer.
Hayırlı günler dilerim, Allah'a emanet olun.
Konumuz SSRF yani Server-Side Request Forgery. Bir web sitesini test ederken bazen uygulamanın sizden bir link istediğini görürsünüz. Örneğin bir foruma kayıt olurken "Profil resmini URL'den çek" kutucuğu veya e-ticaret sitesinde "Faturayı PDF olarak oluştur" butonu gibi. İşte uygulamanın dış dünyadan bir veri çekmeye çalıştığı o an, sunucuyu kendi silahıyla vurma fırsatının doğduğu andır.
SSRF Nedir (Güvenilir Kurye Mantığı)
Sunucu dediğimiz yapı aslında dış dünyadaki tehlikelere kapalı olan, güvenlik duvarlarıyla korunan bir kaledir. Siz bu kalenin içindeki kuryeye bir not verirsiniz ve "Git bana şu adresteki resmi al getir" dersiniz. Kurye kaleden çıkar, resmi alır ve size getirir. Buraya kadar sistem normal çalışıyor. Ama ya siz kuryeye dışarıdaki bir adresi değil de, kalenin kendi içindeki gizli bir odanın adresini verirseniz ne olur.
Normalde bir saldırgan olarak sizin sunucunun iç ağındaki veritabanına veya yerel dosyalarına doğrudan erişiminiz yoktur. Güvenlik duvarı sizi anında engeller. Ancak kurye yani sunucunun kendisi zaten içeridedir. İçerideki kurye kalenin kendi kapısını çaldığında kimse ona kimlik sormaz.
Gerçek Hayat Senaryosu: Masum Bir Profil Resmi
Düşünün ki büyük bir forum sitesine kayıt oldunuz. Sistem size profil resmi yüklemek için iki seçenek sunuyor. Ya bilgisayardan seçeceksiniz ya da bir resim linki vereceksiniz. Siz link verme kutucuğuna [http://resim-sitesi.com/avatar.jpg](http://resim-sitesi.com/avatar.jpg) yazdınız. Sunucu gitti o resmi aldı ve profilinize koydu.Şimdi hacker şapkamızı takalım. O kutucuğa resim linki yerine
Kod:
[http://127.0.0.1:3306]
(http://127.0.0.1:3306)
ya da
Kod:
http://localhost:22
yazdığımızı düşünelim.
Sunucu bu isteği aldığında dışarıya gitmek yerine kendi içindeki 3306 portuna yani veritabanına bakmaya çalışacaktır. Güvenlik duvarı dışarıdan gelen size kapalıdır ama sunucu kendi kendine soru sorduğu için kapılar ardına kadar açılır. Sonuç olarak profil resminiz olduğu yerde veritabanının hata mesajlarını veya sunucunun iç ağına ait banner bilgilerini okumaya başlarsınız. Kendi bilgisayarınızdan asla ulaşamayacağınız bir yere, sunucuyu aracı kılarak ulaştınız.
Bulut Sistemlerinin Kabusu: Metadata Saldırısı
Günümüzde artık kimse fiziksel sunucu barındırmıyor, herkes AWS, Azure veya Google Cloud gibi bulut sistemlerini kullanıyor. Bu bulut sunucularının kendi içlerinde "Metadata" adını verdikleri, sadece yerel ağdan erişilebilen gizli bir bilgi havuzu vardır.Eğer bulutta koşan bir uygulamada SSRF zafiyeti bulursanız, kuryeye şu sihirli adresi verirsiniz:
Kod:
[http://169.254.169.254/latest/meta-data/]
(http://169.254.169.254/latest/meta-data/)
Bu IP adresi bulut sistemlerinin evrensel kara kutusudur. Sunucu bu adrese gidip o paketi açtığında, size sunucunun en gizli AWS erişim anahtarlarını, IAM tokenlarını ve tüm bulut altyapısının kontrolünü altın tepside sunar. Hiçbir exploit kodu yazmadan, sadece bir URL girerek koca bir şirketin bulut altyapısını ele geçirmiş olursunuz.
Nasıl Korunulur ve Güvenli Kodlama
Sadece "beyaz liste kullanın" deyip geçmek siber güvenlikçi mantığına uymaz, işin mutfağına inmemiz gerekiyor. Bir yazılımcı URL çekerken girilen adresi sadece metin olarak kontrol etmemelidir. Çünkü saldırgan 127.0.0.1 yerine 0.0.0.0 veya onluk tabanda 2130706433 yazarak basit filtreleri atlatabilir.En kesin çözüm, kullanıcının girdiği alan adını (domain) önce IP adresine çevirmek (DNS Resolve) ve bu IP adresinin yerel bir ağa ait olup olmadığını kontrol etmektir. Python kullanan bir uygulamanın güvenli kod yaklaşımı şu şekilde olmalıdır:
Python:
import socket
import ipaddress
import requests
def guvenli_url_getir(kullanici_url):
try:
# 1. URL'den domain kısmını ayıklıyoruz
hostname = kullanici_url.split('/')[2]
# 2. Domain'in gerçek IP adresini çözümlüyoruz
cozulen_ip = socket.gethostbyname(hostname)
ip_objesi = ipaddress.ip_address(cozulen_ip)
# 3. IP adresinin yerel ağlara (localhost vb.) ait olup olmadığını denetliyoruz
if ip_objesi.is_private or ip_objesi.is_loopback:
return "Erişim engellendi: Yerel ağlara istek atılamaz."
# 4. Sadece güvenli protokolleri kabul ediyoruz (file:// veya gopher:// engeli)
if not kullanici_url.startswith(("http://", "https://")):
return "Sadece HTTP/HTTPS protokolleri desteklenir."
# Her şey güvenliyse isteği at
cevap = requests.get(kullanici_url, timeout=5)
return cevap.text
except Exception as e:
return "Bağlantı hatası veya geçersiz URL."
Bu kod bloğu sayesinde saldırgan ne kadar kelime oyunu yaparsa yapsın, sistem önce o adresin nihai IP adresine bakar. Eğer hedef içerideki bir yerse kapıyı anında kapatır.
Ayrıca tehlikeli protokollerle konuşulmasını da baştan engellemiş oluruz.
Son Söz
Siber güvenlikte en büyük yanılgı, aşılmaz bir güvenlik duvarı kurduğumuzda içerideki her şeyin güvende olduğunu düşünmektir. SSRF zafiyeti bize gösteriyor ki sistemin kendi içindeki güven ilişkileri, dışarıdan gelecek kaba kuvvet saldırılarından çok daha tehlikeli olabilir. Bir yazılımcı veya sistem yöneticisi olarak dikkat etmeniz gereken en temel kural, girdinin kimden veya nereden geldiğine bakılmaksızın asla körü körüne güvenmemektir.Geliştirdiğiniz projelerde veya sızma testi yaptığınız sistemlerde dış kaynaklardan veri çekiliyorsa, sadece dış kapıyı değil içerideki odaların kapılarını da kilitli tutmayı bir standart haline getirmelisiniz. Yazılım mimarisini kurgularken içerideki bileşenlerin birbirine olan yetkilerini her zaman en alt seviyede tutmak zorundasınız. Unutmayın siber savaşlarda devasa kaleler genellikle dış surların yıkılmasıyla değil, içeri sızan bir kuryenin kapıları içeriden açmasıyla düşer.
Hayırlı günler dilerim, Allah'a emanet olun.






