Mehmet

WFN Üye
Konular
1,851
Mesajlar
1,852
Çözüm
0
Ticaret Puanı
0
Üyelik
1 Ay 6 Gün
Konum
YurtDışı
Web Sitesi
Var
Alanı
Google Adsense
1/1
Konu sahibi
Açık yönlendirme açığı, uygulamanın kullanıcıdan aldığı bir adresi yeterince doğrulamadan tarayıcıyı başka bir siteye yönlendirmesidir. Saldırgan, güvenilir alan adınız üzerinde bulunan bir bağlantıyı kullanarak ziyaretçiyi sahte giriş sayfasına, zararlı içeriğe veya kimlik avı sitesine gönderebilir. Örneğin https://example.com/giris?next=https://sahte-site.example isteği, uygulama next değerini kontrol etmeden kullanıyorsa yönlendirme açığı oluşturur.

Nasıl çalışır?​


Uygulamalarda girişten sonra kullanıcının önceki sayfaya dönmesi, kampanya bağlantılarının işlenmesi veya bir dış kaynağa geçiş gibi amaçlarla URL parametreleri kullanılabilir. Güvensiz uygulama, parametredeki adresi doğrudan HTTP yönlendirmesine dönüştürür:

Kod:
İstek hedefi: /giris?next=https://baska-alan.example

Örnek yanıt başlıkları:
HTTP/1.1 302 Found
Location: https://baska-alan.example

Saldırgan aynı parametreye kendi alan adını koyduğunda sunucunun Location yanıtı bu adrese dönüşür. Kullanıcı bağlantıyı güvenilir sitenin alan adıyla başladığı için güvenli sanabilir; ancak tarayıcı sonrasında harici adrese gider. Açık yönlendirme tek başına sunucuya kod çalıştırmaz, fakat kimlik avı, güvenlik uyarılarının aşılması ve bazı saldırı zincirlerinin desteklenmesi için kullanılabilir.

Somut örnek ve güvenli karar​


Bir giriş formu, başarılı oturum açmadan sonra next parametresindeki sayfaya dönüyor olsun. Kullanıcının kendi sitenizdeki /hesabim sayfasına dönmesine izin vermek makul bir ihtiyaçtır; ancak https://baska-alan.example gibi farklı bir alan adına yönlendirmek gerekmiyorsa reddedilmelidir.

Aşağıdaki karar yaklaşımı, yönlendirme davranışını seçerken kullanılabilir:

Gelen değerKararGerekçe
/hesabimİzin verYerel, kökten başlayan yol
hesabimİhtiyaca göre normalize et veya reddetGöreli yolun yorumlanması bağlama bağlı olabilir
https://example.com/yardimYalnız açık izin varsa izin verHarici alan adı kontrol gerektirir
//baska-alan.exampleReddetŞema belirtilmemiş olsa da harici konağa işaret edebilir

Serbest hedef URL yerine sunucuda tanımlı hedef kimlikleri kullanmak kontrolü sadeleştirir: hesap kimliği /hesabim yoluna, yardim kimliği /yardim yoluna eşlenir. Bilinmeyen kimlik sabit güvenli hedefe döner. Yerel yol kabul edilmesi gerekiyorsa yalnız ilk karakterin / olması yeterli değildir; //, ters bölü ve kodlanmış biçimlerin tarayıcı tarafından nasıl çözüldüğü de değerlendirilmelidir. Harici yönlendirme gerçekten gerekiyorsa serbest URL kabul etmek yerine izin verilen alan adlarını açık bir listeyle sınırlayın. Alan adı karşılaştırmasını yalnızca metin içinde arama yaparak gerçekleştirmeyin; example.com.saldirgan.example veya benzeri bir değer güvenilir alan adı değildir.

