Skip to main content

웹 캐시 포이즈닝: 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은 방패이자 칼이다. 캐시 정책을 모르면, 방어가 아니라 공격 표면이 된다.