
CVE-2025-55182 (React2Shell) 로컬 테스트를 위한 고의로 취약하게 구성된 Next.js RSC Docker 랩
인가된 보안 연구를 위한 로컬 Docker 실습 환경: React Server Components / Next.js App Router 스택이 CVE-2025-55182 (React2Shell) 영향을 받는 범위에 있습니다.
자신의 기기에서만 사용하세요. 이 컨테이너를 인터넷에 노출하지 마십시오.
| 구성 요소 | 버전 | 비고 |
|---|
| Next.js | 15.1.0 | 패치 이전; npm이 알려진 문제에 대해 경고함 |
| React / react-dom | 19.2.0 | 이 CVE의 영향을 받는 19.x 라인에 해당 |
| RSC pipeline | Next에 번들됨 | 역직렬화는 Next의 컴파일된 react-server-dom-*을 통해 수행됨 |
이 앱은 최소한의 App Router 페이지와 하나의 Server Action을 가지고 있어, Next-Action 헤더가 포함된 POST / 요청이 실제 대상처럼 동작합니다.
git clone https://github.com/l0lsec/cve-2025-55182-lab.git
cd cve-2025-55182-lab
# Build and run in the background
docker compose up --build -d
**http://localhost:3000**을 열면 “RSC 실습 환경 (의도적으로 취약함)”이라고 표시된 작은 양식이 보여야 합니다.
curl -sS -o /dev/null -w "%{http_code}\n" http://127.0.0.1:3000/
# expect: 200
docker compose logs -f
docker compose down
http://localhost:3000으로 설정합니다 (또는 Burp을 통해 터널링).POST / 요청을 Content-Type: multipart/form-data 헤더와 함께 Flight 프로토콜 익스플로잇 본문(공개 글/자신의 템플릿에 있는 멀티파트 필드 0, 1, 2)을 전송합니다.Next-Action 헤더
Next-Action 값을 복사하거나, 또는예시 헤더 형식:
Next-Action: <action-id-from-intercepted-request>
일반적인 플레이스홀더가 작동하지 않으면, 합법적인 제출 후 Proxy 기록에서 실시간 id를 항상 선호하세요.
복사하여 붙여넣을 수 있는 POST / 멀티파트 템플릿은 **burp-payloads/**에 있습니다 (예: id, whoami, 시간 기반 sleep, OOB 플레이스홀더). 파일 인덱스는 burp-payloads/README.md를 참조하세요. 전송 전에 OOB 템플릿의 **YOUR-COLLABORATOR-HOST**를 바꾸세요.
.
├── Dockerfile # 다단계 빌드, Next standalone, 포트 3000
├── docker-compose.yml # 호스트 3000 → 컨테이너 3000 매핑
├── burp-payloads/ # Burp Repeater용 원시 *.http + 인덱스 README
├── app/
│ ├── layout.tsx
│ └── page.tsx # Server Action + lab UI
├── public/
├── package.json
├── package-lock.json
└── next.config.ts # 출력: "standalone"
npm install
npm run dev
# http://localhost:3000
CVE 재현을 위해서는 스택이 고정된 취약한 종속성과 일치하도록 Docker 이미지를 선호하세요.
교육/연구용으로만 사용하세요. 귀하는 운영 지역의 법률 및 정책을 준수할 책임이 있습니다. 보증 없음.