Exploit a misconfigured CORS - Lab
Last updated
Last updated
Nạn nhận login vào app có hổng.
Nạn nhân sẽ đi tới page của kẻ tấn công.
Kẻ tấn công sẽ leak API key🎉.
Người dùng được xác thực sẽ tới trang web tấn công.
Trang web của kẻ tấn công chưa một đoạn JS độc hại cái mà sẽ yêu cầu trình duyệt gửi một cross-origin request được xác thực( qua XMLHttpRequest hoặc fetch) tới endpoint có lỗ hổng ở example.com.
Endpoint có lỗ hổng reflect nhầm request của Origin header vàoAccess-Control-Allow-Origin
response header.
Trình duyệt thấy Origin của kẻ tấn công được cho phép. Do đó, nó cho phép JS read response.
Chúng ta đã nói trước đó rằng CORS là một cách để tạo ra một exception tới same origin policy. Nó cho phép đoạn JS để READ một cross-origin resource(Thực hiện đọc tài nguyên của trang web cross)
Ở đoạn JS, bạn có thể thực hiện các request CORSS-Origin được xác thực. Có nghĩa là, một JS có thể yêu cầu trình duyệt tự động gửi cookie cùng với yêu cầu.
Để cho phép loại request được xác thực này, điểm đến endpoint phải cho phép rõ ràng request được xác thực qua HTTP header
Khi header trên được sử dụng, sau đó endpoint cũng phải chỉ định rõ ràng một origin trong giá trị của Access-Control-Allow-Origin
header, ví dụ:
Vì các nhà phát triển phải chỉ định một origin. Các nhà phát triển nhầm khi cho phép bất kỳ orign nào thông qua việc reading the origin của request đến và sau đó "reflect" nó trong response header
Điều này gây ra lỗ hổng bảo mật vì request có thể đến từ origin của kẻ tấn công và nó sẽ được reflect trong header được phép. Do đó, JS từ trang web của kẻ tấn công sẽ được phép read response và rò rỉ dữ liệu của người dùng.
Mở dev tool rồi chuyển qua tab network monitor ở trình duyệt của bạn
Login tới https://csrf.secure-cookie.io/login.
Một người dùng được xác thực có thể generate API key bằng cách nhấn vào "Generate API key
".
Khi kích hoạt nút generate sẽ trigger đoạn JS này:
Đoạn JS này sẽ yêu cầu trình duyệt tạo GET request tới https://demo-api.secure-cookie.io/getKey.
Tùy chọn credentials:'include'
, sẽ cho trình duyệt thực hiện request được xác thực (thêm cookie dọc theo bên request). Theo mặc định mà không có tùy chọn này, trình duyệt sẽ không bao gồm cookie.
Endpoint có lỗ hổng sẽ response header như này:
Ở lab này, hãy mở trang của kẻ tấn công:
Lưu ý rằng ngay khi bạn/nạn nhân mở trang, khóa API bị hack
Trang web của kẻ tấn công chứa đoạn JS mà thực hiện cùng một công việc chính xác mà chúng ta đã giải thích trong các bước (4, 5, 6) ở trên.
Endpoint có lỗ hổng sẽ reflect tới origin bị tấn công https://s3-eu-west-1.amazonaws.com trong respone header
Vì orgin của kẻ tấn công được cho phép, JS trong trang kẻ tấn công có thể đọc API Key🎉.
Cho ví dụ này, chúng ta sẽ sử dụng Python cho backend. Đoạn code chứa lỗ hổng ở endpoint /getKey
Đây là một lab đơn giản phân tích rõ hổng hổng liên quan tới CORS phần mở rộng cho SOP. Cảm ơn các bạn đã đọc bài..