Açığı kontrol etme ve düzeltme​


  1. Uygulamanızda next, url, redirect, return veya benzeri parametreleri arayın. Giriş, çıkış, bağlantı izleme ve hata sayfalarındaki yönlendirme noktalarını birlikte inceleyin.
  2. Yetkili test ortamında parametreyi önce /hesabim, sonra https://example.com gibi kontrollü bir değerle deneyin. Yanıtın Location başlığını veya tarayıcının son adresini kontrol edin.
  3. Harici bir adrese geçtiğini görürseniz parametrenin doğrudan yönlendirmeye aktarıldığı noktayı bulun. Yalnız istemci tarafındaki kontrolü yeterli saymayın; karar sunucu tarafında da uygulanmalıdır.
  4. Harici yönlendirme gerekmiyorsa tercihen sabit sunucu içi hedef kimliklerini eşleyin; serbest yol kullanılıyorsa ayrıştırılmış sonucun beklenen origin içinde kaldığını ve izin verilen yolu gösterdiğini doğrulayın. Değer geçersizse yönlendirmeyi iptal edip sabit bir yerel sayfa döndürün.
  5. Harici yönlendirme gerekiyorsa şema, konak ve gerekirse bağlantı noktasını ayrıştırarak izin verilen alan adı listesiyle karşılaştırın. Sonuçta oluşturulan hedefi tekrar doğrulayın.
  6. Düzeltmeden sonra hem izin verilen yerel yolu hem de harici alan adı, şema eksik adres ve alan adı benzeri aldatıcı değerlerle yeniden test edin.

Başarılı düzeltmede yerel hedef çalışmaya devam eder; reddedilen değer ise harici siteye gitmez ve güvenli bir yerel hedefe yönlenir ya da hata yanıtı alır. Yönlendirme zincirinin başka bir uç noktaya devredilmesi, istemci tarafında kodlanmış bir adres kullanılması veya bir URL kısaltıcının devreye girmesi durumunda tek bir kontrol noktası yeterli olmayabilir.

Sık yapılan hatalar​


Yalnız alan adının içerilip içirilmediğini kontrol etmek: Bir metinde güvenilir alan adının geçmesi, hedefin güvenilir olduğu anlamına gelmez. Konak bileşeni ayrıştırılarak karşılaştırılmalıdır.

Sadece JavaScript doğrulaması yapmak: Saldırgan isteği doğrudan gönderebilir. Tarayıcıdaki form kontrolü, sunucu tarafındaki doğrulamanın yerine geçmez.

Kodlamayı göz ardı etmek: URL kodlaması, büyük-küçük harf, çift kodlama ve farklı URL biçimleri basit metin kontrollerini yanıltabilir. Uygulamanın URL ayrıştırıcısıyla normalize edilmiş değeri doğrulayın.

Her başarısız değeri kullanıcı girdisine geri yönlendirmek: Hatalı hedefte tekrar aynı parametreyi kullanmak, açığı düzeltmek yerine başka bir yönlendirme döngüsü oluşturabilir. Sabit ve yerel bir geri dönüş hedefi belirleyin.

Sık sorulan sorular​

Kendi alan adıma yönlendirmek yetki kontrolünü de çözer mi?​

Hayır. Hedefin aynı site olması kullanıcının o kaynağa erişim hakkı olduğunu kanıtlamaz. Yönlendirme doğrulaması ve hedef sayfanın oturum/yetki kontrolü ayrı gereksinimlerdir. Sabit hedef listesi bu kontrollerin yerine geçmez.

Kullanıcıya harici hedefi göstermek yeterli düzeltme midir?​

Bir ara uyarı bağlam sağlayabilir; fakat gereken hedef doğrulamasının yerine geçmez. Harici yönlendirme iş gereği varsa sınırlı hedef listesini sunucuda uygulayın ve kullanıcının nihai alan adını açıkça görmesini sağlayın. Yalnız düğme metnini değiştirmek gerçek Location hedefini sınırlamaz.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Konuyu görüntüleyenler

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Robotlar:
  • Anthropic