Melupakan atau menyalahgunakan header Cache-Control dapat berdampak negatif pada keamanan situs dan privasi pengguna Anda.
Secara default, sumber daya selalu diizinkan untuk di-cache oleh jenis cache apa pun.
Tidak menggunakan atau menyalahgunakan header Cache-Control
dapat berdampak negatif
pada keamanan situs dan privasi pengguna.
Untuk respons yang dipersonalisasi yang ingin dirahasiakan, sebaiknya:
- Cegah perantara menyimpan resource dalam cache. Tetapkan
Cache-Control: private
. - Setel kunci cache
sekunder yang sesuai.
Jika respons bervariasi karena cookie—yang dapat terjadi saat
cookie menyimpan kredensial—tetapkan
Vary: Cookie
.
Baca terus untuk mempelajari mengapa hal ini penting dan temukan:
- Masalah keamanan dan privasi yang mungkin tidak Anda ketahui
- Berbagai jenis cache HTTP dan kesalahpahaman umum
- Tindakan yang disarankan untuk situs bernilai tinggi
Risiko keamanan dan privasi terkait cache
Kebocoran resource dari kerentanan Spectre
Kerentanan
Spectre
memungkinkan halaman membaca memori proses OS. Artinya, penyerang dapat
mendapatkan akses tidak sah ke data lintas origin. Akibatnya, browser web modern telah membatasi penggunaan beberapa fiturnya, seperti SharedArrayBuffer
atau timer resolusi tinggi, ke halaman dengan isolasi lintas origin.
Browser web modern menerapkan Cross-Origin Embedder Policy (COEP). Cara ini memastikan resource lintas origin memiliki:
- Resource publik, diminta tanpa cookie
- Resource secara eksplisit diizinkan untuk dibagikan lintas origin, melalui CORS atau header CORP
Konfigurasi COEP tidak mencegah penyerang mengeksploitasi Spectre. Namun, metode ini
memastikan resource lintas origin tidak berharga bagi penyerang (saat dimuat
oleh browser sebagai resource publik) atau diizinkan untuk dibagikan dengan penyerang (jika dibagikan dengan
CORP: cross-origin
).
Bagaimana penyimpanan HTTP ke cache terhadap Spectre?
Jika header Cache-Control
tidak disetel dengan benar, penyerang dapat melakukan
serangan. Contoh:
- Resource berkredensial di-cache.
- Penyerang memuat halaman yang diisolasi lintas origin.
- Penyerang meminta kembali resource.
COEP:credentialless
ditetapkan oleh browser, sehingga resource diambil tanpa cookie. Namun, cache dapat menampilkan respons berkredensial.- Kemudian, penyerang dapat membaca resource yang dipersonalisasi menggunakan serangan Spectre.
Meskipun cache HTTP browser web tidak mengizinkan jenis serangan ini terjadi dalam praktiknya, cache tambahan ada di luar kontrol langsung browser. Hal inilah yang menyebabkan keberhasilan serangan ini.
Kesalahpahaman umum tentang cache HTTP
1. Resource hanya di-cache oleh browser
Sering kali ada beberapa lapisan cache. Sebagian cache dikhususkan untuk satu pengguna, sebagian lagi untuk beberapa pengguna. Sebagian dikontrol oleh server, sebagian oleh pengguna, dan sebagian lagi oleh perantara.
- Cache browser. Cache ini dimiliki oleh dan didedikasikan untuk satu pengguna, yang diimplementasikan di browser web mereka. Keduanya meningkatkan performa dengan menghindari pengambilan respons yang sama beberapa kali.
- Proxy lokal. Link ini mungkin telah diinstal oleh pengguna, tetapi juga dapat dikelola oleh perantara: perusahaan, organisasi, atau penyedia internet. Proxy lokal sering meng-cache respons tunggal untuk beberapa pengguna, yang merupakan cache "publik". {i>Proxy<i} lokal memiliki beberapa peran.
- Cache server asal / CDN. Ini dikontrol oleh server. Tujuan cache server Asal adalah untuk mengurangi beban pada server asal dengan meng-cache respons yang sama untuk beberapa pengguna. Tujuan CDN serupa, tetapi tersebar di seluruh dunia dan ditetapkan ke kumpulan pengguna terdekat untuk mengurangi latensi.
2. SSL mencegah perantara meng-cache sumber daya HTTPS
Banyak pengguna yang rutin menggunakan proxy yang dikonfigurasi secara lokal, baik untuk tujuan akses (seperti berbagi koneksi berbayar), pemeriksaan virus, atau untuk tujuan pencegahan kebocoran data (DLP). Cache perantara melakukan intersepsi TLS.
Cache perantara sering diinstal di workstation karyawan perusahaan. Browser web dikonfigurasi untuk memercayai sertifikat proxy lokal.
Pada akhirnya, beberapa resource HTTPS dapat di-cache oleh proxy lokal ini.
Cara kerja cache HTTP
- Resource secara implisit diizinkan untuk di-cache secara default.
- Kunci cache utama terdiri dari URL dan metode. (URL, metode)
- Kunci cache
sekunder adalah
header yang disertakan dalam header
Vary
.Vary: Cookie
menunjukkan respons bergantung padaCookie
. - Header
Cache-Control
memberikan kontrol yang lebih mendetail.
Lakukan tindakan yang disarankan berikut untuk situs Anda
Developer situs bernilai tinggi, yang mencakup situs dengan traffic tinggi dan situs yang berinteraksi dengan informasi identitas pribadi, harus bertindak sekarang untuk meningkatkan keamanan.
Risiko terbesar terjadi ketika akses ke resource bervariasi, bergantung pada cookie. Cache perantara dapat menampilkan respons yang diminta dengan cookie untuk permintaan yang tidak ditampilkan jika tidak ada tindakan pencegahan yang dilakukan.
Sebaiknya lakukan salah satu langkah berikut:
- Cegah perantara menyimpan resource dalam cache. Tetapkan
Cache-Control: private
. - Setel kunci cache
sekunder yang sesuai.
Jika respons bervariasi karena cookie—yang dapat terjadi saat
cookie menyimpan kredensial—tetapkan
Vary: Cookie
.
Khususnya, ubah perilaku default: selalu tentukan Cache-Control
atau
Vary
.
Pertimbangan lainnya
Ada jenis serangan serupa lainnya yang menggunakan cache HTTP, tetapi serangan tersebut bergantung pada mekanisme yang berbeda dari isolasi lintas asal. Misalnya, Jake Archhibald menjelaskan beberapa serangan dalam artikel Cara memenangkan CORS.
Serangan ini dimitigasi oleh beberapa browser web yang membagi cache HTTP-nya bergantung pada apakah respons resource diminta dengan kredensial atau tidak. Mulai tahun 2022, Firefox tidak membagi cache, sedangkan Chrome dan Safari tidak. Chrome dapat membagi cache di masa mendatang. Perlu diperhatikan bahwa serangan ini berbeda dan saling melengkapi dengan membaginya per origin tingkat atas.
Meskipun masalah ini dapat dimitigasi untuk browser web, masalah akan tetap ada di cache proxy lokal. Oleh karena itu, sebaiknya Anda tetap mengikuti rekomendasi di atas.
Foto header oleh Ben Pattinson di Unsplash.