SSL Sertifika Analizi Açık Port Tespiti Web Uygulama Tarama DNS Güvenlik Denetimi HTTP Başlık Analizi Yanlış Yapılandırma Tespiti Yazılım Parmak İzi Alt Alan Adı Tarama
SSL Sertifika Analizi Açık Port Tespiti Web Uygulama Tarama DNS Güvenlik Denetimi HTTP Başlık Analizi Yanlış Yapılandırma Tespiti Yazılım Parmak İzi Alt Alan Adı Tarama

Tüm Kayıtlar

Kategori Doğrulanmamış Yönlendirme ve İletme
Tipik Önem Derecesi Orta
OWASP A01:2021 – Bozuk Erişim Kontrolü (eski adıyla A10:2013 – Doğrulanmamış Yönlendirmeler ve İletmeler)
CWE CWE-601: Güvenilmeyen Siteye URL Yönlendirmesi ('Açık Yönlendirme')
Diğer adları Doğrulanmamış Yönlendirme, Açık Yönlendirme, Keyfi Yönlendirme
Etkilenen sistemler Oturum açma akışları, OAuth uç noktaları, URL kısaltıcılar ve yönlendirme ya da dönüş URL parametresi kullanan tüm web uygulamaları
Yaygın parametreler redirect, redirect_uri, return, returnTo, next, url, target, dest, goto, continue

Genel Bakış

Açık yönlendirme, bir web uygulamasının hedef URL'yi oluşturmak için saldırgan tarafından sağlanan girdiyi, hedefin güvenilir konumlar kümesinde olup olmadığını doğrulamadan HTTP yönlendirme yanıtında (301, 302, 303, 307 veya 308 durum kodları) kullandığı bir güvenlik açığıdır. Yönlendirme meşru ve güvenilir bir etki alanından kaynaklandığı için kurbanlar ve güvenlik kontrolleri (e-posta filtreleri, tarayıcı uyarıları) başlangıçtaki bağlantıyı kötü amaçlı olarak işaretlemekte daha az başarılı olur.

Sensagraph, yönlendirme parametrelerini harici hedef kabulü açısından test ederek açık yönlendirme güvenlik açıklarını otomatik olarak tespit eder.

Nasıl çalışır?

Açık yönlendirmeler, kullanıcı tarafından kontrol edilen veriler doğrudan bir yönlendirme mekanizmasına iletildiğinde ortaya çıkar. Tipik saldırı zinciri şu şekildedir:

  1. URL'nin hazırlanması: Saldırgan, güvenilir bir sitedeki yönlendirme parametresini belirler; örneğin https://example.com/login?next=https://evil.com/phish.
  2. Bağlantının dağıtılması: Saldırgan, hazırlanmış URL'yi e-posta, sosyal medya veya anlık mesajlaşma aracılığıyla gönderir. Görünen etki alanı example.com olduğundan bağlantı meşru görünür.
  3. Kurban tıklar ve yönlendirilir: Sunucu, next parametresini doğrulama yapmadan okur ve https://evil.com/phish adresine HTTP 302 yanıtı verir.
  4. Saldırgan amacına ulaşır: Kurban, güvenilir bir site tarafından yönlendirildiğine inanarak bir kimlik avı sayfasına, kimlik bilgisi toplama aracına veya kötü amaçlı yazılım indirme sayfasına ulaşır.

Kimlik avının ötesinde, açık yönlendirmeler sıklıkla diğer güvenlik açıklarıyla zincir oluşturur:

  • OAuth token çalma: Bir OAuth 2.0 yetkilendirme sunucusu redirect_uri'yi katı biçimde doğrulamadığında, istemci uygulamasındaki açık yönlendirme; Referer başlığı veya URL parçası sızması yoluyla yetkilendirme kodlarını ya da erişim tokenlarını dışarı sızdırmak için kullanılabilir.
  • SSRF kolaylaştırma: Bazı mimarilerde sunucu taraflı yönlendirme, sunucunun saldırganın URL'sini çekmesine neden olarak Sunucu Taraflı İstek Sahteciliği'ni (SSRF) mümkün kılabilir.
  • Güvenlik kontrollerini atlama: Yalnızca başlangıç URL'yi (yönlendirmeler takip edilmeden önce) kontrol eden izin listesi tabanlı URL filtreleri, güvenilir bir etki alanındaki açık yönlendirme kullanılarak atlatılabilir.
  • javascript: URI'leri aracılığıyla XSS: Yönlendirme hedefi temizlenmezse, bazı uygulamalar javascript: şeması URL'lerini kabul eder ve tarayıcı yönlendirme hedefini işlediğinde XSS'e yol açar.

Yaygın güvenlik açığı içeren kod kalıpları:

  • PHP: header("Location: " . $_GET['url']);
  • Java/Spring: return "redirect:" + request.getParameter("next");
  • Node.js/Express: res.redirect(req.query.returnTo);
  • Python/Django: Doğrulama yapılmadan return HttpResponseRedirect(request.GET.get('next'))

İş etkisi

