
CVE-2025-55182("React2Shell")에 대한 개념 증명입니다. React Server Components의 안전하지 않은 역직렬화를 통한 원격 코드 실행(RCE)을 보여주는 완전한 도커화 환경입니다. Vanilla React(Express) 및 Next.js용 취약한 대상과 사용자 지정 Python 익스플로잇 스크립트가 포함되어 있습니다.
⚠️ 고지: 교육 목적으로만 사용 이 저장소는 심각한 취약점(CVSS 10.0)에 대한 실제 익스플로잇 코드를 포함하고 있습니다. 이 코드는 학술 연구, 보안 분석 및 교육 목적으로만 엄격히 사용됩니다. 본인이 소유하지 않거나 명시적 테스트 허가를 받지 않은 시스템에는 이 코드를 사용하지 마십시오. 저자는 어떠한 오용에도 책임을 지지 않습니다.
이 프로젝트는 React Server Components (RSC) 아키텍처에 존재하는 원격 코드 실행(RCE) 취약점인 CVE-2025-55182를 문서화하고 시연합니다. 흔히 "React2Shell"이라고 불리는 이 결함은 인증되지 않은 원격 공격자가 react-server에서 사용하는 "Flight" 직렬화 프로토콜을 조작하여 서버에서 임의의 코드를 실행할 수 있게 합니다.
이 실험실은 두 가지 시나리오에서 취약점을 분석할 수 있는 통제된 격리 Docker 환경을 제공합니다.
react-server-dom-webpack과 Express를 사용한 원시 구현.이 환경은 Docker Compose로 구축되며 개인 내부 네트워크(research-net)로 연결된 세 개의 격리 컨테이너로 구성됩니다.
| 서비스 | 컨텍스트 | 설명 | 취약 구성 요소 |
|---|
vanilla-target | vanilla-rsc/ | RSC 프로토콜을 수동으로 구현하는 최소 Express 서버. | [email protected] |
nextjs-target | nextjs-app/ | App Router를 사용하는 표준 Next.js 애플리케이션. | [email protected] (구현: react-server) |
attacker | exploit/ | 익스플로잇 스크립트가 포함된 Python 환경. | 해당 없음 |
이 취약점은 Flight 프로토콜 파서 내부의 안전하지 않은 역직렬화(CWE-502) 에서 비롯됩니다. "가짜" 청크 구조를 포함하는 조작된 multipart 페이로드를 주입함으로써 공격자는 다음을 수행할 수 있습니다.
.then 속성을 덮어씁니다.$B blob 참조)을 탐색하도록 강제합니다.Function() 생성자에 도달하여 임의의 JavaScript(예: child_process.execSync)를 컴파일하고 실행합니다.저장소를 클론합니다:
git clone https://github.com/trax69/cve-2025-55182-poc.git
cd cve-2025-55182-poc
실험실을 빌드하고 시작합니다:
docker-compose up -d --build
컨테이너가 완전히 초기화될 때까지 기다립니다. Next.js 컨테이너는 첫 번째 빌드를 완료하는 데 몇 분이 걸릴 수 있습니다.
익스플로잇 로직은 exploit/exploit.py에 캡슐화되어 있습니다. 호스트 머신(Python이 설치된 경우)에서 직접 또는 attacker 컨테이너에서 공격을 실행할 수 있습니다.
공격자 셸에 접근합니다:
docker-compose exec attacker bash
요구 사항을 설치합니다:
pip install -r requirements.txt
대상 A 공격 (바닐라 React):
python exploit.py http://vanilla-target:4000/rsc vanilla
대상 B 공격 (Next.js):
python exploit.py http://nextjs-target:3000/ nextjs
익스플로잇은 대상 서버의 /tmp 디렉토리에 pwned.txt라는 파일을 생성하려고 시도합니다. 성공 여부를 확인하려면:
# 바닐라 서버 확인
docker-compose exec vanilla-target ls -la /tmp/pwned.txt
# Next.js 서버 확인
docker-compose exec nextjs-target ls -la /tmp/pwned.txt
성공하면 파일 목록이 표시됩니다. 익스플로잇이 실패하면 파일이 존재하지 않습니다.
프로덕션 환경에서 이 취약점을 해결하려면:
react-server-dom-webpack(및 관련 패키지)을 버전 19.0.1, 19.1.2 또는 19.2.1+ 로 업그레이드합니다."$1:__proto__"와 같은 시그니처 또는 "$@"의 비정상적인 사용을 포함하는 요청을 차단하는 규칙을 구현합니다.대학 프로젝트 - 보안 감사 및 취약점 연구