You are on page 1of 7

Làm sao để phòng tránh lỗ hổng "Host header injection"

I. HTTP Host header là gì?

HTTP Header là một phần bắt buộc phải có kể từ HTTP/1.1. Nó chỉ định tên miền
mà khách hàng muốn truy cập. Ví dụ, khi chúng ta sử dụng trình duyệt vào trang web:
https://portswigger.net/web-security, trình duyệt củ chứng ta sẽ gửi một yêu cầu như sau
đến web server.

GET /web-security HTTP/1.1

Host: portswigger.net

Mục đích của Host header

 HTTP Host header giúp máy chủ có thể xác định thành phần nào mà máy
khách muốn giao tiếp thông qua địa chỉ IP hay URL (kèm theo port).
 Nếu các yêu cầu không chứa Host header hoặc được gửi không đúng định
dạng có thể dẫn đến sự cố khi định tuyến các yêu cầu đến ứng dụng dự định.
 Với việc hỗ trợ Virtual hosting, bạn có thể chỉ sử dụng duy nhất 1 server, và
sử dụng thông tin ở Host header để điều hướng người dùng đến rất nhiều các
ứng dụng khác nhau.

Mô hình
II. HTTP Host header có thể bị tấn công như thế nào?

1. Tấn công Host header injection

Nếu máy chủ hoàn toàn tin tưởng vào HTTP Host header được gửi lên từ phía người
dùng và không xác thực hoặc không xử lý yêu cầu đó đúng cách, kẻ tấn công có thể sử dụng
thông tin đầu vào này để đưa vào các payloads có hại đồng thời điều khiển hành vi phía máy
chủ. Các cuộc tấn công liên quan đến việc đưa trực tiếp payloads vào HTTP Host Header
thường được gọi là "Host header injection".

2. Một số trường hợp có thể bị tấn công Host header injection

 Khi không thực hiện kiểm tra yêu cầu của người dùng, kẻ tấn công có thể tiêm
nhiễm những payloads độc hại vào HTTP Header.
 Ngay cả khi HTTP Header được xử lý an toàn hơn, tùy thuộc vào cấu hình của
máy chủ xử lý các yêu cầu gửi đến, giá trị của trường "Host" có khả năng bị
ghi đè bằng cách đưa vào các tiêu đề khác.
 Do cấu hình sai trên website do sử dụng kiến trúc của bên thứ 3.

3. Một số cách tấn công

 Thay đổi domain trong trường "Host" của HTTP Header request

GET /example HTTP/1.1

Host: hacker-domain.com

 Chèn 2 trường "Host" trong HTTP request

GET /example HTTP/1.1

Host: vulnerable-website.com

Host: hacker-domain.com

 Thêm ký tự line wrapping (\r, \n)

GET /example HTTP/1.1

Host: hacker-domain.com

Host: vulnerable-website.com
 Truyền trực tiếp URL trên GET request

GET https://vulnerable-website.com/ HTTP/1.1

Host: hacker-domain.com

 Chèn thêm trường "X-Forwarded-Host" để override host

GET /example HTTP/1.1

Host: vulnerable-website.com

X-Forwarded-Host: hacker-domain.com

III. Demo tấn công

Tấn công Host Header Injection thông qua chức năng Reset Password

Lab portswigger

https://portswigger.net/web-security/host-header/exploiting/password-reset-
poisoning/lab-host-header-basic-password-reset-poisoning

Mô hình tấn công

Cách thức tấn công


Username nạn nhân: carlos (carlos@carlos-montoya.net)

Bước 1: Chức năng reset password sử dụng giá trị trường Host trong request của
người dùng để tạo ra link reset password. Cấu trúc đường link sẽ là:

https://$HOST/password/reset?token={token}

Bước 2: Kẻ tấn công sẽ tìm cách thay đổi giá trị trường Host thành domain của
attacker đang nẵm giữ, email sẽ là email của nạn nhân. Request gửi lên sẽ là request như
sau:
Bước 3: Khi nạn nhận nhận được một đường link reset password trong email, nạn
nhân click vào đường link. Vì đường link chứa domain của kẻ tấn công nên khi đó trên
server của kẻ tấn công sẽ thu thập được đường link chứa token của nạn nhân. Vì dĩ nhiên,
đường link mà nạn nhân nhận được sẽ không hoạt động.

Bước 4: Vì ở bước trước, nạn nhân click vào link (có token hợp lệ nhưng sai
domain) nên token vẫn là hợp lệ. Lúc này, kẻ tấn công chỉ cần lấy token và thay domain của
trang web và từ đó kẻ tấn công có thể đổi mật khẩu tài khoản của nạn nhân:
Bước 5: Kết quả là: Tài khoản của nạn nhân đã bị đánh cắp

IV. Cách phòng tránh

 Config để website lấy tên miền hiện tại được thiết lập sẵn trong cấu hình của
server thay vì nhận từ request của người dùng.
 Kiểm tra request được gửi lên, Host header cần được kiểm tra bằng cách sử
dụng một white list các host đã được thiết lập trước trên server để nhằm loại
bỏ các host độc hại.
 Tắt chức năng cho phép override headers để tránh các cuộc tấn công ghi đề
host header.
 Khi sử dụng Virtual hosting, nên tránh đặt các trang nội bộ cùng với các ứng
dụng public để ngăn chặn các lỗ hổng xảy ra do config không an toàn.

You might also like