pile·
보안·vercel-blogVercel Blog·

React Router CVE-2025-43864/43865: 캐시 포이즈닝과 저장형 XSS 취약점 분석

React Router 7.0.0–7.5.1과 이를 기반으로 한 Remix에서 HTTP 헤더를 통한 캐시 포이즈닝과 저장형 XSS 공격이 가능한 심각한 취약점 두 건(CVE-2025-43864, CVE-2025-43865)이 공개됐다. 공격자가 `X-React-Router-Spa-Mode` 및 `X-React-Router-Prerender-Data` 헤더를 조작하면 서버 응답을 변조해 캐시에 악성 콘텐츠를 주입할 수 있으며, 이후 모든 방문자가 피해를 입는다. Vercel은 자사 인프라의 방화벽 레이어에서 두 헤더를 자동 제거하고 CDN 캐시를 전면 초기화하는 방식으로 선제 대응했다.

핵심 포인트
  • CVE-2025-43864: `X-React-Router-Spa-Mode` 헤더 조작 → 서버가 SPA 모드로 강제 동작 → 서버 사이드 렌더링 우회 → 캐시 포이즈닝
  • CVE-2025-43865: `X-React-Router-Prerender-Data` 헤더에 임의 JSON 주입 → 응답에 포함된 채 캐시 저장 → 저장형 XSS 성립
  • 영향 범위: React Router 7.0.0–7.5.1 및 Remix(React Router 의존); 한 번 오염으로 이후 모든 방문자 피해
  • 공식 보안 권고에서 "저장형 XSS를 포함한 캐시 포이즈닝이 매우 쉽다(trivial)"고 명시
  • Vercel 플랫폼: 방화벽에서 두 헤더 자동 스트리핑 + CDN 캐시 전면 초기화로 인프라 레벨 차단
  • 근본 수정: React Router 7.5.2+ 업그레이드 필수; 외부 CDN(Cloudflare 등) 사용자는 업그레이드 후 캐시 수동 퍼지 필수
상세 정리
  • 두 취약점 모두 HTTP 요청 헤더를 통해 서버 사이드 렌더링 로직을 직접 제어할 수 있는 구조적 결함에서 비롯됨
  • `X-React-Router-Spa-Mode: 1` 헤더 전송 시 서버가 SPA 모드로 동작 → 서버 렌더링 없이 빈 HTML 셸 반환 → 이 응답이 캐시되면 정상 사용자도 빈 페이지 수신
  • `X-React-Router-Prerender-Data` 헤더에 공격자가 임의의 JSON 데이터 삽입 → 해당 데이터가 응답 HTML에 인라인 삽입 → 캐시에 저장 → 저장형 XSS 완성
  • 캐시 레이어가 있는 모든 배포 환경에서 포이즈닝 가능 — Vercel CDN, Cloudflare, Nginx 캐시, Varnish 등
  • 포이즈닝 이후 캐시 무효화 전까지 해당 경로를 방문하는 모든 사용자가 공격자가 제어하는 콘텐츠를 수신
  • Vercel은 방화벽 레이어에서 두 헤더를 자동 스트리핑하여 프레임워크 패치 없이도 헤더 기반 공격 벡터를 원천 차단
  • Vercel CDN 캐시 전체 초기화 완료 — 취약점 공개 이전에 이미 오염됐을 수 있는 캐시 항목 제거
  • React Router 7.5.2에서 서버 렌더링 로직의 헤더 기반 분기를 제거해 취약점 근본 수정
  • Vercel 이외 환경(자체 호스팅, Cloudflare Workers, AWS Lambda 등)은 반드시 7.5.2+로 업그레이드해야 보호 가능
  • 외부 CDN 사용자는 업그레이드 후 캐시를 직접 퍼지해야 함 — 이미 포이즈닝됐을 가능성 있음
  • Remix는 내부적으로 React Router를 사용하므로 동일하게 영향받음 — `package.json`의 `react-router` 의존성 버전 확인 필수
  • 보안 대응이 인프라 레이어(헤더 제거·캐시 퍼지)와 프레임워크 레이어(7.5.2 패치) 두 단계로 분리된 점이 심층 방어(defense-in-depth) 아키텍처의 실제 사례
  • 이번 사례는 신뢰할 수 없는 HTTP 헤더를 서버 렌더링 로직 제어에 그대로 사용하면 안 된다는 원칙을 재확인시켜줌
왜 읽나

React Router 7.x 또는 Remix 기반 SSR 앱을 운영 중이거나 CDN 캐시 레이어를 두고 있다면 즉시 7.5.2+ 업그레이드가 필요하며, 외부 CDN 사용자는 업그레이드만으로 부족하고 캐시 퍼지까지 완료해야 한다. Vercel의 인프라 레벨 선제 대응 방식은 CDN·방화벽 기반 보안 아키텍처 설계의 현실적인 참고 사례로도 가치 있다.

vercel-blog
Vercel Blog 블로그
원문은 여기서 이어서 읽을 수 있어요
원문 읽기
읽음 (0)

이 글과 비슷한

  1. 보안·gitlab-engGitLab Blog·

    Serena MCP 에이전트의 치명적 원격 코드 실행 취약점 분석

    GitLab 보안팀이 AI 코딩 에이전트 Serena(월 PyPI 다운로드 13.6만 건)에서 치명적 원격 코드 실행 취약점을 발견했다. Jinja2 비샌드박스 환경과 신뢰 모델의 미검사 경로가 결합해 개발자가 악의적 저장소를 열기만 해도 코드가 실행된다. serena-agent 1.7.0에서 SandboxedEnvironment 교체로 수정 완료됐다.

    요약 이어보기
    #mcp#security#rce+2