Tác động
Kẻ tấn công có thể đánh cắp dữ liệu nhạy cảm, được xác thực từ người dùng ứng dụng dễ bị tấn công [S2]. Nếu người dùng truy cập một trang web độc hại trong khi đăng nhập vào ứng dụng dễ bị tấn công, trang web độc hại có thể thực hiện các yêu cầu có nguồn gốc chéo tới API của ứng dụng và đọc phản hồi [S1][S2]. Điều này có thể dẫn đến việc đánh cắp thông tin cá nhân, bao gồm hồ sơ người dùng, mã thông báo CSRF hoặc tin nhắn riêng tư [S2].
Nguyên nhân gốc rễ
CORS là cơ chế dựa trên tiêu đề HTTP cho phép máy chủ chỉ định nguồn gốc nào (miền, lược đồ hoặc cổng) được phép tải tài nguyên [S1]. Các lỗ hổng thường phát sinh khi chính sách CORS của máy chủ quá linh hoạt hoặc được triển khai kém [S2]:
- Tiêu đề gốc được phản ánh: Một số máy chủ đọc tiêu đề
Origintừ yêu cầu của khách hàng và lặp lại tiêu đề đó trong tiêu đề phản hồiAccess-Control-Allow-Origin(ACAO) [S2]. Điều này cho phép bất kỳ trang web nào truy cập tài nguyên [S2] một cách hiệu quả. - Ký tự đại diện bị định cấu hình sai: Mặc dù ký tự đại diện
*cho phép mọi nguồn gốc truy cập tài nguyên nhưng không thể sử dụng nó cho các yêu cầu yêu cầu thông tin xác thực (như cookie hoặc tiêu đề Cấp phép) [S3]. Các nhà phát triển thường cố gắng bỏ qua điều này bằng cách tạo động tiêu đề ACAO dựa trên yêu cầu [S2]. - Danh sách trắng 'null': Một số ứng dụng đưa nguồn gốc
nullvào danh sách trắng, có thể được kích hoạt bởi các yêu cầu được chuyển hướng hoặc tệp cục bộ, cho phép các trang web độc hại giả dạng nguồn gốcnullđể có quyền truy cập [S2][S3]. - Lỗi phân tích cú pháp: Các lỗi trong kết hợp biểu thức chính quy hoặc chuỗi khi xác thực tiêu đề
Origincó thể cho phép kẻ tấn công sử dụng các miền nhưtrusted-domain.com.attacker.com[S2].
Điều quan trọng cần lưu ý là CORS không phải là biện pháp bảo vệ chống lại Giả mạo yêu cầu trên nhiều trang web (CSRF) [S2].
Sửa chữa bê tông
- Sử dụng Danh sách trắng tĩnh: Tránh tạo động tiêu đề
Access-Control-Allow-Origintừ tiêu đềOrigin[S2] của yêu cầu. Thay vào đó, hãy so sánh nguồn gốc của yêu cầu với danh sách miền đáng tin cậy được mã hóa cứng [S3]. - Tránh nguồn gốc 'null': Không bao giờ đưa
nullvào danh sách trắng có nguồn gốc được phép [S2]. - Hạn chế thông tin xác thực: Chỉ đặt
Access-Control-Allow-Credentials: truenếu thực sự cần thiết cho tương tác giữa nhiều nguồn gốc cụ thể [S3]. - Sử dụng xác thực phù hợp: Nếu bạn phải hỗ trợ nhiều nguồn gốc, hãy đảm bảo logic xác thực cho tiêu đề
Originmạnh mẽ và không thể bị bỏ qua bởi tên miền phụ hoặc tên miền trông tương tự [S2].
FixVibe kiểm tra nó như thế nào
FixVibe hiện bao gồm điều này dưới dạng kiểm tra hoạt động có kiểm soát. Sau khi xác minh miền, active.cors gửi các yêu cầu API có cùng nguồn gốc với nguồn gốc tổng hợp của kẻ tấn công và đánh giá các tiêu đề phản hồi CORS. Nó báo cáo phản ánh nguồn gốc tùy ý, CORS được chứng nhận bằng ký tự đại diện và CORS mở rộng trên các điểm cuối API không công khai trong khi tránh tiếng ồn tài sản công cộng.
