Apa itu Host Header Injection?

Host Header Injection adalah serangan ketika attacker memanipulasi nilai Host header pada sebuah request HTTP untuk membuat server berperilaku tidak sesuai atau salah arah.

Dalam HTTP request, host biasanya terlihat seperti ini:

GET /reset-password HTTP/1.1
Host: example.com

Tapi attacker bisa mengubahnya menjadi:

Host: attacker.com

Jika server tidak memvalidasi nilai header Host, maka ia bisa tertipu dan menganggap attacker.com sebagai domain asli.

 Jika server tidak melakukan pengecekan apakah Host adalah domain yang benar, attacker bisa mengganti Host menjadi nilai berbahaya.
Server kemudian akan memakai nilai palsu itu dalam proses internal.

 

Risiko yang bisa terjadi

Ketika Host header bisa dimanipulasi, serangan berikut menjadi mungkin:

1. Web Cache Poisoning

Server/Proxy cache menyimpan halaman berdasarkan nilai Host.
Jika attacker mengirim request dengan Host palsu, server bisa:

  • menyimpan versi salah

  • menampilkan konten berbahaya ke user lain

Contoh:
Attacker mengirim Host: attacker.com → server menyimpan halaman itu dalam cache.
User lain melihat halaman yang sudah "teracuni".

 

2. Password Reset Poisoning

Ini paling berbahaya dan sering terjadi.

Jika aplikasi membangun URL reset password menggunakan Host header:

https://<HOST>/reset?token=abc123

Dan attacker mengirim request:

Host: evil.com

Maka email reset password bisa berisi link:

https://evil.com/reset?token=abc123

User mengkliknya → attacker mendapatkan token dan bisa mengambil alih akun.

 

3. Open Redirect / Redirect ke Situs Berbahaya

Jika aplikasi membuat URL redirect atau link otomatis menggunakan Host header, attacker bisa:

  • mengganti Host menjadi domain palsu

  • server membuat redirect ke domain attacker

Dampak:

  • phishing

  • pencurian cookie

  • social engineering

     

Kenapa Host Header Injection terjadi?

Karena banyak aplikasi web modern:

  • menggunakan Host header untuk membuat URL dinamis

  • membiarkan framework otomatis membaca Host tanpa validasi

  • mengabaikan daftar domain whitelist

Contoh kesalahan umum (misconfigured):

reset_url = f"https://{request.headers['Host']}/reset?token={token}"

Framework percaya pada Host header, padahal attacker bisa mengubahnya.

 

Cara mencegah Host Header Injection

Whitelist domain yang valid
Server harus hanya menerima Host tertentu (misal: example.com, api.example.com).

Jangan pernah membangun URL dari header Host mentah

Gunakan parameter konfigurasi, bukan header
Misal SERVER_NAME, APP_URL, BASE_URL.

Validasi header Host pada reverse proxy (nginx, traefik, haproxy)

Gunakan HTTPS + HSTS untuk mencegah manipulasi tertentu

 

Kesimpulan

Jika server tidak memvalidasi Host header, attacker bisa menyisipkan nilai Host palsu.
Akibatnya bisa fatal, seperti:

  • web cache poisoning

  • manipulasi email reset password

  • mengarahkan user ke situs berbahaya

Host Header Injection adalah salah satu kelemahan web yang sering terjadi karena server dan framework terlalu percaya pada input dari client.


0 Comments:

Posting Komentar