Zwiększ bezpieczeństwo i prywatność, aktualizując pamięć podręczną HTTP

Zapomnienie lub niewłaściwe użycie nagłówka Cache-Control może negatywnie wpłynąć na bezpieczeństwo Twojej witryny i prywatność użytkowników.

Arthur Sonzogni
Arthur Sonzogni

Domyślnie zasoby mogą być zawsze zapisywane w pamięci podręcznej przez dowolny typ pamięci podręcznej. Nieużywanie nagłówka Cache-Control lub niewłaściwe używanie go może negatywnie wpłynąć na bezpieczeństwo Twojej witryny i prywatność użytkowników.

Jeśli chcesz otrzymywać spersonalizowane odpowiedzi, które chcesz zachować jako prywatne, zalecamy wykonanie tych czynności:

  • Zablokuj pośrednikom zapisywanie zasobu w pamięci podręcznej. Ustaw Cache-Control: private.
  • Ustaw odpowiedni dodatkowy klucz pamięci podręcznej. Jeśli odpowiedź różni się z powodu plików cookie (co może się zdarzyć, gdy plik cookie przechowuje dane logowania), ustaw Vary: Cookie.

Z dalszej części artykułu dowiesz się, dlaczego warto z tego korzystać, i poznasz:

  1. Problemy z bezpieczeństwem i prywatnością, o których możesz nie wiedzieć
  2. Różne typy pamięci podręcznych HTTP i typowe nieporozumienia
  3. Zalecane działania w przypadku wartościowych witryn

Wyciek zasobów z luk w zabezpieczeniach Spectre

Luka w zabezpieczeniach widmowa umożliwia stronie odczytywanie pamięci procesu systemu operacyjnego. Oznacza to, że osoba przeprowadzająca atak może uzyskać nieautoryzowany dostęp do danych z innych domen. W efekcie nowoczesne przeglądarki ograniczają możliwość korzystania z niektórych ich funkcji, takich jak SharedArrayBuffer czy licznik czasu w wysokiej rozdzielczości, w przypadku stron z izolacją od zasobów z innych domen.

Nowoczesne przeglądarki egzekwują zasady dotyczące umieszczania danych z innych domen (COEP). Dzięki temu zasoby z innych domen będą mieć:

  • Zasoby publiczne, żądania bez plików cookie
  • Zasoby mogą być udostępniane między domenami za pomocą CORS lub nagłówka CORP

Konfiguracja COEP nie uniemożliwia atakującemu wykorzystania Spectre. Zapewnia jednak, że zasoby z innych domen nie są cenne dla atakującego (gdy są wczytywane przez przeglądarkę jako zasób publiczny) ani nie mogą być udostępniane hakerowi (w przypadku udostępnienia CORP: cross-origin).

Jak buforowanie HTTP wpływa na Spectre?

Jeśli nagłówek Cache-Control nie jest prawidłowo ustawiony, osoba przeprowadzająca atak może przeprowadzić atak. Na przykład:

  1. Zasób z danymi uwierzytelniającymi jest buforowany.
  2. Osoba przeprowadzająca atak wczytuje stronę izolowaną od zasobów z innych domen.
  3. Atakujący ponownie żąda zasobu.
  4. Ustawienie COEP:credentialless jest ustawiane przez przeglądarkę, więc zasób jest pobierany bez plików cookie. Pamięć podręczna może jednak zwrócić odpowiedź poświadczoną poświadczoną.
  5. Osoba przeprowadzająca atak może odczytać spersonalizowany zasób za pomocą ataku Spectre.

Chociaż pamięć podręczna HTTP przeglądarki nie pozwala na tego typu ataki w praktyce, istnieją dodatkowe pamięci podręczne, których nie można bezpośrednio kontrolować. To może sprawić, że ten atak się uda.

Typowe nieporozumienia dotyczące pamięci podręcznych HTTP

1. Zasoby są przechowywane w pamięci podręcznej tylko przez przeglądarkę

