웹 캐시 포이즈닝: CDN을 공격 표면으로 만들기
웹 캐시는 성능을 올리지만, 잘못 설정되면 캐시 포이즈닝의 표적이 된다. 핵심은 “같은 URL로 서로 다른 응답을 만들고, 그 응답을 캐시에 박아버리는 것”이다.
기본 시나리오
- 서버가
X-Forwarded-Host,X-Host,X-Original-URL같은 헤더를 신뢰 - 캐시 키가 URL/쿼리만 보고 헤더를 무시
- 공격자는 헤더로 오픈 리다이렉트, XSS, 캐시 분기 유도
예: 프록시가 X-Forwarded-Host를 기준으로 절대 URL을 생성하면, 응답에 공격자 도메인이 박힌다. 이 응답이 캐싱되면, 다음 방문자는 정상 URL에서 악성 응답을 받는다.
CTF/실전 체크리스트
Vary헤더 확인 (없으면 캐시 키가 좁음)Cache-Control: public+ 긴 TTL- 캐시가 에러 응답까지 저장하는지
방어 포인트
- 캐시 키에 신뢰 헤더 포함
Vary정확히 설정- 프록시/앱 레벨에서 헤더 화이트리스트
CDN은 방패이자 칼이다. 캐시 정책을 모르면, 방어가 아니라 공격 표면이 된다.