Masukan diperlukan: CORS untuk jaringan pribadi (RFC1918)

Mitigasi risiko yang terkait dengan eksposur perangkat dan server yang tidak disengaja di jaringan internal klien ke web secara keseluruhan.

Situs berbahaya yang membuat permintaan ke perangkat dan server yang dihosting di jaringan pribadi telah lama menjadi ancaman. Penyerang dapat, misalnya, mengubah konfigurasi router nirkabel untuk mengaktifkan serangan 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 darinya. Server tersebut mungkin tampak berada di lingkungan yang lebih aman daripada server yang terekspos ke publik, tetapi server tersebut dapat disalahgunakan oleh penyerang yang menggunakan halaman web sebagai proxy. Misalnya, situs berbahaya dapat menyematkan URL yang, saat hanya dilihat oleh korban (di browser yang mengaktifkan JavaScript), 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 mengizinkan 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 inline yang menjelaskan akses atau dengan menggunakan mekanisme yang disebut permintaan pra-penerbangan, bergantung pada kompleksitasnya. Baca Cross Origin Resource Sharing untuk mempelajari lebih lanjut.

Dengan CORS-RFC1918, browser akan memblokir memuat resource melalui jaringan pribadi secara default, kecuali 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-asal dengan merespons dengan 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 meliputi:

  • 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 me-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 me-resolve ke ruang "loopback" (127.0.0.0/8) yang ditentukan di bagian 3.2.1.3 dari RFC1122 IPv4, ruang "link-local" (169.254.0.0/16) yang ditentukan di RFC3927 IPv4, awalan "Alamat Lokal Unik" (fc00::/7) yang ditentukan di Bagian 3 dari RFC4193 IPv6, atau awalan "link-local" (fe80::/10) yang ditentukan di bagian 2.5.6 dari RFC4291 IPv6.

Jaringan publik Semua jaringan 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 tanda 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, setiap 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 di Chrome DevTools, Anda dapat mengaktifkan kotak centang Permintaan yang Diblokir untuk berfokus pada permintaan yang diblokir:

Error CORS-RFC1918 juga akan dilaporkan sebagai error error CORS di panel Jaringan.
Error CORS-RFC1918 juga akan dilaporkan sebagai error 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 pra-penerbangan dengan header khusus

Di masa mendatang, setiap kali situs publik mencoba mengambil resource dari jaringan pribadi atau lokal, Chrome akan mengirimkan permintaan pra-penerbangan sebelum permintaan yang sebenarnya.

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

Masukan yang diinginkan

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 tanda, lalu lihat apakah situs Anda mengirimkan permintaan ke resource jaringan pribadi seperti yang diharapkan.
  • Jika Anda mengalami masalah atau memiliki masukan, laporkan 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 kami mengaktifkan HTTPS di situs admin dalam jaringan tertutup?

Ini adalah jenis umpan balik yang dicari Chrome. Harap laporkan masalah dengan kasus penggunaan konkret Anda di crbug.com. Chrome ingin mendengar pendapat Anda.

Banner besar oleh Stephen Philips di Unsplash.