CVE-2025-29927 — Next.js 내부 헤더 `x-middleware-subrequest` 의 검증 부재로 미들웨어 인증·인가 우회가 가능했던 취약점의 공개 포스트모텀이다. 2025년 2월 최초 신고부터 3월 17~18일 패치 배포까지의 타임라인과 근본 원인, 향후 대책을 상세히 다룬다.
핵심 포인트- 취약점 원리: Next.js 가 미들웨어 중복 실행 방지용으로 쓰는 `x-middleware-subrequest` 헤더를 외부에서 조작 가능. 이 헤더 포함 요청은 미들웨어 실행을 건너뛰어 인증·인가 체크 전면 우회
- 자체 호스팅(next start, standalone output)에서만 영향. Vercel·Netlify·Cloudflare Workers 는 라우팅 아키텍처 분리로 처음부터 보호
- 타임라인: 2월 27일 신고(12.x) → 3월 1일 전 버전 확대 → 3월 5일 조사 시작 → 3월 14일 유효 확인 → 3월 17~18일 15.2.3·14.2.25 패치 배포
- 패치 내용: x-middleware-subrequest 헤더 수신 시 유효성 검사·필터링 추가
- 재발 방지: 파트너 메일링 리스트 구축, GitHub private vulnerability report 일원화, LTS 정책 공개
상세 정리- 취약점 발견: 2월 27일 신고자가 12.x 대상으로 제보. 하위 버전 한정으로 오인해 초기 우선순위 낮게 배정
- 범위 확대: 3월 1일 동일 공격이 14.x·15.x 에도 동작한다는 추가 제보 → 3월 5일 엔지니어링 팀 전수 조사 시작
- 공격 메커니즘: x-middleware-subrequest 헤더가 있으면 재귀로 판단해 미들웨어를 건너뜀. 이 로직에 외부 헤더 위조 검증이 없었음
- 영향 범위 분리: next start/standalone 만 취약. Vercel 는 라우팅 레이어가 미들웨어와 분리된 아키텍처여서 이 헤더 신뢰 로직 미사용 → 영향 없음
- 패치 타임라인: 3월 17일 15.2.3, 3월 18일 14.2.25 배포. 이후 13.5.9, 12.3.5 backport
- 임시 대응: 패치 전까지 CDN·프록시 레이어에서 x-middleware-subrequest 헤더 필터링 권고
- 재발 방지책: 파트너사 사전 알림용 보안 메일링 리스트 신설, GitHub Security Advisories 로 신고 창구 일원화, LTS 지원 정책 공개, 내부 전용 헤더의 공식 API 문서화 로드맵 수립
왜 읽나Next.js 를 자체 서버에서 운영하는 팀이 이번 취약점의 근본 원인과 아키텍처적 영향 범위를 이해하고, 향후 유사 헤더 기반 취약점 대비 방어 설계 참고 사례로 활용할 수 있다.