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. 보안·cloudflare-blogCloudflare Blog·

    사이트 소유자를 위한 새 AI 트래픽 제어 옵션

    Cloudflare가 Content Independence Day 1주년을 맞아 웹사이트 소유자가 AI 트래픽을 목적별로 세분화해 제어할 수 있는 새 시스템을 공개했다. 기존 "AI 봇 차단" 토글을 넘어 Search·Agent·Training 세 카테고리로 봇을 분류하고, robots.txt에 콘텐츠 재사용 범위를 선언하는 새 use= 시그널을 도입했다. 멀티퍼포스 봇은 가장 제한적인 카테고리 규칙이 적용되며, 2026년 9월 15일부터 광고 페이지에 새 기본값이 적용된다.

    #web-security#bot-management#robots-txt+2
  2. 보안·cloudflare-blogCloudflare Blog·

    Cloudflare 앱 생태계 OAuth 전면 개방 — Hydra 마이그레이션 내막

    Cloudflare가 OAuth 인프라를 Hydra 1.X에서 2.X로 업그레이드하면서 자체 관리 OAuth를 전체 개발자에게 개방한 과정을 다룬다. 스키마 변경으로 인한 인덱스 락 문제, 블루-그린 배포 전략, 전환 중 revocation 큐 설계, 전환 후 리프레시 토큰 버그까지 실제 운영 사고와 해결을 상세히 기록했다.

    #database-migration#zero-downtime#oauth+2
  3. 보안·cloudflare-blogCloudflare Blog·

    양자 내성 암호화 행정명령(EO 14409) — 2030 전환 기한과 조직 대응 방안

    2026년 6월 22일 트럼프 대통령이 서명한 행정명령 EO 14409는 미 연방 기관에 2030년까지 암호화(키 교환) 전환, 2031년까지 디지털 서명 전환을 요구한다. Cloudflare는 이미 자사 네트워크 브라우저 트래픽의 2/3 이상을 PQC(Post-Quantum Cryptography)로 보호 중이며, 이 글은 행정명령의 기술적 함의와 조직이 지금 당장 해야 할 일을 정리한다.

    #tls#cryptography#post-quantum-cryptography+2