CSP 우회 노트: nonce, strict-dynamic, 그리고 실수들
CSP는 XSS를 줄이지만, 설정 실수는 바로 우회 포인트가 된다. CTF에서도 자주 보이는 핵심 패턴만 정리한다.
자주 나오는 우회 지점
- nonce 재사용: 템플릿 캐시로 동일 nonce가 재사용되면 공격자가 스크립트 삽입 가능
- strict-dynamic 오해: 신뢰된 스크립트가 동적으로 로드하는 스크립트까지 허용됨
- unsafe-inline + nonce 혼합: 둘 다 있으면 사실상 inline 허용
- JSONP/할당형 스크립트:
callback=형태의 JSONP는 CSP 우회 경로
빠른 점검 체크리스트
- 응답마다 nonce가 바뀌는지 확인
script-src에 와일드카드가 있는지 확인- 서드파티 스크립트가 동적 로드하는지 확인
방어의 핵심은 “nonce는 항상 새로, 정책은 최소 권한”이다. CSP는 규칙 그 자체보다 운영 습관에서 무너진다.