React2Shell: 모든 Next.js 개발자가 지금 해결해야 할 중요한 RCE 취약점

발행: (2025년 12월 10일 오전 01:02 GMT+9)
9 min read
원문: Dev.to

Source: Dev.to

개요

중대한 원격 코드 실행(RCE) 취약점—CVE‑2025‑55182(또는 GHSA‑9qr9‑h5gf‑34mp)가 Next.js 애플리케이션에서 App Router를 사용하는 경우에 사용되는 React Server Components(RSC)에 영향을 미칩니다. 이 결함을 이용하면 공격자는 인증 없이 단일 조작된 HTTP 요청만으로 서버에서 임의의 JavaScript 코드를 실행할 수 있습니다. 영향을 받는 Next.js 버전은 15.0.0 부터 16.0.6까지이며, 여러 관련 React 패키지도 포함됩니다.

핵심 요점

  • CVSS 점수: 10.0 (치명적)
  • 익스플로잇이 공개된 날짜: 2025년 12월 4일.
  • 성공적인 악용 시 자격 증명 탈취, 암호화 채굴, 역쉘, 지속적인 백도어 설치가 가능함.

취약점 작동 방식

React Server Components는 Flight 프로토콜을 사용해 서버와 클라이언트 간 데이터를 직렬화·역직렬화합니다. 역직렬화 로직이 특수하게 조작된 multipart/form-data 페이로드를 처리할 때 프로토타입 체인을 잘못 탐색합니다. $‑접두 문자열을 통해 __proto__, constructor, prototype 참조를 주입하면 공격자는 객체 경계를 깨고 서버에서 임의 코드를 실행할 수 있습니다.

전형적인 공격 흐름:

Attacker → malicious multipart/form-data POST

Next.js server (RSC‑enabled route)

Flight protocol deserializes payload

Prototype chain traversal → arbitrary code execution

Server‑side RCE with application privileges

앱에서 서버 함수를 명시적으로 사용하지 않더라도, App Router(app/ 디렉터리)의 존재만으로도 취약한 엔드포인트가 활성화됩니다.

영향을 받는 패키지 및 버전

패키지취약 버전
react-server-dom-webpack19.0.0, 19.1.0, 19.1.1, 19.2.0
react-server-dom-parcel19.0.0, 19.1.0, 19.1.1, 19.2.0
react-server-dom-turbopack19.0.0, 19.1.0, 19.1.1, 19.2.0
Next.js (GHSA‑9qr9‑h5gf‑34mp)모든 안정 버전 15.0.0 – 16.0.6
Next.js canary≥ 14.3.0‑canary.77, 및 ≥ 15.6.0‑canary.58
RSC를 사용하는 기타 프레임워크react-router(불안정 RSC API), waku, @parcel/rsc, @vitejs/plugin-rsc, rwsdk

현재 사용 중인 버전 확인 방법

브라우저에서

// 배포된 Next.js 버전을 반환
next.version

프로젝트 파일에서

# package.json
cat package.json | grep '"next"'

# npm lockfile
npm ls next

# yarn
yarn why next

# pnpm
pnpm why next

Vercel 대시보드에 취약한 배포에 대한 배너가 표시될 수 있지만, 직접 확인하는 것이 좋습니다.

패치 및 업그레이드 매트릭스

현재 실행 중인 버전업그레이드 대상 버전
Next.js 15.0.x15.0.5
Next.js 15.1.x15.1.9
Next.js 15.2.x15.2.6
Next.js 15.3.x15.3.6
Next.js 15.4.x15.4.8
Next.js 15.5.x15.5.7
Next.js 16.0.x16.0.7
Next.js 14 캐너리(≥14.3.0‑canary.77)14.2.x 안정 버전으로 다운그레이드
Next.js 15 캐너리(<15.6.0‑canary.58)15.6.0‑canary.58 이상으로 업그레이드

자동 수정 (Vercel)

npx fix-react2shell-next

도구가 취약한 패키지를 스캔하고 자동으로 업그레이드합니다.

수동 업그레이드

# 패치된 버전으로 업데이트 (예시)
npm install next@15.3.6   # 필요한 목표 버전으로 교체

# lockfile 갱신
npm install

# 확인
npm ls next

package.json과 lockfile을 모두 커밋해 의존성 불일치를 방지하세요.

