Tl;dr
Về cơ bản thì XS-Search là 1 dạng tấn công client-site, tiền đề khai thác là 1 hoặc nhiều bug CSRF. Impact thường là leak các thông tin nhạy cảm của người dùng và gửi đến hacker.
Thông tin đầy đủ vui lòng tham khảo tại: https://xsleaks.dev/
Như vậy các điều kiện để khai thác thành công sẽ là:
- Nạn nhân phải ghé thăm 1 website do hacker kiểm soát.
- Hacker biên soạn và chèn vào các đoạn mã javascript để điều khiển trình duyệt nạn nhân thực hiện khai thác các bug CSRF để leak thông tin và gửi về cho hacker.
XS-Search Time based attack
XS-Search Time based attack là dạng tấn công dựa vào yếu tố thời gian xử lý của server để leak thông tin. Ở đây mình sẽ trình bày 2 ví dụ để chúng ta cùng hiểu rõ hơn.
Ví dụ 1: website X có 1 endpoint như sau:
https://example.com/search?creditcard=
Với tham số creditcard là số thẻ creditcard của người dùng. Nếu nội dung có 1 phần là đúng thì sẽ có delay cao hơn, nếu sai thì sẽ có delay rất thấp. Vì vậy ở đây mình sẽ viết 1 đoạn javascript tự động gửi request để leak creditcard khi nạn nhân ghé thăm website của hacker. Dò từ 0-9, dò từng ký tự.
Ví dụ 2: website X có 1 endpoint như sau:
POST /backup
pincode=123456
Chức năng này sẽ tạo 01 url download bản sao lưu data của khách hàng. Để tạo link thì server cần khoảng 20s để xử lý. Mã pincode dạng 6 số có thể bruteforce được. URL download file backup tồn tại khoảng 3 phút và có dạng:
https://example.com/backup/[userID]/md5(hhmmss_pincode).zip
Như vậy để khai thác thì hacker cần soạn javascript để nạn nhân gửi hàng loạt request bruteforce pincode tạo file backup. Từ đó hacker sẽ có được pincode của nạn nhân.
Ghi chú:
- Một cách huyền bí nào đó Chrome không đính kèm cookie khi gửi request fetch lên server qua method POST.
- Trong vòng 2 phút, nếu request đầu được server trả về set-cookie thì khi gửi POST sẽ đính kèm cookie
- Request 01 truy cập 1 ảnh để nhận set-cookie sau đó request 2 mới dùng được.
XS-Search Error based attack
Đây là dạng tấn công dựa vào HTTP response code. Nếu 1 request giá trị A thì server kiểm tra nếu giá trị đúng sẽ trả về HTTP code 200, sai sẽ là code 500. Từ đây có thể tấn công XS Search.
Trở lại ví dụ 2 để có được link download backup file cần có giá trị userID tương ứng. Trùng hợp là website X cũng có 1 chức năng liệt kê thông tin user nếu mã userID gửi lên là hợp lệ. Ko hợp lệ sẽ trả về HTTP code 500. Tại đây dùng kỹ thuật XS-Search để lấy được mã userID bằng cách bruteforce do mã userID là số nguyên tăng dần.
Kết luận
Từ các ví dụ ở trên chúng ta nhận thấy đều là các dạng tấn công trên các website sử dụng cookie làm cách xác thực. Như vậy có phải đồng nghĩa với việc bó tay với các dạng website xác thực dựa trên Bearer token, Same-origin policy, same site cookie, x-frame header,….???
Câu trả lời là Không. Qua tìm hiểu thì mình thấy vẫn có cách khai thác bug XS-Search bằng cách điều khiển trình duyệt nạn nhân để tấn công, mọi người có thể tham khảo tại report: https://hackerone.com/reports/491473 của bạn terjanq bằng cách sử dụng window.opener.
Ref:
https://book.hacktricks.xyz/pentesting-web/xs-search
https://xsleaks.dev/
https://hackerone.com/reports/491473