Açık yönlendirmeler tek başlarına genellikle orta önem derecesinde değerlendirilse de pratik iş etkisi önemli olabilir:

  • Kimlik avı ve kimlik bilgisi çalma: Güvenilir bir etki alanından gelen yönlendirmeyle aldatılan kullanıcılar, kimlik bilgilerini saldırgan tarafından kontrol edilen bir siteye göndererek hesap ele geçirilmesine yol açabilir.
  • Marka ve itibar hasarı: Müşteriler kimlik avı saldırısını meşru markayla ilişkilendirir; bu durum, kuruluş saldırının faillinden değil mağdurundan olsa bile güveni aşındırır.
  • Düzenleyici ve uyumluluk riski: Kuruluşun kendi altyapısı aracılığıyla kolaylaştırılan kimlik bilgisi çalma, GDPR, HIPAA, PCI-DSS veya benzeri çerçeveler kapsamında ihlal bildirimi yükümlülüklerini tetikleyebilir.
  • OAuth akışlarında token sızdırma: Başarılı bir OAuth yönlendirme saldırısı, kullanıcının parolasına gerek kalmadan tam hesap ele geçirmeye yol açabilir.
  • Kötü amaçlı yazılım dağıtımı: Saldırganlar kullanıcıları drive-by indirme sayfalarına yönlendirebilir; bu durum kuruluşun etki alanını farkında olmadan kötü amaçlı yazılım dağıtım vektörüne dönüştürür.

Nasıl düzeltilir?

  1. Kullanıcı kontrollü yönlendirme hedeflerinden tamamen kaçının: En güçlü savunma, yönlendirme hedefinin hiçbir zaman kullanıcı girdisinden türetilmeyeceği şekilde akışları yeniden tasarlamaktır. Bunun yerine sabit kodlanmış bir URL'ye eşlenen sayısal bir eylem kimliği gibi sunucu taraflı eşlemeler kullanın.
  2. Katı bir izin listesi uygulayın: Dinamik yönlendirme zorunluysa, hedefi izin verilen etki alanları veya yolların sabit kodlanmış izin listesine göre doğrulayın. Listede bulunmayan her hedefi reddedin.
    • Örnek (Python): ALLOWED = {'https://example.com/dashboard', 'https://example.com/profile'}; if url not in ALLOWED: url = '/default'
  3. Yalnızca göreli yolları kabul edin: Kabul edilen yönlendirme değerlerini aynı kaynak içindeki göreli yollarla (/ ile başlayan ancak // ile başlamayan) sınırlandırın. Şema ve ana bilgisayar bileşeni içeren mutlak URL'leri tamamen reddedin.
  4. OAuth'ta katı redirect_uri eşleşmesi uygulayın: RFC 6749 §3.1.2.2 uyarınca, yetkilendirme sunucuları redirect_uri'nin tam eşleşmesini (veya kayıtlı önek eşleşmesini) ZORUNLU kılmalıdır. Açık eşleştirme veya kısmi URL karşılaştırması yapmayın.
  5. javascript: URI engel listesi uygulayın: Şeması http veya https olmayan tüm yönlendirme hedeflerini açıkça reddedin.
  6. Harici yönlendirmelerde kullanıcıyı uyarın: Uygulamanın kendi etki alanı dışına yönlendirme zorunlu bir iş özelliğiyse, kullanıcıyı sessizce iletmek yerine siteyi terk ettiğini bildiren bir ara uyarı sayfası gösterin.
  7. Otomatik test kapsamı ekleyin: Yönlendirme mantığı değiştiğinde regresyonları önlemek için CI/CD süreçlerine açık yönlendirme test senaryoları ekleyin.

Referanslar

Sıkça sorulan sorular

Açık yönlendirmeler tek başlarına genellikle orta önem derecesinde değerlendirilir; çünkü istismar için sosyal mühendislik gerekir — kurbanın hazırlanmış bağlantıya tıklaması şarttır. Ancak OAuth akışlarıyla birleştirildiğinde (token çalmayı mümkün kılarak), uygulama bir banka veya kimlik sağlayıcısı gibi yüksek değerli bir hedef olduğunda ya da yönlendirme parametresi XSS'i tetikleyen javascript: URI'lerini kabul ettiğinde önem derecesi yüksek veya kritik seviyeye çıkar.

Evet. Çoğu açık yönlendirme, bağlantıların kolayca paylaşılabilmesi nedeniyle GET parametrelerinde ortaya çıksa da yönlendirme hedefleri POST gövde parametrelerinde, HTTP başlıklarında (Referer veya özel başlık gibi) ya da çerezlerde de bulunabilir. Mekanizma ve etki, HTTP yönteminden bağımsız olarak aynıdır.

Hayır. Host başlığı doğrulaması ayrı bir kontroldür (öncelikle Host başlığı enjeksiyonuyla ilgilidir). Açık yönlendirme doğrulaması, gelen isteğin Host başlığına değil; istek parametresinden, çerezden veya gövdeden çıkarılan yönlendirme hedefi URL'sine özgü olarak uygulanmalıdır.

Açık yönlendirme, istemcinin tarayıcısının saldırgan tarafından kontrol edilen bir URL'ye yönlendirilmesine neden olur. SSRF ise sunucunun kendisinin saldırgan tarafından kontrol edilen bir URL'ye HTTP isteği yapmasına yol açar. Açık yönlendirmeler; sunucu, giden istekler yaparken yönlendirmeleri takip ederse (örneğin 302 yanıtlarını izleyen sunucu taraflı bir URL çekici) bazen SSRF'ye ulaşmak için bir köprü olarak kullanılabilir.

RFC 6749 uyarınca yetkilendirme sunucusu, redirect_uri değerlerinin tam olarak kayıt edilmesini zorunlu kılmalıdır. Yetkilendirme isteği sırasında sunucu, sağlanan redirect_uri'yi önceden kayıtlı değerle tam dize eşleşmesi veya kesinlikle tanımlanmış bir önek eşleşmesi kullanarak karşılaştırmalıdır. OAuth uygulamalarında redirect_uri doğrulamasında joker karakter eşleşmesi veya alt dize eşleşmesi kullanmak, açık yönlendirme güvenlik açıklarının yaygın bir kaynağıdır.