캐시 포이즈닝 - Unkeyed Headers (WEB-45)

WEB-45 Cache Poisoning

캐시 포이즈닝 (Unkeyed Headers):
웹 애플리케이션이 응답을 캐시할 때, 캐시 키에 특정 헤더를 포함하지 않으면 서로 다른 Host/X-Forwarded-For 값이 같은 캐시 항목을 사용합니다. 공격자가 독성 응답을 먼저 캐시하면, 이후 정상 사용자가 그 응답을 받게 됩니다.

공격 시나리오

1단계: 공격자가 악의적 Host로 요청
GET /api/config HTTP/1.1
Host: attacker.com


2단계: 서버가 위험한 응답을 캐시
Cache-Key = "/api/config" (Host 무시!)
캐시 저장: { key: "/api/config", content: "악의적 응답" }

3단계: 정상 사용자가 요청
GET /api/config HTTP/1.1
Host: example.com


4단계: 취약한 캐시 반환
응답 = "악의적 응답" (캐시 키 "/api/config"에서 조회)
정상 사용자가 독성 콘텐츠를 받음!

Step 1: 악의적 응답 캐시하기

Step 2: 정상 Host로 요청 (캐시된 악의적 응답 확인)