수정된 버전 배포

# Vercel CLI
vercel --prod

# CI/CD 사용 시
git add package.json package-lock.json
git commit -m "fix: patch React2Shell vulnerability (CVE-2025-55182)"
git push origin main

즉각적인 사후 대응 조치

만약 2025년 12월 4일 오후 1시 PT에 공개 익스플로잇이 등장한 이후에 프로덕션 앱이 노출되었다면, 환경 변수들이 탈취됐을 가능성을 가정하고 다음 순서대로 비밀을 교체하세요.

  1. 데이터베이스 자격 증명
  2. 서드파티 API 키(Stripe, SendGrid, AWS 등)
  3. OAuth 클라이언트 시크릿
  4. JWT 서명 키
  5. 내부 서비스 인증 토큰

Vercel 문서에 비밀 교체 단계별 가이드가 제공됩니다.

침해 징후(Indicators of Compromise)

로그 분석

  • 알 수 없는 경로로 들어오는 multipart/form-data POST 요청
  • 비정상적이거나 의심스러운 Content-Type 헤더
  • RSC 라우트에서 발생하는 500 오류 급증
  • 함수 타임아웃 증가(많은 익스플로잇은 조용히 완료)

런타임 이상 현상

  • 컨테이너 내부에 알 수 없는 프로세스 실행
  • 익숙하지 않은 IP 또는 도메인으로의 아웃바운드 연결
  • 169.254.169.254(클라우드 메타데이터 서비스)로의 DNS 조회
  • 트래픽과 무관한 급격한 CPU 사용량 상승

관찰된 사후 악용 행동

  • 자격 증명 탈취(환경 변수)
  • 암호화 채굴기 배포(종종 시스템 서비스로 위장)
  • 역쉘 구축
  • 지속적인 cron 작업 또는 프로세스 재시작 스크립트

위 징후가 발견되면 확인된 침해로 간주하고, 영향을 받은 시스템을 격리·로그를 보존·사고 대응 계획을 즉시 실행하세요.

방어‑심층 조치(임시)

조치 항목비고
웹 애플리케이션 방화벽(WAF)주요 제공업체(AWS WAF, Cloudflare, Fastly, Vercel)에서 알려진 익스플로잇 패턴을 차단하는 규칙을 출시했습니다. WAF는 많은 공격을 완화하지만 패치를 대체할 수는 없습니다.
배포 보호프리뷰/비프로덕션 배포에 인증을 활성화하세요(예: Vercel의 Standard Protection). 보호를 우회하는 공유 링크를 감사합니다.
네트워크 분리서버리스 함수나 컨테이너의 아웃바운드 트래픽을 필요한 엔드포인트로만 제한합니다.
런타임 모니터링CPU, 메모리, 네트워크 사용량 이상을 감지하는 이상 탐지 도구를 배포합니다.
최소 권한 비밀 관리비밀 관리자를 사용해 짧은 TTL을 가진 자격 증명을 저장하고 정기적으로 교체합니다.

요약 체크리스트

  • 프로덕션에서 사용 중인 Next.js 버전을 확인한다.
  • 위 매트릭스에 따라 패치된 버전으로 업그레이드한다.
  • npx fix-react2shell-next를 실행하거나 수동 업그레이드를 수행한다.
  • npm ls next로 업그레이드 여부를 검증한다.
  • 수정된 코드를 즉시 배포한다.
  • 잠재적으로 탈취된 모든 비밀을 교체한다.
  • 로그와 런타임 메트릭을 검토해 침해 징후를 찾는다.
  • 패치 중에는 임시 WAF 규칙 및 배포 보호를 적용한다.

패치된 Next.js 버전을 유지하고 비밀을 신속히 교체하는 것이 React2Shell RCE 위험을 완화하는 가장 효과적인 방법입니다.

Back to Blog

관련 글

더 보기 »

Next.js의 긴급 보안 업데이트

Next.js의 긴급 보안 업데이트를 위한 표지 이미지 https://media2.dev.to/dynamic/image/width=1000,height=420,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fd...

React 및 Next.js의 RCE 취약점

기사 URL: https://github.com/vercel/next.js/security/advisories/GHSA-9qr9-h5gf-34mp 댓글 URL: https://news.ycombinator.com/item?id=46136026 포인트: 26 Co...