Next.js 개발사 Vercel이 2026년 11월 3일 예고했던 11월 정기 보안 릴리스를 공개했습니다. 수정판은 16.4.5(Active LTS)와 15.5.29(Maintenance LTS) 두 갈래로 나왔습니다. 가장 심각한 문제는 캐시 컴포넌트를 켠 상태에서 한 테넌트의 캐시 데이터가 다른 테넌트에게 노출될 수 있는 높음 등급 취약점이며, 그 외 캐시 오염, 쿠키 값 노출, SVG 차단 우회 등 중간 등급 6건이 함께 수정됐습니다.

핵심 요약
- Vercel이 2026년 11월 3일 Next.js 보안 릴리스를 공개했고, 수정판은 16.4.5와 15.5.29입니다.
- 높음 등급 1건은 'use cache' 함수를 unstable_cache 안에서 함께 호출할 때 다른 루트 파라미터(테넌트·언어)의 캐시 결과가 새어 나가는 문제입니다.
- 중간 등급 6건에는 자체 호스팅 환경의 공유 셸 캐시 오염, 엣지 라우트의 HttpOnly 쿠키 값 노출, 이미지 최적화의 SVG 차단 우회가 포함됩니다.
- 10월 27일 사전 공지 때는 중간 등급 7건이라고 했지만, 실제 공개에서는 그중 1건이 높음 등급으로 분류됐습니다.
무슨 일이 있었나
Next.js를 만드는 Vercel은 2026년 11월 3일 공식 블로그에 '11월 2026 보안 릴리스'를 게시했습니다. 한 주 전인 10월 27일 사전 공지에서 11월 3일 화요일에 보안 패치를 내겠다고 예고했고, 예정대로 공개한 것입니다. 수정판은 Active LTS(현행 장기 지원) 라인의 16.4.5와 Maintenance LTS(유지 보수 장기 지원) 라인의 15.5.29입니다. Vercel은 애플리케이션의 보안을 유지하려면 Next.js 의존성을 패치하라고 권고했습니다.
높음 등급으로 분류된 문제는 캐시 컴포넌트(Cache Components) 기능을 켠 애플리케이션에서 발생합니다. 같은 'use cache' 함수를 렌더링 중 직접 호출하면서 동시에 unstable_cache 안에서도 호출하고, 그 함수가 루트 파라미터(루트 레이아웃의 경로 변수, 예를 들어 언어 코드나 테넌트 식별자)를 읽는 경우가 조건입니다. 프로세스가 막 시작돼 캐시가 비어 있는 시점에 두 호출이 겹치면, unstable_cache 쪽 호출이 루트 파라미터 검사를 거치지 않고 다른 요청의 결과를 받아 저장할 수 있습니다. 그 뒤로는 캐시가 갱신되거나 비워질 때까지 다른 테넌트의 데이터가 그대로 제공됩니다. GitHub 권고문(GHSA-mfr8-8qww-v76h)은 이 경합 상황 밖에서는 'use cache'를 unstable_cache 안에 두는 것 자체가 오류를 내므로, 이런 중첩을 피하는 것이 완전한 우회책이라고 설명합니다.
중간 등급 문제 중 캐시 관련은 세 건입니다. 중첩된 'use cache' 함수에서 안쪽 함수가 루트 파라미터를 읽고 느린 비동기 값을 뒤늦게 돌려줄 때, 바깥 함수의 캐시 항목이 의존성 기록 전에 저장돼 다른 테넌트·사이트·언어용 콘텐츠가 재사용될 수 있는 문제가 있습니다. 또 서로 다른 바이너리 인자가 같은 캐시 식별자를 만들어, 그 인자로 사용자를 구분하던 애플리케이션에서 다른 사용자의 결과를 받거나 자기 결과를 다른 사용자에게 보여 줄 수 있는 문제도 있습니다. 세 번째는 next start로 직접 호스팅하면서 캐시 컴포넌트를 켜고 Partial Prefetching을 끄거나 설정하지 않은 경우로, 인증되지 않은 요청이 특정 모양의 URL로 공유 페이지 셸을 오염시켜 다른 URL에 잘못된 서버 렌더링 결과나 지속적인 404 응답을 일으킬 수 있습니다. Vercel은 빌드 시 생성된 값이나 Partial Prefetching을 켠 구성에서는 보고된 테스트상 영향이 없었다고 밝혔습니다.
나머지 세 건은 응답 처리와 이미지 관련입니다. 자체 호스팅 애플리케이션이 외부에서 가져온 Response 객체를 그대로 돌려줄 때, 압축을 푼 본문에 원래 압축 응답의 헤더가 붙어 나갈 수 있고, HTTP/1.1 파이프라인 요청을 한 연결에 모아 처리하는 리버스 프록시 뒤에서는 응답이 다른 클라이언트에게 전달될 수 있습니다. App Router의 Edge 라우트 핸들러와 Pages Router의 Edge API 라우트에서 NextResponse.cookies.set()으로 쿠키를 설정하면, 내부 헤더인 x-middleware-set-cookie에 쿠키 값이 담겨 같은 출처의 자바스크립트가 HttpOnly 쿠키까지 읽을 수 있는 문제도 있습니다. Node.js 런타임의 라우트 핸들러나 cookies().set()을 쓰는 경우에는 재현되지 않았습니다. 이미지 최적화에서는 허용된 출처의 이미지가 AVIF로 잘못 분류돼 images.dangerouslyAllowSVG를 false로 둔 설정을 우회하고 SVG 파서에 도달할 수 있는 문제가 수정됐습니다. Vercel은 이 건이 그 자체로 크로스 사이트 스크립팅이나 원격 코드 실행을 보여 주지는 않는다고 적었습니다.
왜 중요한가
이번 릴리스의 핵심은 '캐시가 경계를 넘는다'는 점입니다. 한 테넌트, 한 언어, 한 사용자를 위해 만든 콘텐츠가 다른 쪽에 그대로 보이는 문제는 외부 공격자가 코드를 집어넣는 유형이 아니라, 애플리케이션이 스스로 만든 정상 콘텐츠를 잘못된 상대에게 재사용하는 유형입니다. 그래서 웹 방화벽이나 입력 검증으로는 막기 어렵고, 프레임워크 자체를 패치하는 것 외에 대안이 거의 없습니다.
여러 기관이나 언어를 한 코드베이스로 운영하는 멀티 테넌트 구조, 다국어 사이트, 로그인 사용자별로 다른 화면을 캐시하는 사이트가 특히 해당합니다. 캐시 컴포넌트는 Next.js 16에서 정식으로 도입된 기능이어서, 최근에 성능을 위해 이 기능을 켠 사이트일수록 점검 대상이 됩니다.
Vercel이 아닌 자체 서버에 next start로 배포하는 경우에 한정된 문제가 두 건 포함됐다는 점도 눈여겨볼 만합니다. 국내 기관 홈페이지는 보안 정책상 내부 서버나 국내 클라우드에 직접 호스팅하는 경우가 많아, 관리형 플랫폼에서는 영향이 없다는 설명을 그대로 믿고 넘어가면 안 됩니다.
Next.js는 이번처럼 보안 패치 날짜를 미리 예고하고 LTS 두 라인에 동시에 내는 방식을 쓰고 있습니다. 운영 담당자 입장에서는 패치 일정을 사전에 알 수 있다는 장점이 있지만, 그만큼 공개 직후 취약점 내용이 널리 알려지므로 적용을 미룰수록 노출 기간이 길어집니다.
기관·기업 홈페이지 담당자가 볼 점
홈페이지가 Next.js로 만들어졌다면 먼저 지금 쓰는 버전을 확인하는 것이 출발점입니다. 16 계열이면 16.4.5 이상, 15 계열이면 15.5.29 이상이 수정판입니다. 14 이하 버전은 이번 릴리스에서 수정판이 나오지 않았으므로, 지원되는 LTS 라인으로 올리는 계획이 필요합니다.

