요약
2025년 12월, React Server Components (RSC)의 "Flight" 프로토콜에 존재하는 치명적인 원격 코드 실행 취약점인 CVE-2025-55182 (React2Shell)이 악용되어 대규모 자격증명 유출 사고가 발생했습니다. 이 사고로 766대의 Next.js 호스트가 단 24시간 만에 침해되었으며, 데이터베이스 자격증명, SSH 키, 클라우드 비밀 등 민감한 정보가 대규모로 유출되었습니다. 본 분석에서는 사고의 기술적 원인, 악용 방식, 영향 범위, 그리고 벤치마크 사례와 인사이트를 정리합니다.
사고 개요
발생 일자 및 타임라인
- 2025년 12월 3일: Wiz Research가 CVE-2025-55182 취약점 공개
- 2025년 12월 4일: AWS가 중국 넥서스 위협 그룹이 초기 PoC 코드 실험 중임을 보고
- 2025년 12월 5일 04:00 UTC: GreyNoise가 95개 IP 주소에서 자동화된 공격 시도 관찰 시작
- 2025년 12월 5일 06:00 UTC: Wiz Research가 첫 번째 악성캠페인(크립토마이너) 식별
- 2025년 12월 5일: 단일 일간 766대의 Next.js 호스트 침해 확인
영향 규모
- 침해된 호스트 수: 766대 (단 24시간)
- 유출된 정보 유형:
- 데이터베이스 자격증명 (DB_*)
- SSH 키
- 클라우드 비밀 (AWS, GCP, Azure credentials)
- 애플리케이션 토큰 및 API 키
- 결제 키
- 개발자 도구 설정 (npm, Docker, Git)
- 위협 레벨: Critical (CVSS 10.0)
사고 명칭 및 공격자
- 취약점 명칭: React2Shell (CVE-2025-55182)
- 관련 취약점: CVE-2025-66478 (Next.js, CVE-2025-55182와 중복으로 거부됨)
- 주요 공격자:
- 자동화된 크립토마이닝 캠페인 (다수)
- 중국 넥서스 위협 그룹 (AWS 보고)
- 공격자 커뮤니티 (Sliver 백도어 배포)
기술적 분석
취약점 원리: 불안전한 역직렬화
CVE-2025-55182은 React Server Components (RSC)의 "Flight" 프로토콜에서 발생하는 논리적 역직렬화 취약점입니다.
기술적 배경:
- RSC는 서버 측 컴포넌트를 클라이언트로 전송하기 위해 직렬화된 페이로드를 사용합니다
- 서버는 RSC 페이로드를 받아 역직렬화할 때 구조 검증이 부족합니다
- 공격자가 특별히 제작된 페이로드를 전송하면, 서버 측 실행 로직에 영향을 미쳐 권한 있는 JavaScript 코드 실행이 가능합니다
공격 체인
- 초기 접근:
- 공격자가 취약한 Next.js 애플리케이션에
next-action헤더를 포함한 HTTP 요청 전송 -
Next.js의 기본 구성에서는 Server Actions가 정의되어 있지 않더라도 이 헤더가 있는 모든 페이로드가 파싱됨
-
Gadget 주입:
- 공격자 제어 "가젯(gadget)"들이 역직렬화 과정에서 합법적 객체를 대체
-
Function()생성자가 주요 RCE 가젯으로 작동 -
Promise 체인 트리거:
- 중첩된 JSON 객체가 Promise 체인을 트리거
-
공격자 코드가 포함된 익명 함수가 반환되고 실행됨
-
원격 코드 실행:
- 최종적으로 공격자의 코드가 서버에서 실행
PoC 페이로드 구조
Wiz Research가 공개한 PoC는 다음과 같은 구조를 가집니다:
Chunk 4 (Response 객체):
- _formData.get → Function() constructor
- _prefix → 악의적 JavaScript (예: 'console.log(7*7+1)//')
Chunk 1 (Chunk 객체):
- _response → Chunk 4
- value → Promise 체인을 트리거하는 중첩 JSON
실행 흐름:
Chunk 1 해석 → Chunk 4의 _response 해석 →
FormData.get( _prefix + obj ) →
Function( 'console.log(7*7+1)//' + obj ) →
코드 실행
공격 후 악성 활동 (Post-Exploitation)
Wiz Research가 관찰한 공격 후 악성 활동:
- 자격증명 수집:
- 환경 변수 덤프 (AWS, TOKEN, SECRET, PASS, DB_ 등)
- 파일 시스템 재귀 스캔 (/home, /root, /etc, /var/www, /opt)
- .env, JSON/YAML 설정, SSH 키 탐지
-
클라우드 인스턴스 메타데이터 서비스 접근 (169.254.169.254)
-
크립토마이닝 배포:
- UPX 패킹된 XMRig 변형 배포
- 경쟁 마이너 및 프로세스 종료
- 로컬 권한 상승 시도 (CVE-2021-4034)
-
systemd-devd 등으로 위장
-
백도어 설치:
- Sliver 백도어 프레임워크 배포
- 파일리스 백도어: Node.js 런타임을 "monkey patching"하여 메모리에 직접 백도어 심기
-
/favicon.login.ico경로를 "매직 패스"로 사용하여 웹셸 기능 -
비동기 DNS 비콘:
- oast*. 도메인을 통한 연결성 확인
- 애플리케이션별 호스트네임과 URL을 비콘에 포함하여 대상 환경 지문 추출
영향 범위: Next.js를 넘어서
이 취약점은 단순히 Next.js 프레임워크에 국한되지 않습니다:
- Next.js: 기본적으로 RSC가 활성화되어 있고 노출되어 있어 가장 쉬운 타겟
- Waku: Wiz Research가 PoC 수정 후 공격 성공
- Vite (RSC 플러그인): 취약성 확인
- Parcel RSC 플러그인: 취약성 확인
- React Router RSC 프리뷰: 취약성 확인
- RedwoodSDK: 취약성 확인
- 사용자 정의 React 서버: 개발자가 서버에서 수동으로 디코더 함수를 호출하는 경우 취약
영향받는 버전
| 제품 | 취약 버전 | 패치 버전 |
|---|---|---|
| react-server-dom* | 19.0.x, 19.1.x, 19.2.x | 19.0.1, 19.1.2, 19.2.1 |
| Next.js (App Router) | 14.3.0-canary.77+, 15.x, 16.x | 14.2.35, 15.0.5, 15.1.9, 15.2.6, 15.3.6, 15.4.8, 15.5.7, 16.0.7 |
관련 추가 취약점
React2Shell 패치를 검토하면서 발견된 추가 취약점:
- CVE-2025-55184: DoS (무한 루프로 서버 프로세스 중단) - High Severity
- CVE-2025-55183: 소스 코드 노출 - Medium Severity
- CVE-2025-67779: CVE-2025-55184의 초기 수정 불완전, 완전한 수정
중요: 이 추가 취약점은 원격 코드 실행을 허용하지 않습니다.
영향 및 대응
클라우드 환경 노출도
Wiz Research 데이터에 따르면:
- 39%의 클라우드 환경이 CVE-2025-55182에 취약한 Next.js 또는 React 버전을 포함
- 69%의 환경에서 Next.js 프레임워크가 존재
- 61%의 환경에서 Next.js를 실행하는 공개 애플리케이션 존재
- 결과적으로 44%의 모든 클라우드 환경에 공개적으로 노출된 Next.js 인스턴스 존재
대응 조치
1. 즉시 패치 (유일한 확정적 완화 조치)
# Next.js 버전별 패치 명령
npm install next@14.2.35 # 14.x
npm install next@15.0.5 # 15.0.x
npm install next@15.1.9 # 15.1.x
npm install next@15.2.6 # 15.2.x
npm install next@15.3.6 # 15.3.x
npm install next@15.4.8 # 15.4.x
npm install next@15.5.7 # 15.5.x
npm install next@16.0.7 # 16.0.x
또는 Vercel이 제공하는 자동화 도구 사용:
npx fix-react2shell-next
2. React 패키지 업데이트
npm install react-server-dom-webpack@19.0.1 react-server-dom-turbopack@19.0.1
# 또는 해당 버전에 맞는 최신 패치 버전
3. 다른 RSC 지원 프레임워크 확인
- Redwood, Waku 등 다른 RSC 지원 프레임워크를 사용 중인 경우 공식 채널에서 업데이트 확인
4. 침해 조사 (이미 침해되었을 가능성)
다음 단계로 침해 여부 확인:
- 로그 분석:
- 이상 DNS 쿼리 (oast*.live, oastify.com 등)
- Node.js/Next.js 프로세스에서 생성된 의심스러운 자식 프로세스
-
알려진 악성 IP 주소와의 연결 (Wiz IOC 목록 참조)
-
환경 변수 검사:
- AWS, GCP, Azure 자격증명의 비정상적인 사용
-
알 수 없는 SSH 키 추가
-
시스템 검사:
/tmp,/var/tmp등의 임시 디렉토리에 알 수 없는 파일 존재 여부- 의심스러운 프로세스 (systemd-devd 등으로 위장한 크립토마이너)
-
Sliver 백도어 또는 기타 악성 파일
-
클라우드 메타데이터 로그:
- 169.254.169.254에 대한 비정상적인 접근 시도
검색 및 완화 도구
Wiz 제공 도구:
- ASM Validation: 실제 악용 가능성 확인
- Security Graph: 공개적으로 노출된 취약 인스턴스 식별
- SBOM Analysis: Next.js 및 RSC 인스턴스 인벤토리
- Wiz Sensor: 비정상적인 동향 또는 악용 활동 탐지
- Wiz Defend: OAST 시도 탐지, 이상 DNS 쿼리 모니터링
완화 우선순위
| 위협 레벨 | 즉시 대응 (24시간 이내) | 단기 대응 (72시간 이내) | 장기 대응 (1주 이내) |
|---|---|---|---|
| Critical | Next.js 및 React 패치 | 침해 조사 및 자격증명 교체 | 보안 모니터링 강화 |
| High | - | 공개 노출 Next.js 인스턴스 식별 | WAF/IPS 규칙 업데이트 |
| Medium | - | - | 보안 정책 재검토 |
벤치마크 사례
사례 1: 자동화된 자격증명 수집 캠페인
개요:
공격자가 리버스 셸을 사용하여 Next.js 서버에서 npm, AWS, Docker, Git, SSH 및 애플리케이션 package.json 데이터를 체계적으로 덤프하고 Base64로 인코딩하여 유출.
특징:
- 대규모 자동화
- 다양한 자격증명 유형 타겟팅
- Base64 인코딩으로 탐지 회피
대응:
- 환경 변수 순환 교체
- 로그 분석으로 유출된 자격증명 식별
- AWS/GCP/Azure에서 키 교체 및 사용 패턴 모니터링
사례 2: 클라우드 메타데이터 접근 시도
개요:
별도의 캠페인에서 Base64로 인코딩된 스크립트를 실행하여 클라우드 인스턴스 메타데이터 서비스 (169.254.169.254/latest/meta-data/iam/security-credentials/)에 접근하여 IAM 자격증명을 획득하려는 시도.
특징:
- 클라우드 특정 권한 상승 의도 명확
- 메타데이터 서비스 타겟팅
대응:
- IMDSv2 (Instance Metadata Service Version 2) 사용
- 메타데이터 서비스 접근 로그 모니터링
- IAM 역할 및 정책 재검토
사례 3: 대규모 비밀 수집 스크립트
개요:
대규모 독립형 셸 스크립트가 /root 및 모든 /home/* 디렉토리를 순회하며:
- .ssh, .aws, .kube, .config/gcloud 경로 타겟팅
- 여러 암호화폐 지갑 위치 타겟팅
- 환경, OS 세부사항, 네트워크 인터페이스, 프로세스 목록 (ps aux), 네트워크 연결 (netstat -anpt) 수집
- 모든 결과를 단일 보고서 파일로 번들링하여 HTTP POST로 공격자 인프라에 업로드
특징:
- 다층적 수집 (파일 시스템 + 프로세스 + 네트워크)
- curl, wget, python 등 사용 가능한 도구 활용
- 단일 업로드로 대량 정보 유출
대응:
- 침해 시스템 전체 재이미징
- 영향받은 자격증명 모두 교체
- 네트워크 트래픽 분석으로 C2 통신 탐지
사례 4: Sliver 백도어 배포
개요:
하나 이상의 캠페인에서 동적 DNS 호스트에서 셸 스크립트를 다운로드하여 Sliver 페이로드 (64-bit ELF 바이너리)를 가져오고 임시 위치에서 실행.
특징:
- 기회주의적 악성코드에서 정교한 지속적 액세스로 전환
- 전용 공격자 제어 생태계 (TLS 인증서 및 도메인 재사용)
- 고도로 지속성 있는 백도어
대응:
- 침해된 시스템 격리
- 네트워크 분석 및 C2 인프라 차단
- EDR/EDR 툴로 백도어 제거
- 동적 DNS 호스트 블록리스트 추가
사례 5: 파일리스 백도어 (Node-Native Silent Exfiltration)
개요:
Node.js 런타임을 "monkey patching"하여 애플리케이션 서버의 메모리에 직접 지속적 백도어를 심는 정교한 기법.
기술적 세부사항:
- 코어 모듈 (node:http, node:url) 동적 임포트
- http.Server.prototype.emit 메서드 재정의
- Node.js 스택의 최하위 레벨에서 들어오는 모든 HTTP 요청에 후킹
- /favicon.login.ico 경로를 "매직 패스"로 사용
- 트리거 시 쿼리 매개변수에서 제공된 명령 실행
- 그 외 트래픽은 정상적으로 애플리케이션으로 전달
특징:
- 파일을 디스크에 쓰지 않음 (파일리스)
- 표준 로그 분석에서 거의 보이지 않음
- Node.js 이벤트 루프 내에서 완전히 실행
- 의심스러운 자식 프로세스 생성 경고 회피
대응:
- 프로세스 메모리 덤프 및 분석
- EDR/EDR 툴의 메모리 스캐닝 기능 활용
- 애플리케이션 전체 재배포
- 런타임 보안 규칙 업데이트 (이상 메서드 재정의 탐지)
인사이트
1. "기본 개방" 구성의 위험성
Next.js의 기본 구성에서 RSC가 활성화되어 있고 노출되어 있다는 점이 이 공격의 확산을 가속화했습니다. 개발자가 Server Actions를 정의하지 않더라도 next-action 헤더가 있는 모든 페이로드가 파싱됩니다.
교훈:
- 보안 기본값(security by default)의 중요성
- 프레임워크 선택 시 보안 구조 고려 필요
- 개발자가 명시적으로 옵트인(opt-in)하는 구조가 더 안전할 수 있음
2. RSC 구현의 보안적 고려사항
이 사고는 RSC와 같은 고급 기능이 가져오는 성능 편익과 보안 간의 근본적인 긴장을 보여줍니다. 역직렬화는 강력하지만 위험한 기능이며, 엄격한 검증이 필수적입니다.
교훈:
- 사용자 제어 데이터를 처리하는 모든 역직렬화 로직은 최소 권한 원칙으로 검토
- 타입 검증 강화
- 입력 유효성 검사 (input validation) 필수
- 역직렬화 전에 데이터 구조 검증
3. 클라우드 네이티브 환경에서의 파급 효과
39%의 클라우드 환경이 취약한 버전을 포함하고 44%가 공개적으로 노출된 Next.js 인스턴스를 가지고 있다는 사실은 클라우드 네이티브 환경에서의 이러한 취약점의 파급 효과를 보여줍니다. 컨테이너와 Kubernetes의 대규모 채택이 공격 표면을 넓혔습니다.
교훈:
- 클라우드 보안 posture 관리 (CSPM)의 중요성
- 취점 인스턴스 식별 및 패치 자동화
- 공개 노출 서비스의 최소화
- 클라우드 네이티브 워크로드를 위한 런타임 보안 필수
4. 자동화된 공격의 빠른 적응력
PoC가 공개된 지 몇 시간 내에 자동화된 공격이 시작되었습니다. 크립토마이너에서 시작하여 24시간 이내에 정교한 Sliver 백도어로 진화했습니다.
교훈:
- 패치가 가능해지면 즉시 적용할 수 있는 파이프라인 필요
- 보안 통지 시 즉각적인 대응 체계 구축
- 취약점 관리의 속도는 공격자의 속도와 경쟁
5. 파일리스 공격의 증가
파일리스 백도어는 기존의 파일 기반 탐지 방법을 우회합니다. 메모리에서만 실행되는 공격은 더 발견하기 어렵습니다.
교훈:
- 런타임 보안 (runtime security)의 중요성 증가
- EDR/EDR 툴의 메모리 스캐닝 기능 필수
- 프로세스 행동 분석 기반 탐지 필요
- 비정상적인 메서드 재정의 탐지 규칙 추가
6. 자격증명 관리의 중요성
모든 공격 후 악성 활동이 자격증명 수집에 집중했습니다. 클라우드 환경에서 자격증명은 공격자의 가장 중요한 목표입니다.
교훈:
- 자격증명 순환 교체 (credential rotation) 자동화
- 환경 변수에 민감한 비밀 하드코딩 금지
- 클라우드 자격증명에 최소 권한 부여
- 자격증명 유출 탐지 시스템 구축
- IMDSv2 사용 (클라우드 메타데이터 서비스 보안 강화)
7. 프레임워크 생태계의 책임
이 취약점은 Next.js뿐만 아니라 RSC를 구현하는 모든 프레임워크에 영향을 미칩니다. 프레임워크 생태계는 보안을 공동으로 책임져야 합니다.
교훈:
- 프레임워크 보안 권고사항 주시 필수
- 의존성 업데이트 자동화
- SBOM (Software Bill of Materials) 관리
- 보안 커뮤니티 참여
8. 빠른 보안 연구 공개의 양면성
Wiz Research가 PoC를 보류한 초기 단계에서는 공격이 제한되었지만, PoC가 공개된 후 공격이 급증했습니다. 동시에 연구원들은 보안 커뮤니티에게 정보를 공유하여 방어력을 높였습니다.
교훈:
- 취점점 공개 시점의 중요성 (coordinated disclosure)
- 보안 연구원과 개발자 간의 협력 필요
- 공격자보다 먼저 패치하는 속도 경쟁
- 탐지 및 완화 지침의 공유 중요성
참고문헌
- Next.js Official Blog - "Next.js Security Update: December 11, 2025"
- URL: https://nextjs.org/blog/security-update-2025-12-11
- Vercel Advisory - CVE-2025-55182
- URL: https://vercel.com/changelog/cve-2025-55182
- React Blog - "Critical security vulnerability in React Server Components"
- URL: https://react.dev/blog/2025/12/03/critical-security-vulnerability-in-react-server-components
- React Blog - "Denial of Service and Source Code Exposure in React Server Components"
- URL: https://react.dev/blog/2025/12/11/denial-of-service-and-source-code-exposure-in-react-server-components
- Next.js GitHub Security Advisory - GHSA-mwv6-3258-q52c (CVE-2025-55184)
- URL: https://github.com/vercel/next.js/security/advisories/GHSA-mwv6-3258-q52c
- Next.js GitHub Security Advisory - GHSA-w37m-7fhw-fmv9 (CVE-2025-55183)
- URL: https://github.com/vercel/next.js/security/advisories/GHSA-w37m-7fhw-fmv9
- Next.js GitHub Security Advisory - GHSA-5j59-xgg2-r9c4 (CVE-2025-67779)
- URL: https://github.com/vercel/next.js/security/advisories/GHSA-5j59-xgg2-r9c4
- CVE Record - CVE-2025-55182
- URL: https://www.cve.org/CVERecord?id=CVE-2025-55182
- CVE Record - CVE-2025-55183
- URL: https://www.cve.org/CVERecord?id=CVE-2025-55183
- CVE Record - CVE-2025-55184
- URL: https://www.cve.org/CVERecord?id=CVE-2025-55184
- CVE Record - CVE-2025-67779
- URL: https://www.cve.org/CVERecord?id=CVE-2025-67779
- Wiz Blog - "React2Shell (CVE-2025-55182): Everything You Need to Know About the Critical React Vulnerability"
- URL: https://www.wiz.io/blog/critical-vulnerability-in-react-cve-2025-55182
- Wiz Blog - "React2Shell: Technical Deep-Dive & In-the-Wild Exploitation of CVE-2025-55182"
- URL: https://www.wiz.io/blog/nextjs-cve-2025-55182-react2shell-deep-dive
- AWS Security Blog - "China-nexus cyber threat groups rapidly exploit React2Shell vulnerability (CVE-2025-55182)"
- URL: https://aws.amazon.com/blogs/security/china-nexus-cyber-threat-groups-rapidly-exploit-react2shell-vulnerability-cve-2025-55182/
- GreyNoise Blog - "CVE-2025-55182 (React2Shell): Opportunistic Exploitation in the Wild - What the GreyNoise Observation Grid is seeing so far"
- URL: https://www.greynoise.io/blog/cve-2025-55182-react2shell-opportunistic-exploitation-in-the-wild-what-the-greynoise-observation-grid-is-seeing-so-far
- Google Cloud Blog - "Responding to CVE-2025-55182"
- URL: https://cloud.google.com/blog/products/identity-security/responding-to-cve-2025-55182/
- ProjectDiscovery Blog - "CVE-2025-29927: Next.js Middleware Authorization Bypass - Technical Deep-Dive"
- URL: https://projectdiscovery.io/blog/nextjs-middleware-authorization-bypass
- Truesec Blog - "Critical Next.js Authorization Bypass Vulnerability"
- URL: https://www.truesec.com/hub/blog/critical-next-js-authorization-bypass-vulnerability
- The Hacker News - "Critical Next.js Vulnerability Allows Attackers to Bypass Middleware Authorization Checks"
- URL: https://thehackernews.com/2025/03/critical-nextjs-vulnerability-allows.html
- BleepingComputer - "Critical flaw in Next.js lets hackers bypass authorization"
- URL: https://www.bleepingcomputer.com/news/security/critical-flaw-in-nextjs-lets-hackers-bypass-authorization/
- BleepingComputer - "Critical React, Next.js flaw lets hackers execute code on servers"
- URL: https://www.bleepingcomputer.com/news/security/critical-react2shell-flaw-in-react-nextjs-lets-hackers-run-javascript-code/
- GitHub Repository - fix-react2shell-next
- URL: https://github.com/vercel-labs/fix-react2shell-next
- NVD (National Vulnerability Database) - CVE-2025-55182
- URL: https://nvd.nist.gov/vuln/detail/CVE-2025-55182
- NVD - CVE-2025-55183
- URL: https://nvd.nist.gov/vuln/detail/CVE-2025-55183
- NVD - CVE-2025-55184
- URL: https://nvd.nist.gov/vuln/detail/CVE-2025-55184
- NVD - CVE-2025-67779
- URL: https://nvd.nist.gov/vuln/detail/CVE-2025-67779
본 콘텐츠는 AI 기술로 생성된 분석 리포트를 포함하고 있습니다. 내용 중 사실과 다르거나 보완이 필요한 정보를 발견하시면 댓글을 통해 소중한 의견 부탁드립니다. 여러분의 피드백은 더 정확한 보안 정보 공유에 큰 도움이 됩니다.
댓글 (0)
댓글을 작성하려면 로그인이 필요합니다.
로그인아직 댓글이 없습니다.
첫 번째 댓글을 작성해보세요!