SSRF, bir sunucunun saldırgan tarafından kontrol edilen istekleri gerçekleştirmesini sağlayan bir güvenlik açığıdır. Bu açık, uygulamanın harici kaynaklara erişim yeteneğini kötüye kullanarak iç ağlara, yerel dosyalara veya hassas hizmetlere yetkisiz erişim sağlar.
-
Temel Senaryo:
- Kullanıcıdan bir URL alan bir web uygulaması (örn., resim indirme, veri çekme).
- Saldırgan,
http://localhost/admin
veyahttp://169.254.169.254/latest/meta-data/
gibi bir URL gönderir. - Sunucu bu URL'yi işler ve saldırgana yasaklı kaynakları sızdırır.
Örnek Kod (Zafiyetli):
// Kullanıcıdan alınan URL'yi doğrulamadan işler $url = $_GET['url']; $data = file_get_contents($url); echo $data;
-
Adım Adım Saldırı:
- Adım 1: Saldırgan,
url=http://internal-api:8080
parametresini kullanarak bir HTTP isteği gönderir. - Adım 2: Sunucu, iç ağdaki
internal-api:8080
hizmetine bağlanır ve yanıtı saldırgana döndürür. - Adım 3: Saldırgan, iç API'den alınan hassas verileri (örn., veritabanı şifreleri) elde eder.
- Adım 1: Saldırgan,
-
Temel SSRF:
- Sunucunun yanıtı saldırgana görünür (örn., dosya içeriği veya API yanıtı).
-
Blind SSRF:
- Yanıt görünmez, ancak sunucu arka planda isteği gerçekleştirir (örn., iç ağda port tarama).
-
DNS Rebinding ile SSRF:
- Saldırgan, DNS kaydını hızlıca değiştirerek sunucunun farklı bir IP'ye istek göndermesini sağlar.
- Örnek: İlk DNS sorgusu
evil.com → 1.2.3.4
, ardındanevil.com → 169.254.169.254
olarak değişir.
- İç Ağa Erişim:
- Dahili API'ler, veritabanları veya yönetim panelleri ele geçirilebilir.
- Bulut Metadata Sızıntısı:
- AWS/Azure/GCP metadata API'leri (
169.254.169.254
) üzerinden IAM kimlik bilgileri çalınabilir.
- AWS/Azure/GCP metadata API'leri (
- Dosya Okuma:
file:///etc/passwd
gibi URL'lerle sunucudaki dosyalar okunabilir.
- Servis Sahtekarlığı:
- Sunucu, saldırganın kontrol ettiği bir hizmete istek göndererek kimlik doğrulama token'larını sızdırabilir.
- Manuel Test:
- URL parametrelerine
localhost
,127.0.0.1
veya metadata IP'leri girip yanıtı gözlemleme.
- URL parametrelerine
- Araç Kullanımı:
- Burp Suite:
Collaborator
modülüyle blind SSRF tespiti. - SSRFmap: Otomatik tarama ve exploit (örnek komut:
python3 ssrfmap.py -u http://target.com?url=SSRFHERE
).
- Burp Suite:
- Protokol Denemeleri:
dict://
,gopher://
,ftp://
gibi alternatif protokolleri test etme.
- Girdi Doğrulama:
- Whitelist: Yalnızca izin verilen domain/IP'leri kabul et (örn.,
^https://(www\.)?example\.com/.*
). - URL Scheme Kısıtlaması:
http://
vehttps://
dışındaki protokolleri engelle.
- Whitelist: Yalnızca izin verilen domain/IP'leri kabul et (örn.,
- Ağ Katmanı Önlemleri:
- Sunucuyu iç ağ kaynaklarına erişimden kısıtla (firewall kuralları).
- Metadata API'lerine erişimi engelle (AWS'de
IMDSv2
kullanımı zorunlu hale getirme).
- Güvenli Kodlama:
// Whitelist örneği $allowed_domains = ['example.com', 'trusted.org']; $url = parse_url($_GET['url']); if (!in_array($url['host'], $allowed_domains)) { die("Geçersiz URL!"); }
- DNS Rebinding Koruması:
- DNS çözümlemesi yapıldıktan sonra IP'nin whitelist'te olduğunu tekrar kontrol et.
- Zorluk 1: Karmaşık uygulamalarda whitelist yönetimi zordur.
- Çözüm: Reverse proxy kullanarak yalnızca belirli endpoint'lere izin ver.
- Zorluk 2: Legacy sistemlerde ağ kısıtlamaları uygulanamayabilir.
- Çözüm: Mikro-segmentasyon ile kritik kaynakları izole et.
- Capital One Veri İhlali (2019):
- SSRF kullanılarak AWS metadata API'sinden IAM rolü çalındı ve 100M+ müşteri verisi sızdırıldı.
- GitLab SSRF Zafiyeti (CVE-2021-22214):
- Webhook entegrasyonunda SSRF ile iç ağ taraması yapılabiliyordu.
SSRF, sunucuların güvenilmeyen kaynaklara erişimini kısıtlamayan uygulamalarda ortaya çıkar. Whitelist tabanlı doğrulama, ağ izolasyonu ve metadata korumasıyla riskler büyük ölçüde azaltılabilir. Test araçları ve güvenli kodlama en iyi uygulamaları benimsenmelidir.