csp 정책에 대해 공부하고, 직접 exploit을 해볼 수 있었던 문제.

스스로 공부하고, 문제를 풀 수 있어 많은 도움이 되었다.

출처

https://dreamhack.io/

https://www.hahwul.com/2019/01/27/csp-bypass-technique-xss/

CSP란,


CSP(Content Security Policy, 컨텐츠 보안 정책)는 XSS 공격이 발생하였을 때 그 피해를 줄이고 웹 관리자가 공격 시도를 보고받을 수 있도록 하는 기술이다.

CSP 헤더는 다음과 같은 형태를 띈다.(실제 문제에서의 CSP 헤더)

Content-Security-Policy: connect-src 'none'; font-src 'none'; frame-src 'none'; img-src 'self'; manifest-src 'none'; media-src 'none'; object-src 'none'; script-src 'unsafe-inline'; style-src 'self'; worker-src 'none'; frame-ancestors 'none'; block-all-mixed-content;

default-src 와 같은 지시어와 self, none, naver.com 과 같은 출처가 쌍을 이루어 등장하고, 지시어끼리는 ;를 이용해서 구분한다.

지시어는 다음과 같은 의미를 지닌다.

* default-src : 모든 리소스에 대한 정책(아래 것들 다 포함)
* script-src : Javascript 등 웹에서 실행 가능한 스크립트에 대한 정책
* object-src : 플러그인, 오브젝트에 대한 정책
* style-src : style, 즉 css에 대한 정책
* img-src : 이미지
* media-src : video, audio
* frame-src : iframe, X-Frame 헤더랑은 비슷한 역할을 하지만, 약간 다르죠.
* font-src : font
* connect-src : script src로 불러올 수 있는 url에 대한 정책
* form-action : form 태그 내 action 부분에 대한 정책
* sandbox : HTML 샌드박스
* script-nonce : 위에 script-src + 아래쪽에 none 이 포함되는 정책, 약간 강한..
* plugin-types : 로드할 수 있는 플러그인 타입, 위에 object-src와 접점
* reflected-xss : X-XSS-Protection header와 동일한 효과, 실제로 이게 적용된 사이트는 아직 본적이 없네요..ㅋㅋ
* report-uri : 정책 위반 케이스가 나타났을 때 내용을 전달할 URL

문제 풀이, CSP 헤더 분석