8P by GN⁺ 2일전 | ★ favorite | 댓글 5개
  • React 서버 컴포넌트에서 인증 없이 임의 코드를 실행할 수 있는 원격 코드 실행(RCE) 취약점이 발견되어 즉시 업그레이드 필요
  • Next.js도 영향을 받으며, App Router 기능을 사용하는 경우 취약함. Next.js는 이를 CVE-2025-66478로 추적 중임
  • 취약점의 근본 원인은 서버 측 프로토타입 오염(server-side prototype pollution) 으로, 공격자가 JavaScript 객체의 프로토타입을 조작해 child_process.execSync 등으로 명령 실행 가능
  • 공개 PoC(개념증명) 코드가 빠르게 확산되었고, Datadog은 12월 5일 기준 800개 이상의 IP에서 실제 공격 시도를 탐지함
  • CVSS 점수 10점으로 평가된 이 취약점은 Next.js 15.x~16.x 버전에서 특히 심각하며, 최신 패치 적용이 필수적임

주요 취약점 개요

  • 12월 3일 React Server Components에서 인증 없이 임의 코드 실행이 가능한 취약점이 발견되어 CVE-2025-55182로 등록
    • 취약점은 서버 측에서 실행되며, 공격자가 원격으로 코드를 실행할 수 있음
  • Next.js는 해당 취약한 컴포넌트를 포함하고 있어 영향을 받음
    • Next.js는 CVE-2025-66478로 별도 관리 중이나, NVD에서는 이 CVE를 공식적으로 거부함
  • CVSS 점수는 10/10으로, Datadog은 공격이 매우 간단하며 기본 템플릿으로 생성된 Next.js 앱에서도 재현 가능하다고 확인
  • 12월 5일 기준, 무기화된 페이로드를 포함한 실제 공격 시도가 관찰됨

영향받는 버전 및 완화 방법

  • 취약한 React 라이브러리:
    • react-server-dom-parcel, react-server-dom-webpack, react-server-dom-turbopack
    • 취약 버전: 19.0~19.2.0 / 패치 버전: 19.0.1, 19.1.2, 19.2.1
  • Next.js 영향 버전
    • 취약: 15.x, 16.x, 14.3.0-canary.77 이후
    • 패치: 15.0.5, 15.1.9, 15.2.6, 15.3.6, 15.4.8, 15.5.7, 16.0.7
  • npm audit 명령으로 취약 여부 확인 가능
  • 해결책은 패치된 버전으로 업그레이드하는 것

취약점 분석 및 PoC

  • 12월 3일 React 저장소에 패치 코드가 커밋됨
    • 수정 내용은 requireModule 함수에서 객체 속성 존재 여부를 검사하도록 변경
  • 이 취약점은 서버 측 프로토타입 오염 유형으로, 객체의 프로토타입을 오염시켜 임의 코드 실행 가능
  • 공개된 PoC:
    • 첫 번째 PoC(ejpir/CVE-2025-55182-poc)는 비작동 상태
    • 두 번째 PoC(msanft/CVE-2025-55182)는 기본 Next.js 앱에서도 작동
    • 12월 5일 원 보고자 Lachlan Davidson이 세 가지 변형의 공식 PoC를 공개

실제 공격 활동

  • Datadog은 12월 3일 22시(UTC)부터 스캐닝 활동을 탐지
    • 12월 5일 기준 800개 이상의 IP에서 스캔 및 공격 시도 확인
    • 두 개 이상의 조직이 공격 대상이 되었으며, 12월 4일 이후 지속적 활동 관찰
  • 공격 흐름:
    • 초기에는 비작동 PoC 기반 스캔
    • 이후 Moritz Sanft의 PoC, 마지막으로 Davidson의 PoC 순으로 페이로드 교체
  • 관찰된 페이로드:
    • /etc/passwd 읽기, whoami 실행, curl·wget을 통한 원격 스크립트 다운로드 등
    • 일부는 환경 변수(.env) 탈취 및 시스템 정보 수집 기능 포함

서버 측 프로토타입 오염 개념

  • CWE-1321 유형으로, 객체 프로토타입 속성을 잘못 제어할 때 발생
  • 일반적으로 프론트엔드에서 XSS로 악용되지만, 서버 측에서는 RCE나 파일 읽기로 이어질 수 있음
  • 예시 코드에서 __proto__를 통한 오염으로 Object.prototype이 수정되어, 이후 생성된 객체 모두 영향을 받음
  • 결과적으로 spawnSync('sh') 호출 시 악성 명령이 입력으로 전달되어 실행됨

Datadog의 탐지 및 방어 기능

  • Datadog Code Security는 GitHub 또는 런타임에서 취약 라이브러리를 탐지
    • CVE-2025-55182 또는 CVE-2025-66478 관련 검색 기능 제공
  • Datadog App and API Protection (AAP) 은 런타임에서 공격 차단 가능
  • Datadog Workload Protection은 Node 프로세스에서 wget, curl, bash 등 명령 실행을 탐지하는 커스텀 규칙 제공

참고 자료

  • 공식 권고: React, Next.js
  • 클라우드 제공자 대응: AWS, Vercel, Google Cloud, Akamai, Cloudflare
  • 보안업체 분석: Wiz, Tenable, SearchLight Cyber
  • CERT 경고: CERT-EU, CERT-SE, CERT-AU
  • 공개 스캐너: assetnote/react2shell-scanner

Vercel 팀에서 해당 이슈 버전을 한번에 업데이트 하는 npx command 배포 했더라고요.

npx fix-react2shell-next

npm audit 명령으로 취약 여부 확인해서 업데이트 해야겠네요..

요즘 Vercel 팀이 엉망이네요. 탈 React/Next의 때가 온 듯 합니다.

잘한 건 아니지만 더 나은 대응이 있을까요?