[워게임 공부]CSP Bypass
CSP란
Content Security Policy (CSP, 컨테츠 보안 정책)은 웹 페이지에서 검색하고 실행할 수 있는 리소스를 정의하는 보안 계층이다. XSS나 데이터를 삽입하는 공격이 발생하였을 때 피해를 줄이고 웹 관리자가 공격 시도를 보고 받을 수 있다.
형식
Content-Security-Policy: <policy-directive>; <policy-directive>
<policy-directive>는 <directive> <value> 형태로 구성된다. <directive>는 지시문으로 칸테츠 내에서 로드하는 리소스를 세분화해 어떤 리소스에 대한 출처를 제어할지 결정한다. <value> 부분에는 <directive>에서 정의한 리소스의 출처를 정의한다.
<directive>의 종류
default-src : -src로 끝나는 모든 리소스의 기본 동작을 제어함. 만약 CSP 구문 내에서 지정하지 않은 지시문이 존재하면 default-src 정의를 따름
img-src : 이미지를 로드할 수 있는 출처 제어
script-src : 스크립트 태그 관련 권한과 출처를 제어
<value>의 종류
self : 페이지의 현재 출처내에서 로드하는 리소스만 허용
none : 모든 출처를 허용하지 않음
unsafe-inline : 예외적으로 인라인 코드의 사용을 허용
CSP Bypass
웹 사이트가 파일 업로드, 다운로드 기능을 제공하는 경우, 공격자가 다운로드 받을 때 특정한 스크립트를 띄우도록 할 수 있다.
우회 방법
- 신뢰하는 도메인 업로드
- 특정 도메인에 대한 출처가 혀용된 CSP를 우회하는 가장 쉬운 방법
- 신뢰되는 출처에 파일 업로드
- JSONP API
- nonce 예측 가능
- base uri 미지정
2,3,4는 1과 비슷?하다.
Content-type은 중요하지 않기 때문에 어떤 형태로도 파일이 올라가면 되고 이는 스크립트를 담은 response가 필요하다는 의미
2,3,4는 요청 url과 return 값에 callback function을 남긴다. 이는 callback 데이터가 들어갈 function을 지정한다는 것이다.