Muốn có ý kiến phản hồi: CORS cho mạng riêng (RFC1918)

Giảm thiểu rủi ro liên quan đến việc thiết bị và máy chủ vô tình bị lộ trên mạng nội bộ của máy khách lên web nói chung.

Các trang web độc hại gửi yêu cầu đến các thiết bị và máy chủ được lưu trữ trên mạng riêng tư từ lâu đã là mối đe doạ. Chẳng hạn, kẻ tấn công có thể thay đổi cấu hình của bộ định tuyến không dây để cho phép các cuộc tấn công Man-in-the-Middle. CORS-RFC1918 là đề xuất chặn các yêu cầu như vậy theo mặc định trên trình duyệt và đòi hỏi các thiết bị nội bộ phải chọn nhận các yêu cầu từ Internet công cộng.

Để hiểu tác động của thay đổi này đến hệ sinh thái web, nhóm Chrome đang tìm ý kiến phản hồi của các nhà phát triển xây dựng máy chủ cho mạng riêng.

Hiện trạng có vấn đề gì?

Nhiều máy chủ web chạy trong một mạng riêng – bộ định tuyến không dây, máy in, trang web nội bộ, các dịch vụ doanh nghiệp và thiết bị Internet của vạn vật (IoT) chỉ là một phần trong số đó. Các máy chủ này có vẻ đang ở trong môi trường an toàn hơn so với những máy chủ hiển thị công khai, nhưng những máy chủ đó có thể bị kẻ tấn công lợi dụng bằng cách sử dụng trang web làm proxy. Ví dụ: các trang web độc hại có thể nhúng một URL mà chỉ cần nạn nhân xem (trên trình duyệt hỗ trợ JavaScript) là sẽ cố gắng thay đổi chế độ cài đặt máy chủ DNS trên bộ định tuyến băng thông rộng tại nhà của nạn nhân. Kiểu tấn công này được gọi là "Drive-By Pharming" và đã xảy ra vào năm 2014. Hơn 300.000 bộ định tuyến không dây dễ bị tấn công đã bị khai thác bằng cách thay đổi chế độ cài đặt DNS và cho phép kẻ tấn công chuyển hướng người dùng đến máy chủ độc hại.

CORS-RFC1918

Để giảm thiểu mối đe doạ của các cuộc tấn công tương tự, cộng đồng web sẽ chuyển sang chế độ CORS-RFC1918Chia sẻ tài nguyên trên nhiều nguồn gốc (CORS) chuyên dành cho các mạng riêng được xác định trong RFC1918.

Các trình duyệt triển khai CORS sẽ kiểm tra tài nguyên mục tiêu xem các tài nguyên đó có được tải từ một nguồn gốc khác hay không. Tính năng này đi kèm với các tiêu đề bổ sung cùng dòng mô tả quyền truy cập hoặc bằng cách sử dụng một cơ chế gọi là yêu cầu kiểm tra, tuỳ thuộc vào mức độ phức tạp. Hãy đọc bài viết Chia sẻ tài nguyên trên nhiều nguồn gốc để tìm hiểu thêm.

Với CORS-RFC1918, theo mặc định, trình duyệt sẽ chặn tài nguyên tải qua mạng riêng, ngoại trừ những tài nguyên được máy chủ cho phép một cách rõ ràng bằng cách sử dụng CORS và HTTPS. Trang web gửi yêu cầu đến các tài nguyên đó sẽ cần phải gửi tiêu đề CORS và máy chủ cần phải nêu rõ rằng máy chủ chấp nhận yêu cầu nhiều nguồn gốc bằng cách phản hồi bằng các tiêu đề CORS tương ứng. (Các tiêu đề CORS chính xác vẫn đang trong quá trình phát triển.)

Nhà phát triển của những thiết bị hoặc máy chủ như vậy sẽ được yêu cầu thực hiện 2 việc:

  • Đảm bảo trang web gửi yêu cầu tới mạng riêng tư được phân phát qua HTTPS.
  • Thiết lập tính năng hỗ trợ máy chủ cho CORS-RFC1918 và phản hồi bằng các tiêu đề HTTP dự kiến.

Những loại yêu cầu nào bị ảnh hưởng?

Các yêu cầu bị ảnh hưởng bao gồm:

  • Yêu cầu từ mạng công khai đến mạng riêng
  • Yêu cầu từ một mạng riêng đến một mạng cục bộ
  • Yêu cầu từ mạng công cộng đến mạng cục bộ

Mạng riêng Một đích đến phân giải thành không gian địa chỉ riêng tư đã xác định trong Mục 3 của RFC1918 trong IPv4, một địa chỉ IPv6 được ánh xạ IPv4 mà trong đó địa chỉ IPv4 được ánh xạ là địa chỉ riêng tư hoặc một địa chỉ IPv6 bên ngoài mạng con ::1/128, 2000::/3ff00::/8.

