Content Security Policy (CSP) Bypass

Reading time: 30 minutes

tip

AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE) Azure 해킹 배우기 및 연습하기: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks 지원하기

CSP란 무엇인가

Content Security Policy (CSP)은 주로 cross-site scripting (XSS)와 같은 공격으로부터 방어하기 위한 브라우저 기술로 알려져 있습니다. 브라우저가 안전하게 로드할 수 있는 경로와 출처를 정의하고 명시함으로써 동작합니다. 이러한 리소스에는 이미지, 프레임, JavaScript 등 다양한 요소가 포함됩니다. 예를 들어, 정책은 같은 도메인 (self)으로부터의 리소스 로드 및 실행을 허용할 수 있으며, 인라인 리소스와 eval, setTimeout, setInterval과 같은 함수로 문자열 코드를 실행하는 것을 포함할 수 있습니다.

CSP는 **응답 헤더(response headers)**를 통해 구현되거나 HTML 페이지에 meta 요소를 삽입하는 방식으로 적용됩니다. 브라우저는 이 정책을 기반으로 규정을 강제하며, 위반이 감지되면 즉시 차단합니다.

  • 응답 헤더를 통해 구현:
Content-Security-policy: default-src 'self'; img-src 'self' allowed-website.com; style-src 'self';
  • meta tag로 구현됨:
xml
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; img-src https://*; child-src 'none';">

Headers

CSP는 다음 헤더로 강제하거나 모니터링할 수 있습니다:

  • Content-Security-Policy: CSP를 강제합니다; 브라우저가 위반을 차단합니다.
  • Content-Security-Policy-Report-Only: 모니터링용으로 사용되며, 위반을 차단하지 않고 보고만 합니다. 프로덕션 이전 환경에서 테스트할 때 이상적입니다.

Defining Resources

CSP는 액티브 및 패시브 콘텐츠 로딩의 출처를 제한하여 inline JavaScript 실행과 eval() 사용 같은 항목을 제어합니다. 예제 정책은:

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';

지시자

  • script-src: JavaScript에 대해 특정 소스(예: URLs, 인라인 script, 이벤트 핸들러나 XSLT 스타일시트에 의해 트리거되는 스크립트 등)를 허용합니다.
  • default-src: 특정 fetch 지시자가 없을 때 리소스 가져오기에 대한 기본 정책을 설정합니다.
  • child-src: web workers와 임베디드 프레임 콘텐츠에 허용되는 리소스를 지정합니다.
  • connect-src: fetch, WebSocket, XMLHttpRequest 같은 인터페이스로 로드할 수 있는 URL을 제한합니다.
  • frame-src: 프레임에 대한 URL을 제한합니다.
  • frame-ancestors: 현재 페이지를 임베드할 수 있는 출처를 지정합니다(예: ,