Host Header Injection Saldırısı

Host Header Injection Zafiyeti

Günümüz web dünyasında, bir sunucu üzerinde birden çok uygulamanın
hizmet verdiği durumlarla sık sık karşılaşmaktayız. Aynı sunucu üzerinde
birden fazla uygulama "virtual host" tanımlamaları ile servis verebilir.
Bu durumda, tüm bu uygulamaların IP adresi aynı olacağı için
sunucuya gelen isteğin hangi uygulamaya yönlendirileceği bilgisi,
HTTP isteğinde yer alan "Host" başlık bilgisi üzerinden belirtilmektedir.

Host Header Injection zafiyetinin ortaya çıkmasındaki en büyük sebep,
Host başlık bilgisinin manipüle edilemeyeceği düşüncesidir.
Host başlık bilgisi, gün sonunda HTTP isteğinde yer alan bir kullanıcı
girdisi olduğu için buradan gelen veriye güvenilmesi ve kontrol edilmeden
işletilmesi durumunda bu zafiyetin varlığından söz ediyor olacağız.
Uygulamamız üzerinde, bazı işlemler gerçekleştirirken host bilgisine
ihtiyaç duyabiliriz. Örneğin, parola sıfırlama fonksiyonunda kullanıcı için
bir parola sıfırlama bağlantısı oluşturduğumuzu düşünelim.
İlgili kullanıcıya ait bir token oluşturuyoruz ve bu token'ı bağlantımıza
ekleyerek, kullanıcıya mail gönderiyoruz.

 

Yapılan istek:

POST /password-reset HTTP/1.1

Host: example.com

email=test@example.com


Mail'de gelen bağlantı:
https://example.com/password-reset?token=TOKEN_DEGERI Kullanıcı,
mailden gelen bağlantıyı ziyaret ederek parolasını değiştiriyor. Eğer bu akışta,
kullanıcıdan gelen "Host" başlık bilgisine güveniliyorsa, saldırgan hedeflediği
kişi için parola sıfırlama işlemi yaparken kendi kontrolünde olan sunucuyu
"Host" başlığı üzerinden gönderdiğinde parola sıfırlama bağlantısının,
kendi gönderdiği adres ile oluşmasını sağlayabilir.

Yapılan istek:

POST /password-reset HTTP/1.1

Host: hacker.com

email=test@example.com

Mail'de gelen bağlantı:
 https://hacker.com/password-reset?token=TOKEN_DEGERI Maili alan kullanıcının,
gelen bağlantıyı ziyaret etmesi durumunda parola sıfırlaması için kullanacağı token bilgisi,
saldırganın eline geçecektir.

 

Host Header Injection zafiyeti üzerinden:

  • Önbellek zehirlenmesi
  • Parola sıfırlama bağlantılarının zehirlenmesi
  • Yönlendirmelerden kaynaklı olarak SSRF saldırıları gerçekleştirilebilir.


Zafiyetin giderilmesi için:

  • Absolute URL'ler yerine Relative URL'ler kullanılmalıdır. 
     

Örneğin:

Absolute URL:      <a href = "https://www.example.com/src/sample.html">

Relative URL:       <a href = "/src/sample.html">
 

  • Kullanıcıdan gelen host başlık bilgisine güvenilmemelidir. Örneğin, host bilgisi
    sunucu tarafında bir konfigürasyon dosyasına yazılabilir ve ihtiyaç duyulması
    durumunda buradan okunabilir.


  • Host başlık bilgisi beyaz liste yaklaşımı ile kontrol edilmelidir. Gelen host bilgisi,
    sadece izin verdiğiniz host'lar içerisinde yer alıyorsa kabul edilmelidir.

     
  • Host başlık bilgisinin kontrol edildiği durumlarda saldırganlar, load blancer veya
    reverse proxy altyapılarında kullanılan "X-Forwarded-Host" gibi başlık bilgilerini
    isteğe dahil ederek bu durumu atlatmaya çalışabilir. Bu başlık bilgileri, siz özel olarak
    belirtmeseniz bile varsayılan olarak desteklenebilir. Bu sebeple, host başlık bilgisinin
    ezilmesine olanak tanıyan bu başlık bilgilerinin desteklenmediği kontrol edilmelidir.

Kaynaklar:

  • https://portswigger.net/web-security/host-header

Yorum Gönder

0Yorumlar
Yorum Gönder (0)