Next.js App Router 15.3.0~15.3.2 및 Vercel CLI 41.4.1~42.2.0에서 미들웨어가 리라이트/리다이렉트를 수행할 때 캐시 버스팅 파라미터가 제거되면서 RSC 페이로드와 HTML 응답이 동일 캐시 키를 공유하는 캐시 포이즈닝 취약점이 발견됐다. Vercel 호스팅은 브라우저 캐시 수준에 그치지만 self-hosted + 외부 CDN 환경에서는 CDN 포이즈닝으로 확대될 수 있다.
핵심 포인트- 영향 버전: Next.js App Router 15.3.0~15.3.2, Vercel CLI 41.4.1~42.2.0.
- 원인: 미들웨어 리다이렉트 시 캐시 버스팅 파라미터 탈락 → RSC 페이로드와 HTML 응답 간 캐시 키 구분 실패.
- Vercel 호스팅: 브라우저 캐시만 영향. 자체 호스팅 + 외부 CDN: CDN 전체 포이즈닝 위험.
- 즉시 해결책: Next.js 15.3.3 업그레이드 (Vary 헤더 올바르게 설정됨).
- 임시 대응: Vary 헤더 수동 추가 또는 미들웨어 리다이렉트에 유니크 캐시버스팅 파라미터 삽입.
상세 정리- 취약점 메커니즘: 미들웨어가 리라이트/리다이렉트 처리 시 Next.js 캐시 버스팅 파라미터가 제거되어 RSC와 HTML이 같은 캐시 키로 저장됨.
- 영향 범위: 미들웨어에서 리라이트/리다이렉트를 사용하는 프로젝트. 미들웨어 미사용 시 무관.
- Vercel 환경 제한: Vercel 인프라가 RSC/HTML를 CDN 레벨에서 구분하므로 브라우저 캐시 오염만 발생.
- 자체 호스팅 위험: 외부 CDN이 RSC/HTML 콘텐츠 타입을 캐시 키로 구분하지 않으면 CDN 전체가 오염된 응답을 캐싱함.
- 수정 내용(15.3.3): Vary: RSC, Next-Router-State-Tree, Next-Router-Prefetch 헤더를 올바르게 설정하여 응답 유형별 캐시 키 분리 보장.
- 임시 해결 1: 응답에 Vary 헤더(RSC, Next-Router-State-Tree, Next-Router-Prefetch) 수동 추가.
- 임시 해결 2: 미들웨어 리다이렉트에 유니크 캐시버스팅 검색 파라미터를 추가하여 캐시 키 자연 분리.
- 공개 일자: 2025-07-03. 발견자: Aaron Brown, Zack Tanner (Vercel 내부팀).
왜 읽나Next.js App Router + 미들웨어를 사용하는 모든 프로젝트에서 15.3.3 업그레이드 또는 Vary 헤더 추가 조치가 필요하다.