Mạng cục bộ Một đích đến phân giải thành không gian "loopback" (127.0.0.0/8) được xác định trong phần 3.2.1.3 của RFC1122 của IPv4, không gian "link-local" (169.254.0.0/16) được xác định trong RFC3927 của IPv4, tiền tố "Địa chỉ cục bộ duy nhất" (fc00::/7) được xác định trong phần 3 của RFC4193fe80::/10RFC4291

Mạng công khai Tất cả các mạng khác.

Mối quan hệ giữa các mạng công khai, riêng tư và cục bộ trong CORS-RFC1918
Mối quan hệ giữa các mạng công khai, riêng tư và cục bộ trong CORS-RFC1918.

Kế hoạch của Chrome để bật CORS-RFC1918

Chrome sẽ mang CORS-RFC1918 theo hai bước:

Bước 1: Chỉ cho phép yêu cầu tài nguyên mạng riêng từ các trang web HTTPS

Chrome 87 thêm một cờ bắt buộc các trang web công khai gửi yêu cầu đến tài nguyên mạng riêng phải ở trên HTTPS. Bạn có thể chuyển đến about://flags#block-insecure-private-network-requests để bật tính năng này. Khi cờ này bật, mọi yêu cầu đến tài nguyên mạng riêng từ trang web HTTP sẽ bị chặn.

Kể từ Chrome 88, lỗi CORS-RFC1918 sẽ được báo cáo là lỗi chính sách CORS trong bảng điều khiển.

Lỗi CORS-RFC1918 sẽ được báo cáo là lỗi chính sách CORS trong bảng điều khiển.
Các lỗi CORS-RFC1918 sẽ được báo cáo là lỗi chính sách CORS trong Bảng điều khiển.

Trong bảng điều khiển Mạng của Công cụ của Chrome cho nhà phát triển, bạn có thể bật hộp đánh dấu Yêu cầu bị chặn để tập trung vào các yêu cầu bị chặn:

Lỗi CORS-RFC1918 cũng sẽ được báo cáo dưới dạng lỗi CORS trong bảng điều khiển Mạng.
Các lỗi CORS-RFC1918 cũng sẽ được báo cáo dưới dạng lỗi CORS trong bảng điều khiển Mạng.

Trong Chrome 87, lỗi CORS-RFC1918 chỉ được báo cáo trong Bảng điều khiển công cụ cho nhà phát triển dưới dạng ERR_INSECURE_PRIVATE_NETWORK_REQUEST.

Bạn có thể tự mình trải nghiệm trên trang web thử nghiệm này.

Bước 2: Gửi yêu cầu kiểm tra có tiêu đề đặc biệt

Trong tương lai, bất cứ khi nào một trang web công khai cố gắng tìm nạp tài nguyên từ mạng riêng hoặc mạng cục bộ, Chrome sẽ gửi một yêu cầu kiểm tra trước khi thực hiện yêu cầu thực tế.

Yêu cầu sẽ bao gồm một tiêu đề Access-Control-Request-Private-Network: true cùng với các tiêu đề của yêu cầu CORS khác. Ngoài ra, các tiêu đề này xác định nguồn gốc đưa ra yêu cầu, cho phép kiểm soát quyền truy cập một cách chi tiết. Máy chủ có thể phản hồi bằng tiêu đề Access-Control-Allow-Private-Network: true để cho biết rõ việc cấp quyền truy cập vào tài nguyên.

Cần có ý kiến phản hồi

Nếu bạn đang lưu trữ một trang web trong một mạng riêng và dự kiến nhận được yêu cầu từ các mạng công khai, thì nhóm Chrome sẽ quan tâm đến ý kiến phản hồi và các trường hợp sử dụng của bạn. Có hai việc bạn có thể làm để trợ giúp:

  • Chuyển đến about://flags#block-insecure-private-network-requests, bật cờ và xem trang web của bạn có gửi yêu cầu đến tài nguyên mạng riêng như dự kiến hay không.
  • Nếu bạn gặp vấn đề hoặc có ý kiến phản hồi, hãy gửi vấn đề tại crbug.com và đặt thành phần thành Blink>SecurityFeature>CORS>RFC1918.

Phản hồi mẫu

Bộ định tuyến không dây của chúng tôi phân phát trang web quản trị cho cùng một mạng riêng nhưng thông qua HTTP. Nếu các trang web nhúng trang web quản trị bắt buộc phải có HTTPS, thì đó sẽ là nội dung hỗn hợp. Chúng tôi có nên bật HTTPS trên trang web quản trị trong một mạng khép kín không?

Đây chính xác là loại phản hồi mà Chrome đang tìm kiếm. Vui lòng báo cáo vấn đề về trường hợp sử dụng cụ thể của bạn tại crbug.com. Chrome rất mong nhận được ý kiến đóng góp của bạn.

Hình ảnh chính của Stephen Philips trên Unsplash.