본문 바로가기

웹해킹

Content Security Policy & CSP Bypass

CSP는 xss나 데이터를 삽입하는 공격이 발생했을 때 피해를 줄이고 공격 시도를 보고 받을 수 있게

하기 위해 새롭게 추가된 보안계층이다.

 

CSP는 웹 페이지에 사용될 수 있는 자원의 위치, 출처에 제약을 걸 수 있다.

Content-Security-Policy: default-src 'self' https://example.dreamhack.io

HTTP 헤더를 이용한 CSP 헤더 정의 방법이다.

<meta http-equiv="Content-Security-Policy" content="default-src 'self' https://example.dreamhack.io">

비슷하게 meta 태그로도 정의할 수 있다.

 

CSP는 scipt 태그 내에 코드를 삽입하는 것 포함, 이벤트 핸들러 속성, URL 스킴 등을

인라인 코드로 간주하고 허용하지 않는다.

또한, eval, setTimeout 등 문자열로부터 코드를 실행하는 함수의 실행을 유해하다고 간주해 차단한다.

 

Policy-directive는 directive, value 형태로 구성된다.

directive는 지시문으로, 어떤 리소스에 대한 출처를 제어할지 결정한다.

이런 것들이 있다.

value에는 리소스의 출처를 정의한다.

 

CSP 구문이 잘못되었을 경우 이를 우회할 수 있다.

CSP에서 허용하는 출처가 JSONP API를 지원하면, callback 파라미터에 원하는 스크립트를 삽입할 수 있다.

예를 들어 *.google.com을 허용하면

https://accounts.google.com/o/oauth2/revoke?callback=alert(1);

이런 식으로 요청을 할 수 있다.

 

nonce 예측을 통해서도 우회를 할 수 있다.

nonce가 요청을 보낼 때마다 같은 값이 반환되는 경우에 nonce 값을 알아내서 

<script nonce="{고정된 nonce 값}">alert(1);</script>

이런 식으로 사용할 수 있다.

 

HTML 파일에서 url을 통해 파일을 읽어오거나 할 때 base로 지정된 url을 기준으로 읽어온다.

<base href="https://malice.test/xss-proxy/">

이런 코드를 넣게 되면 HTML 태그 상에서 읽어오는 경로를 바꿀 수 있다.

이를 막기 위해 CSP에서 base-uri 를 none으로 설정해야 한다.

 

 

'웹해킹' 카테고리의 다른 글

드림핵 CSP Bypass Advanced 롸업  (0) 2023.11.25
드림핵 CSP Bypass 롸업  (0) 2023.11.25
드림핵 XSS Filtering Bypass Advanced 롸업  (0) 2023.11.21
드림핵 XSS Filtering Bypass 롸업  (0) 2023.11.21
XSS Filtering Bypass  (0) 2023.11.20