외주 개발사가 유지 보수를 맡고 있다면 '이번 Next.js 11월 보안 릴리스가 적용됐는지'를 문서로 확인해 두는 편이 좋습니다. 특히 캐시 컴포넌트 사용 여부, 자체 서버 배포 여부, Edge 런타임에서 쿠키를 설정하는 코드가 있는지는 담당자가 질문만 던져도 개발사가 바로 답할 수 있는 항목입니다.
서버에 직접 배포한 사이트는 패치 후 캐시를 비우고 재시작해야 이미 오염됐을 수 있는 캐시 항목이 정리됩니다. 또 리버스 프록시(Nginx 등)가 백엔드와 HTTP/1.1 파이프라인 연결을 쓰는지도 함께 확인하면 응답 혼선 문제의 영향 범위를 좁힐 수 있습니다.
이미지 최적화 기능으로 외부 출처 이미지를 받아 쓰는 사이트는 허용 출처 목록(images.remotePatterns)이 꼭 필요한 도메인만 담고 있는지 다시 보는 것이 좋습니다. 이번 SVG 우회 문제도 허용된 출처 안에서만 성립하므로, 출처 목록을 좁히는 것이 가장 단순한 완화책입니다.
- package.json과 실제 설치된 Next.js 버전을 확인하고, 16.4.5 또는 15.5.29 이상으로 올립니다.
- next.config에 cacheComponents 설정이 켜져 있는지, 'use cache'와 unstable_cache를 함께 쓰는 코드가 있는지 개발사에 확인합니다.
- 자체 서버에 next start로 배포 중이면 패치 후 .next 캐시를 지우고 프로세스를 재시작합니다.
- Edge 런타임 라우트에서 NextResponse.cookies.set()으로 로그인 쿠키를 설정하는 코드가 있는지 점검합니다.
- images.remotePatterns 허용 출처를 꼭 필요한 도메인으로 줄입니다.
출처
- November 2026 Security Release – Next.js (Vercel), 2026-11-03
- Upcoming Next.js November Security Release – Next.js (Vercel), 2026-10-27
- GHSA-mfr8-8qww-v76h: Cross-tenant cache disclosure when combining unstable_cache and use cache – GitHub Security Advisories (vercel/next.js), 2026-11-03
공개된 자료를 바탕으로 VENOX가 정리한 글입니다. 세부 내용과 최신 변경 사항은 출처 원문을 확인해 주세요.
관련: VENOX CMS · 홈페이지·CMS 구축 · 도입 문의