Pamięć podręczna często ma kilka warstw. Niektóre pamięci podręczne są przeznaczone dla jednego użytkownika, a inne dla wielu użytkowników. Niektóre z nich są kontrolowane przez serwer, inne przez użytkownika, a jeszcze inne przez podmioty pośredniczące.

  • Pamięć podręczna przeglądarki. Są one własnością pojedynczego użytkownika i jest dla niego przeznaczone. Są one zaimplementowane w przeglądarce. Poprawiają one wydajność, ponieważ unikają wielokrotnego pobierania tej samej odpowiedzi.
  • Lokalny serwer proxy. Ta opcja mogła zostać zainstalowana przez użytkownika, ale może też być zarządzana przez pośredników: firmę, organizację lub dostawcę usług internetowych. Lokalne serwery proxy często zapisują w pamięci podręcznej pojedynczą odpowiedź dla kilku użytkowników, co stanowi „publiczną” pamięć podręczną. Lokalne serwery proxy mają wiele ról.
  • Pamięć podręczna serwera pierwotnego / CDN. Tym działaniem steruje serwer. Celem pamięci podręcznej serwera pierwotnego jest zmniejszenie obciążenia serwera pierwotnego przez zapisywanie tej samej odpowiedzi dla wielu użytkowników. Cele CDN są podobne, ale rozmieszczone na całym świecie i przypisane do najbliższego zbioru użytkowników, aby skrócić czas oczekiwania.
Między przeglądarką a serwerem jest często wiele warstw pamięci podręcznej.
Między przeglądarką a serwerem mogą być różne warstwy pamięci podręcznej. Może na przykład wystąpić pamięć podręczna serwera, a po niej sieć CDN i pamięć podręczna przeglądarki. Może też istnieć lokalny serwer proxy między siecią CDN a pamięcią podręczną przeglądarki.

2. Protokół SSL uniemożliwia pośrednikom buforowanie zasobów HTTPS

Wielu użytkowników regularnie korzysta z lokalnie skonfigurowanych serwerów proxy, aby uzyskiwać dostęp (np. udostępniać połączenie z pomiarem użycia danych), sprawdzać wirusy lub zapobiegać utracie danych (DLP). Pamięć podręczna pośrednia wykonuje przechwytywanie TLS.

Na stacjach roboczych pracowników firmy często instalowana jest pośrednia pamięć podręczna. Przeglądarki są skonfigurowane tak, aby ufały certyfikatom lokalnego serwera proxy.

Ostatecznie niektóre zasoby HTTPS mogą być przechowywane w pamięci podręcznej przez te lokalne serwery proxy.

Jak działa pamięć podręczna HTTP

Programiści cennych witryn, m.in. popularnych i popularnych witryn, w których używane są dane umożliwiające identyfikację, powinni podjąć działania, by zwiększyć bezpieczeństwo.

Największe ryzyko występuje wtedy, gdy dostęp do zasobu różni się w zależności od plików cookie. Pośrednia pamięć podręczna może zwrócić odpowiedź żądaną z plikami cookie na żądanie, która nie została spełniona, jeśli nie podjęto żadnych działań zapobiegawczych.

Zalecamy wykonanie jednej z tych czynności:

  • Zablokuj pośrednikom zapisywanie zasobu w pamięci podręcznej. Ustaw Cache-Control: private.
  • Ustaw odpowiedni dodatkowy klucz pamięci podręcznej. Jeśli odpowiedź różni się z powodu plików cookie (co może się zdarzyć, gdy plik cookie przechowuje dane logowania), ustaw Vary: Cookie.

W szczególności zmień działanie domyślne: zawsze zdefiniuj właściwość Cache-Control lub Vary.

Dodatkowe uwagi

Istnieją inne, podobne typy ataków z wykorzystaniem pamięci podręcznej HTTP, które wykorzystują inny mechanizm niż izolacja z innych domen. Przykład: Jake Archibald opisuje niektóre ataki w artykule Jak wygrać w CORS.

ataki te są ograniczane przez niektóre przeglądarki, które dzielą pamięć podręczną HTTP w zależności od tego, czy żądanie odpowiedzi na żądanie zasobu zostało wysłane z użyciem danych logowania. Od 2022 roku Firefox dzieli pamięć podręczną, a Chrome i Safari nie. Chrome może w przyszłości podzielić pamięć podręczną. Pamiętaj, że te ataki są różne i uzupełniają podział według źródła najwyższego poziomu.

Nawet jeśli problem ten można rozwiązać w przypadku przeglądarek internetowych, będzie on nadal występować w lokalnych pamięciach podręcznych serwera proxy. Dlatego też zalecamy stosowanie się do powyższych zaleceń.


Autor zdjęcia: Ben Pattinson, Unsplash.