
React, NextJS 사용하는 회사 필독! 보안 취약점 및 패치 방법 정리 : CVE-2025-55182, 66478
Q1. 이번 React·NextJS 취약점(CVE-2025-55182 / CVE-2025-66478)은 어떤 문제인가요?
React Server Components(RSC) 관련 패키지에서 인증 없이 원격 코드 실행(RCE) 이 가능한 취약점으로, NextJS 프로젝트도 영향을 받을 수 있습니다.
Q2. 내 NextJS 프로젝트가 취약한 버전인지 어떻게 확인하나요?
npx next --version 또는 npm ls react-server-dom-* 명령으로 Next 버전과 RSC 관련 패키지 존재 여부를 확인할 수 있습니다.
Q3. 취약한 NextJS 버전은 무엇인가요?
Next.js 15.x, 16.x, 그리고 14.3.0-canary.77 이후 Canary 릴리스가 해당 취약점의 영향을 받습니다.
Q4. 이번 보안 이슈를 해결하려면 어떤 버전으로 패치해야 하나요?
NextJS는 15.5.7 및 16.0.7 등에서 취약점을 해결했습니다. npm install next@latest로 최신 안전 버전으로 업데이트하는 것을 권장합니다.
Q5. 패치를 당장 적용하기 어렵다면 어떻게 해야 하나요?
RSC 관련 엔드포인트 접근을 네트워크·미들웨어·WAF에서 차단하고 요청 검증을 강화하는 임시 방어 조치를 적용할 수 있습니다.
React, NextJS 는 버전을 확인하고 패치를 진행해야 합니다
핵심 요약
React 필수 패키지 내에 인증 없이 원격 코드 실행(RCE) 이 가능한 취약점이 공개되었습니다. 이 React 패키지는 인기 프레임워크인 NextJS 내부에서도 사용되고 있어, NextJS 기반 서비스는 반드시 버전 확인 및 패치가 필요합니다.
-
1.
npx next --version및npm ls react-server-dom-*명령으로 현재 Next 및 RSC 관련 패키지 버전을 즉시 확인합니다. -
2. 영향받는 경우 Next 16.0.7 / Next 15.5.7 등 패치 릴리스로 우선 업데이트 후, 로컬 빌드·테스트를 마친 뒤 배포합니다.
-
3. 당장 패치가 어려운 환경이라면, 네트워크·미들웨어·WAF 레벨에서 RSC 관련 엔드포인트 접근을 제한하고 요청 검증을 강화하는 임시 조치를 병행합니다.
NextJS – 영향을 받는 버전
다음 NextJS 버전이 이번 취약점의 영향을 받습니다.
-
Next.js 15.x
-
Next.js 16.x
-
Next.js 14.3.0-canary.77 및 이후 Canary 릴리스
버전 확인은 package.json 확인 또는 아래 명령어로 할 수 있습니다.
npx next --version
React – 영향을 받는 버전 및 관련 패키지
React Server Components 관련 취약점은 다음 React 버전에 해당합니다.
- React 19.0, 19.1.0, 19.1.1, 19.2.0
아래 패키지들이 관련되어 있습니다.
-
react-server-dom-webpack -
react-server-dom-parcel -
react-server-dom-turbopack
다음 명령어로 프로젝트에서 직접 사용 중인지 여부를 확인할 수 있습니다.
npm ls react-server-dom-parcel
npm ls react-server-dom-webpack
npm ls react-server-dom-turbopack
추가로, 해당 패키지가 어떤 의존 관계를 통해 포함되었는지는 다음 명령어로 확인합니다.
npm why react-server-dom-parcel
npm why react-server-dom-webpack
npm why react-server-dom-turbopack
취약점이 수정된 NextJS 버전
NextJS 측에서 공지한, 취약점이 해결된 버전은 다음과 같습니다.
-
Stable
-
15.0.5
-
15.1.9
-
15.2.6
-
15.3.6
-
15.4.8
-
15.5.7
-
16.0.7
-
-
Canary
-
15.6.0-canary.58 (15.x canary 라인)
-
16.1.0-canary.12 (16.x canary 라인)
-
운영 중인 서비스가 위 버전 이전을 사용 중이라면, 가급적 이번 라인업 중 하나로 업데이트하는 것을 권장합니다.
최신 버전으로 업데이트하는 방법 (해결 방법)
1. 최신 버전 확인
npm view next version
글 발행일(2025년 12월 7일) 기준 next@16.0.7 이 최신 버전이며, NextJS에서 발표한 취약점 대응 버전에 해당합니다.
2. 기존 패키지 정리 (프로젝트 루트에서)
의존성 꼬임을 줄이기 위해 기존 node_modules 및 package-lock.json 을 삭제한 뒤 재설치를 진행하는 것을 권장합니다.
rm -rf node_modules package-lock.json
Windows PowerShell 환경에서는 다음과 같이 실행합니다.
Remove-Item -Recurse -Force node_modules
Remove-Item -Force package-lock.json
3. NextJS 패치 진행
기본적인 NextJS 업데이트는 아래처럼 진행할 수 있습니다.
npm install next@latest
다만, 기존에 사용 중인 다른 패키지와의 호환성을 반드시 고려해야 합니다.
예를 들어 Weekerp에서는 글로벌 서비스를 위한 메시지 시스템으로 next-intl 을 사용 중인데, next 업데이트에 맞춰 다음과 같이 React·관련 패키지까지 함께 정리했습니다.
npm install next@latest react@18 react-dom@18 next-intl@latest @ant-design/nextjs-registry@latest
이미 React 18 기반 프로젝트라면 위와 같이 버전을 명시해 주는 편이 안전합니다.
팀 내에서 사용하는 ESLint, SWC, 번들러 플러그인 등과의 호환도 함께 확인하는 것을 추천합니다.
4. 설치된 패키지의 버전확인
설치가 끝났다면 실제로 어떤 버전이 올라갔는지 확인합니다.
npm list next
필요하다면 react, react-dom, next-intl 등도 함께 확인해 두는 것이 좋습니다.
5. 빌드 및 실행 테스트
최종적으로 빌드가 정상 동작하는지 확인합니다.
npm run build
-
로컬 빌드 성공
-
주요 페이지 및 API 라우트 정상 응답
-
RSC 관련 기능을 사용하는 경우, 해당 부분 렌더링·데이터 패칭 확인
정도까지 확인 후 배포하는 흐름을 추천합니다.
버전 패치 시 함께 고려해야 할 사항
ESLint 설정 변화 (Next 16)
Next 16부터는 next.config.ts 안에서 eslint 옵션을 설정하는 기능이 제거되었습니다. 따라서 기존에 아래와 같이 사용하던 설정은 삭제해야 합니다.
(기존 코드 - 예시)
const nextConfig: NextConfig = {
output: 'standalone',
productionBrowserSourceMaps: false,
reactStrictMode: false,
eslint: {
ignoreDuringBuilds: true,
},
compiler: {
styledComponents: {
ssr: true,
displayName: !isProd,
pure: true
},
...(isProd && {
removeConsole: {
exclude: ["error", "warn"],
},
}),
},
(기존 코드 - 삭제 후 )
const nextConfig: NextConfig = {
output: 'standalone',
productionBrowserSourceMaps: false,
reactStrictMode: false,
// --------------------------------- delete block --
// eslint: {
// ignoreDuringBuilds: true,
// },
// ---------------------------------------------------
compiler: {
styledComponents: {
ssr: true,
displayName: !isProd,
pure: true
},
...(isProd && {
removeConsole: {
exclude: ["error", "warn"],
},
}),
},
ESLint 무시 설정이 필요하다면, 이제는 별도의 ESLint 설정 파일(.eslintrc 등)과 CI 파이프라인 레벨에서 관리하는 것을 권장합니다.
본문의 용어 설명
CVE(Common Vulnerabilities and Exposures)
CVE는 전 세계 보안 취약점을 식별하기 위해 부여하는 고유 번호입니다.
예를 들어 CVE-2025-55182 같은 형식이죠.
이 번호가 붙는 순간,
-
어떤 취약점인지
-
어디에 영향을 미치는지
-
어떤 버전에서 발생하는지
전 세계 보안팀과 개발자들이 같은 기준으로 동일한 취약점을 이야기할 수 있게 됩니다.
CVSS(Common Vulnerability Scoring System)
CVSS는 공개된 취약점이 얼마나 위험한지 0~10점으로 평가한 국제 표준 점수입니다.
10점은 사실상 “가장 위험한 수준”을 의미합니다.
점수는 다음 요소를 종합해 계산돼요:
-
악용 난이도 (Exploitability)
-
영향 범위 (Impact)
-
네트워크 접근성 여부
-
사용자 개입 필요 여부 등
그래서 CVSS는 보안팀이 패치 우선순위를 결정할 때 가장 먼저 보는 지표입니다.
예: “CVSS 10점, 즉시 대응해야 하는 심각한 취약점”
마치며
이번 취약점은 기본 설정 상태의 React Server Components(RSC)·Next.js 환경에서도 원격 코드 실행(RCE)이 가능한 수준의 심각한 이슈입니다. 특히 취약점 공개 직후, 이를 악용해 볼 수 있는 POC 코드가 빠르게 공유되면서 실제 공격 시도 가능성도 같이 높아지고 있습니다.
그래서 다음 두 가지를 강하게 추천합니다.
- 내 서비스의 Next/React 버전 및
react-server-dom-*패키지 존재 여부를 즉시 확인 - 영향받는 버전이라면 가능한 한 빨리 패치 릴리스로 업데이트하고,
단기간 내 패치가 어렵다면 WAF·프록시·미들웨어 레벨에서 RSC 관련 경로를 제한하는 임시 방어선을 마련한다.
운영 중인 서비스의 규모가 커질수록, 이런 대형 취약점에 대한 대응 속도가 곧 서비스 신뢰도와 인시던트 비용을 가르는 포인트가 되니, 빠르게 조치하시길 권장합니다.
참고
[1] NextJS 보안권고 - https://nextjs.org/blog/CVE-2025-664
[2] React 공식 블로그 - React Server Components 관련 취약점 공지
[3] POC 코드 - https://github.com/whiteov3rflow/CVE-2025-55182-poc
함께 보면 좋은 글
우리 회사의 서버 비용, 잘 관리하고 있나요? 서비스 스케일업에 발맞추어 AWS S3 vs CloudFront(CDN)의 전송 속도와 요금을 비교한 글입니다.
이어서 읽기