Masukan diperlukan: CORS untuk jaringan pribadi (RFC1918)

Mengurangi risiko yang terkait dengan paparan perangkat dan server yang tidak disengaja di jaringan internal klien ke web secara umum.

Situs berbahaya yang membuat permintaan ke perangkat dan server yang dihosting di jaringan pribadi telah lama menjadi ancaman. Misalnya, penyerang dapat mengubah konfigurasi router nirkabel untuk mengaktifkan Man-in-the-Middle. CORS-RFC1918 adalah proposal untuk memblokir permintaan tersebut secara default di browser dan mewajibkan perangkat internal untuk ikut serta dalam permintaan dari internet publik.

Untuk memahami dampak perubahan ini terhadap ekosistem web, tim Chrome mencari masukan dari developer yang membuat server untuk jaringan pribadi.

Apa yang salah dengan status quo?

Banyak server web berjalan dalam jaringan pribadi—router nirkabel, printer, situs intranet, layanan perusahaan, dan perangkat Internet of Things (IoT) hanyalah sebagian di antaranya. Server tersebut mungkin tampak berada di lingkungan yang lebih aman daripada yang diekspos ke publik, tetapi server tersebut dapat disalahgunakan oleh penyerang yang menggunakan halaman web sebagai proxy. Misalnya, situs berbahaya dapat menyematkan URL yang, jika hanya dilihat oleh korban (di browser yang mendukung JavaScript), akan mencoba mengubah setelan server DNS di router broadband rumah korban. Jenis serangan ini disebut "Drive-By Pharming" dan terjadi pada tahun 2014. Lebih dari 300.000 router nirkabel yang rentan dieksploitasi dengan mengubah setelan DNS-nya dan memungkinkan penyerang mengalihkan pengguna ke server berbahaya.

CORS-RFC1918

Untuk mengurangi ancaman serangan serupa, komunitas web menghadirkan CORS-RFC1918Cross Origin Resource Sharing (CORS) yang dikhususkan untuk jaringan pribadi yang ditentukan dalam RFC1918.

Browser yang menerapkan CORS akan memeriksa dengan resource target apakah resource tersebut dapat dimuat dari origin yang berbeda. Hal ini dilakukan dengan header tambahan sebaris yang menjelaskan akses atau menggunakan mekanisme yang disebut permintaan preflight, bergantung pada kompleksitasnya. Baca Cross Origin Resource Sharing untuk mempelajari lebih lanjut.

Dengan CORS-RFC1918, browser akan memblokir pemuatan resource melalui jaringan pribadi secara default, kecuali resource yang diizinkan secara eksplisit oleh server menggunakan CORS dan melalui HTTPS. Situs yang membuat permintaan ke resource tersebut harus mengirim header CORS dan server harus menyatakan secara eksplisit bahwa situs tersebut menerima permintaan lintas origin dengan merespons menggunakan header CORS yang sesuai. (Header CORS yang tepat masih dalam pengembangan.)

Developer perangkat atau server tersebut akan diminta untuk melakukan dua hal:

  • Pastikan situs yang membuat permintaan ke jaringan pribadi ditayangkan melalui HTTPS.
  • Siapkan dukungan server untuk CORS-RFC1918 dan respons dengan header HTTP yang diharapkan.

Jenis permintaan apa yang terpengaruh?

Permintaan yang terpengaruh mencakup:

  • Permintaan dari jaringan publik ke jaringan pribadi
  • Permintaan dari jaringan pribadi ke jaringan lokal
  • Permintaan dari jaringan publik ke jaringan lokal

Jaringan pribadi Tujuan yang di-resolve ke ruang alamat pribadi yang ditentukan di Bagian 3 RFC1918 di IPv4, alamat IPv6 yang dipetakan IPv4 dengan alamat IPv4 yang dipetakan itu sendiri bersifat pribadi, atau alamat IPv6 di luar subnet ::1/128, 2000::/3, dan ff00::/8.

