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:
- 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. - 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.comolduğundan bağlantı meşru görünür. - Kurban tıklar ve yönlendirilir: Sunucu,
nextparametresini doğrulama yapmadan okur vehttps://evil.com/phishadresine HTTP 302 yanıtı verir. - 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;Refererbaş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ı uygulamalarjavascript:ş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?
- 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.
- 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'
- Örnek (Python):
- 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. - OAuth'ta katı
redirect_urieş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. javascript:URI engel listesi uygulayın: Şemasıhttpveyahttpsolmayan tüm yönlendirme hedeflerini açıkça reddedin.- 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.
- 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
- OWASP – Doğrulanmamış Yönlendirmeler ve İletmeler Hızlı Başvuru Kılavuzu
- OWASP Top 10 2021
- MITRE CWE-601: Güvenilmeyen Siteye URL Yönlendirmesi ('Açık Yönlendirme')
- RFC 6749 §3.1.2.2 – OAuth 2.0 Yönlendirme Uç Noktası Kaydı
- PortSwigger Web Security – Açık Yönlendirme (Yansıtılmış)
- MDN Web Docs – HTTP Yönlendirmeleri