DOM-based open redirection

Khái niệm

Lỗ hổng DOM-based open-redirection xuất hiện khi một script viết dữ liệu kẻ tấn công có thể kiểm soát vào một sinh mà có thể trigger điều hướng cross-domain. Ví dụ:

let url = /https?:\/\/.+/.exec(location.hash);
if (url) {
  location = url[0];
}

Kẻ tấn công có thể sử dụng lỗ hổng này để xây dựng một URL, nếu người dùng khác truy cập, sẽ gây ra chuyển hướng đến một tên miền bên ngoài tùy ý.

Tác động

  • Tạo điều kiện cho các cuộc tấn công lừa đảo nhắm vào người dùng web. Ví dụ: Giả mạo URL ứng dụng xác thực nhắm vào đúng tên miền và chứng chỉ TLS hợp lệ

  • Nếu kẻ tấn công có thể kiểm soát phần đầu của chuỗi được truyền đến API chuyển hướng, thì có thể nân cấp lỗ hổng này thành một cuộc tấn công tiêm JS. Kẻ tấn công có thể xây dựng một URL với pseudo-protocol javascript: để thực thi mã tùy ý khi URL được trình duyệt xử lý

Giải pháp:

Phát hiện lỗ hổng open direction ở chức năng Back to blog cuối trang khi vào một bài post bất kỳ

Tham số url chưa lỗ hổng open direction cho phép thay đổi liên kết "Back to Blog". Đây là URL để khai thác lỗ hổng

https://0a4100c404f5bf6b81e42a6500850047.web-security-academy.net/post?postId=1&url=https://exploit-0afc0031044abf02810029a40166001b.exploit-server.net/

Các sink có thể dẫn đến lỗ hổng

location
location.host
location.hostname
location.href
location.pathname
location.search
location.protocol
location.assign()
location.replace()
open()
element.srcdoc
XMLHttpRequest.open()
XMLHttpRequest.send()
jQuery.ajax()
$.ajax()

Ngăn chặn

Ngoài các biện pháp chung để ngăn chặn lỗ hổng DOM, nên tránh thiết laapj mục tiêu chuyển hướng động bằng cách sử dụng dữ liệu có nguồn gốc từ bất kỳ nguồn nào không đáng tin cậy

Last updated