Jaringan lokal Tujuan yang di-resolve ke ruang "loopback" (127.0.0.0/8) yang ditentukan di bagian 3.2.1.3 RFC1122 IPv4, ruang "link-local" (169.254.0.0/16) yang ditentukan di RFC3927 IPv4, awalan "Unique Local Address" (fc00::/7) yang ditentukan di Bagian 3 RFC4193 IPv6, atau awalan "link-local" (fe80::/10) yang ditentukan di bagian 2.5.6 RFC4291 IPv6.

Jaringan publik Semua yang lainnya.

Hubungan antara jaringan publik, pribadi, dan lokal di CORS-RFC1918
Hubungan antara jaringan publik, pribadi, dan lokal di CORS-RFC1918.

Rencana Chrome untuk mengaktifkan CORS-RFC1918

Chrome menghadirkan CORS-RFC1918 dalam dua langkah:

Langkah 1: Permintaan ke resource jaringan pribadi hanya akan diizinkan dari halaman web HTTPS

Chrome 87 menambahkan flag yang mewajibkan situs publik yang membuat permintaan ke resource jaringan pribadi untuk menggunakan HTTPS. Anda dapat membuka about://flags#block-insecure-private-network-requests untuk mengaktifkannya. Dengan flag ini diaktifkan, semua permintaan ke resource jaringan pribadi dari situs HTTP akan diblokir.

Mulai Chrome 88, error CORS-RFC1918 akan dilaporkan sebagai error kebijakan CORS di konsol.

Error CORS-RFC1918 akan dilaporkan sebagai error kebijakan CORS di konsol.
Error CORS-RFC1918 akan dilaporkan sebagai error kebijakan CORS di Konsol.

Di panel Jaringan Chrome DevTools, Anda dapat mencentang kotak Permintaan Diblokir untuk berfokus pada permintaan yang diblokir:

Error CORS-RFC1918 juga akan dilaporkan sebagai error CORS di panel Jaringan.
Error CORS-RFC1918 juga akan dilaporkan sebagai error CORS di panel Jaringan.

Di Chrome 87, error CORS-RFC1918 hanya dilaporkan di Konsol DevTools sebagai ERR_INSECURE_PRIVATE_NETWORK_REQUEST.

Anda dapat mencobanya sendiri menggunakan situs pengujian ini.

Langkah 2: Mengirim permintaan preflight dengan header khusus

Di masa mendatang, setiap kali situs publik mencoba mengambil resource dari jaringan pribadi atau lokal, Chrome akan mengirim permintaan preflight sebelum permintaan sebenarnya.

Permintaan akan menyertakan header Access-Control-Request-Private-Network: true selain header permintaan CORS lainnya. Di antara hal lainnya, header ini mengidentifikasi origin yang membuat permintaan, sehingga memungkinkan kontrol akses terperinci. Server dapat merespons dengan header Access-Control-Allow-Private-Network: true untuk menunjukkan secara eksplisit bahwa server memberikan akses ke resource.

Masukan diperlukan

Jika Anda menghosting situs dalam jaringan pribadi yang mengharapkan permintaan dari jaringan publik, tim Chrome tertarik dengan masukan dan kasus penggunaan Anda. Ada dua hal yang dapat Anda lakukan untuk membantu:

  • Buka about://flags#block-insecure-private-network-requests, aktifkan flag, dan lihat apakah situs Anda mengirim permintaan ke resource jaringan pribadi seperti yang diharapkan.
  • Jika Anda mengalami masalah atau memiliki masukan, ajukan masalah di crbug.com dan tetapkan komponen ke Blink>SecurityFeature>CORS>RFC1918.

Contoh masukan

Router nirkabel kami menayangkan situs admin untuk jaringan pribadi yang sama, tetapi melalui HTTP. Jika HTTPS diperlukan untuk situs yang menyematkan situs admin, situs tersebut akan menjadi konten campuran. Haruskah kita mengaktifkan HTTPS di situs admin dalam jaringan tertutup?

Masukan seperti inilah yang dicari Chrome. Ajukan masalah dengan kasus penggunaan konkret Anda di crbug.com. Chrome ingin mendengar dari Anda.