Password Reset Link
Đây là cơ chế tiêu biểu nhất cho việc thực hiện tái tạo lại mật khẩu của người dùng. Cụ thể, với một ứng dụng web có dùng cơ sở dữ liệu người dùng, đôi khi sẽ có tình trạng người dùng quên mật khẩu.
Họ sẽ gửi yêu cầu tạo lại mật khẩu. Nếu khớp email, người dùng sẽ được gửi mail kèm địa chỉ reset mật khẩu có kèm token tương ứng.
Lợi dụng cơ chế này, kẻ xấu có thể ăn cắp token để thực hiện nhiều hành vi xấu bằng cách lợi dụng cơ chế referer header để trỏ tới một domain khác bên ngoài domain gốc.
Leakage via Referer Header
Đặt tình huống, ta truy cập được vào trang đặt lại mật khẩu.
Ta thấy địa chỉ liên kết có kèm cả token người dùng. Và thú vị hơn, trong trang reset.php này có kèm một bức hình avatar của người dùng, nhưng nó lại được host ở một domain khác với domain hiện tại.
Để tải được tấm hình đó hiển thị lên trình duyệt, trình duyệt sẽ tự động gửi đi request tới trang chứa hình ảnh đó, và ngẫu nhiên, kèm cả liên kết có token người dùng trong đó.
Và như vậy, người quản trị của domain chứa bức hình đó có thể dùng phiên của người dùng để log vào và thay đổi mật khẩu dễ dàng, vì trong tay anh tay có token gốc hợp lệ.
Demo
Ta giả sử quên mật khẩu tài khoản của trang example.com, và phải yêu cầu tạo lại mật khẩu mới.
Sau khi yêu cầu, ta kiểm tra hộp thư email và truy cập liên kết tạo lại mật khẩu kèm token.
Nhưng trong trang tạo mật khẩu, có kèm cả hình ảnh từ một domain khác. Để kiểm chứng nó từ domain khác, ta Inspect Elements của nó.
Như vậy, ta biết chắc chắn nó từ domain khác.
Để xem thử referer link đã gửi đi những gì, ta xem thử header của nó.
Như vậy người quản trị của domain này có thể dùng liên kết này để chiếm đoạt tài khoản của ta dễ dàng.
Fixing the Problem
Cách khắc phục nhanh và hiệu quả nhất, đó là bạn không nên dùng bất kì liên kết nào có domain khác với domain gốc.
Summary
Việc sử dụng thêm domain nằm ngoài domain gốc có thể dẫn tới nhiều hậu quả ta không lường tới được. Đặc biệt, các referer link luôn tiềm ẩn cơ hội cho kẻ tấn công, bởi chúng hoạt động âm thầm và gửi đi có thể cả những dữ liệu nhạy cảm về tài khoản của ta.
Có thể bạn quan tâm:
Bài 1: Web App Hacking: Sensitive Data Exposure (Guideline)
Bài 2: Web App Hacking: Sensitive Data Exposure – Insecure Error Handling
Bài 3: Web App Hacking: Sensitive Data Exposure – Disclosure of Sensitive Files
Bài 4: Web App Hacking: Sensitive Data Exposure – Information Disclosure via Metadata
Bài 5: Web App Hacking: Sensitive Data Exposure – Underestimated Risk: Disclosure of Software Version
Bài 6: Web App Hacking: Sensitive Data Exposure – Insecure Communication Channel
Bài 7: Web App Hacking: Sensitive Data Exposure – Leakage of Cookie with Sensitive Data
Bài 8: Web App Hacking: Sensitive Data Exposure – Leakage of Sensitive Data via Referer Header