Content Security Policy (CSP) Bypass

Reading time: 32 minutes

tip

Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Ucz się i ćwicz Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Wsparcie dla HackTricks

Czym jest CSP

Content Security Policy (CSP) jest technologią przeglądarkową, mającą na celu przede wszystkim ochronę przed atakami takimi jak cross-site scripting (XSS). Polega na określaniu i definiowaniu ścieżek oraz źródeł, z których przeglądarka może bezpiecznie ładować zasoby. Te zasoby obejmują różne elementy, takie jak obrazy, ramki oraz JavaScript. Na przykład polityka może zezwalać na ładowanie i wykonywanie zasobów z tej samej domeny (self), włączając zasoby inline oraz wykonywanie kodu w postaci łańcucha za pomocą funkcji takich jak eval, setTimeout lub setInterval.

Wdrażanie CSP odbywa się poprzez nagłówki odpowiedzi lub przez umieszczenie elementów meta w stronie HTML. Przeglądarki egzekwują tę politykę i natychmiast blokują wszelkie wykryte naruszenia.

  • Implementowane przez nagłówek odpowiedzi:
Content-Security-policy: default-src 'self'; img-src 'self' allowed-website.com; style-src 'self';
  • Zaimplementowane za pomocą meta tagu:
xml
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; img-src https://*; child-src 'none';">

Nagłówki

CSP można egzekwować lub monitorować za pomocą tych nagłówków:

  • Content-Security-Policy: Enforces the CSP; the browser blocks any violations.
  • Content-Security-Policy-Report-Only: Used for monitoring; reports violations without blocking them. Ideal for testing in pre-production environments.

Definiowanie zasobów

CSP ogranicza pochodzenie ładowanych treści, zarówno aktywnych, jak i pasywnych, kontrolując takie aspekty jak wykonywanie inline JavaScript oraz użycie eval(). Przykładowa polityka wygląda następująco:

bash
default-src 'none';
img-src 'self';
script-src 'self' https://code.jquery.com;
style-src 'self';
report-uri /cspreport
font-src 'self' https://addons.cdn.mozilla.net;
frame-src 'self' https://ic.paypal.com https://paypal.com;
media-src https://videos.cdn.mozilla.net;
object-src 'none';

Dyrektywy

  • script-src: Pozwala na określone źródła dla JavaScriptu, w tym URL-e, skrypty inline oraz skrypty wywoływane przez event handlery lub arkusze stylów XSLT.
  • default-src: Ustawia domyślną politykę pobierania zasobów, gdy brak jest konkretnych dyrektyw fetch.
  • child-src: Określa dozwolone zasoby dla web workers i osadzonej zawartości ramek.
  • connect-src: Ogranicza URL-e, które mogą być ładowane przy użyciu interfejsów takich jak fetch, WebSocket, XMLHttpRequest.
  • frame-src: Ogranicza URL-e dla frame'ów.
  • frame-ancestors: Określa, które źródła mogą osadzać bieżącą stronę, ma zastosowanie do elementów takich jak ,