
React Server Components Flight 프로토콜 원격 코드 실행 탐지 도구
이 스캐너는 React Server Components(RSC) "Flight" 프로토콜의 심각한 무인증 원격 코드 실행 취약점인 CVE-2025-55182(React) 및 CVE-2025-66478(Next.js)에 잠재적으로 취약한 시스템을 식별합니다.
주요 위험 요소:
React의 Server Components 구현에서 발생하는 심각한 안전하지 않은 역직렬화(insecure deserialization) 취약점입니다. RSC "Flight" 프로토콜이 수신 페이로드의 구조와 유형을 제대로 검증하지 못하여, 공격자가 서버 측 실행에 영향을 미치는 악성 데이터를 주입할 수 있습니다.
Attacker → Crafted HTTP POST → RSC Endpoint → Deserialization → RCE
공격에는 임의의 서버 함수(Server Function) 엔드포인트에 대한 특수하게 조작된 HTTP 요청 하나만 필요합니다. 인증이 필요하지 않으며 기본 구성도 취약합니다.
스캐너는 수동적 핑거프린팅(passive fingerprinting) 및 **프로토콜 프로빙(protocol probing)**을 사용하여 잠재적으로 취약한 시스템을 식별합니다. 실제 악용은 시도하지 않습니다.
┌─────────────────────────────────────────────────────────────────┐
│ DETECTION PIPELINE │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 1. Framework Detection │
│ ├── HTTP Headers (X-Powered-By: Next.js) │
│ ├── Page Source (__NEXT_DATA__, react artifacts) │
│ └── Build Manifests │
│ │
│ 2. Version Fingerprinting │
│ ├── Embedded version strings in JS bundles │
│ ├── Package version patterns │
│ └── Build manifest analysis │
│ │
│ 3. RSC Endpoint Discovery │
│ ├── Send RSC headers (RSC: 1, Accept: text/x-component) │
│ ├── Analyze response Content-Type │
│ └── Detect Flight protocol markers in response │
│ │
│ 4. Server Actions Probing │
│ ├── POST request with minimal Flight payload │
│ ├── Check for deserialization processing │
│ └── Identify action endpoints │
│ │
│ 5. Vulnerability Assessment │
│ ├── Correlate version with known vulnerable ranges │
│ ├── Weight RSC endpoint presence │
│ └── Generate confidence-scored verdict │
│ │
└─────────────────────────────────────────────────────────────────┘
Flight 프로토콜은 특정한 와이어 포맷을 사용합니다:
0:["$","div",null,{"children":"Hello"}]
1:["$","$L1",null,{}]
2:{"name":"ServerComponent"}
스캐너는 다음을 찾습니다:
text/x-component 콘텐츠 유형{number}:{payload}$, $L, $F, $@, $undefined다음 위치에서 버전 패턴을 검색합니다:
/_next/static/chunks/)[email protected])requests 라이브러리# Clone or download the scanner files
# Install dependencies
pip install -r requirements.txt
# Verify installation
python3 cve-2025-55182-scanner.py --help
# Single target
python3 cve-2025-55182-scanner.py -t https://example.com
# With verbose output
python3 cve-2025-55182-scanner.py -t https://example.com -v
# Create targets file (one URL per line)
echo "https://app1.example.com" > targets.txt
echo "https://app2.example.com" >> targets.txt
# Scan all targets
python3 cve-2025-55182-scanner.py -f targets.txt -o results.json
python3 cve-2025-55182-scanner.py -t https://example.com \
--timeout 15 \
--threads 10 \
--user-agent "SecurityAudit/1.0" \
-v \
-o scan_results.json
더 심층적인 프로토콜 분석을 위해:
python3 rsc_analyzer.py https://example.com 2>/dev/null
이 모듈은 상세한 Flight 프로토콜 분석과 구성 요소 열거를 제공합니다.
======================================================================
Target: https://app.example.com
Status: VULNERABLE
Framework: Next.js
Version: 19.1.0
RSC Endpoints: /, /_next/data
Evidence:
- X-Powered-By header: Next.js
- React version detected: 19.1.0
- RSC Flight response at / (Content-Type: text/x-component)
- Flight protocol markers detected at /
Recommendations:
→ CRITICAL: Immediate patching required!
→ Upgrade React to 19.0.1, 19.1.2, or 19.2.1
→ Upgrade Next.js to latest patched version (15.0.5+, 16.0.7)
→ Enable WAF rules to block malicious RSC payloads
→ Monitor for anomalous POST requests to RSC endpoints
======================================================================
{
"target": "https://app.example.com",
"status": "VULNERABLE",
"framework": "Next.js",
"version": "19.1.0",
"rsc_endpoints": ["/", "/_next/data"],
"evidence": [
"X-Powered-By header: Next.js",
"React version detected: 19.1.0",
"RSC Flight response at / (Content-Type: text/x-component)"
],
"recommendations": [
"CRITICAL: Immediate patching required!",
"Upgrade React to 19.0.1, 19.1.2, or 19.2.1"
]
}
✅ 번들에서 명시적 버전 문자열 발견
✅ X-Powered-By 헤더가 버전 노출
✅ 여러 RSC 지표 존재
✅ Flight 프로토콜 응답 확인
✅ 서버가 RSC POST 요청 수락
❌ 버전 정보 미노출
❌ WAF/CDN이 응답 마스킹
❌ 사용자 지정 프레임워크 구현
❌ 과도한 캐싱으로 프로브 차단
❌ 속도 제한(rate limiting)으로 탐지 차단
| 시나리오 | 발생 이유 | 완화 방법 |
|---|---|---|
| 오래된 버전 문자열이 캐시됨 | CDN/빌드 캐시 | 여러 엔드포인트 확인 |
| 업데이트 후 RSC 비활성화 | 재빌드 없는 구성 변경 | 빌드 날짜 확인 |
| 비표준 RSC 구현 | 사용자 지정 프레임워크 | 수동 검증 |
| 요인 | 탐지에 미치는 영향 |
|---|---|
| Cloudflare/WAF | 프로브를 차단하고 헤더를 마스킹할 수 있음 |
| CDN 캐싱 | 오래된 버전 정보를 제공할 수 있음 |
| 로드 밸런서 | 다른 앱 버전으로 라우팅할 수 있음 |
심각한 발견 사항은 항상 다음 방법으로 검증하십시오:
npm audit 또는 yarn audit 실행즉시 조치 (0-24시간):
즉시 패치
npm install [email protected] [email protected]
npm install [email protected] # or latest patched
WAF 규칙 활성화 - Cloudflare, Akamai, AWS WAF가 보호 규칙을 배포했습니다
RSC 엔드포인트로의 의심스러운 POST 요청에 대해 로그 모니터링
단기 조치 (24-72시간):
package.json에서 React/Next.js 버전을 수동으로 확인# Batch scan all company assets
cat domains.txt | while read domain; do
python3 cve-2025-55182-scanner.py -t "$domain" -o "results_${domain//\//_}.json"
done
# Aggregate results
jq -s '[.[] | select(.status == "VULNERABLE" or .status == "LIKELY_VULNERABLE")]' results_*.json > critical_findings.json
# GitHub Actions example
- name: CVE-2025-55182 Check
run: |
python3 cve-2025-55182-scanner.py -t ${{ env.APP_URL }} -o results.json
if grep -q '"status": "VULNERABLE"' results.json; then
echo "::error::Critical vulnerability detected!"
exit 1
fi
| 버전 | 날짜 | 변경 사항 |
|---|---|---|
| 1.0.0 | 2025-12-03 | 최초 릴리스 |
이 도구는 승인된 보안 테스트 전용으로 제공됩니다. 소유한 시스템 또는 명시적인 서면 허가를 받은 시스템에만 사용하십시오. 저자는 이 도구의 오용 또는 이로 인한 피해에 대해 책임을 지지 않습니다.
| 패키지 | 취약한 버전 | 패치된 버전 |
|---|
| react-server-dom-webpack | 19.0.0, 19.1.0, 19.1.1, 19.2.0 | 19.0.1, 19.1.2, 19.2.1 |
| react-server-dom-parcel | 19.0.0, 19.1.0, 19.1.1, 19.2.0 | 19.0.1, 19.1.2, 19.2.1 |
| react-server-dom-turbopack | 19.0.0, 19.1.0, 19.1.1, 19.2.0 | 19.0.1, 19.1.2, 19.2.1 |
| Next.js | 14.3.0-canary.77+, 15.x, 16.0.0-16.0.6 | 15.0.5, 15.1.9, 15.2.6, 15.3.6, 15.4.8, 15.5.7, 16.0.7 |
| 지표 | 탐지 방법 | 신뢰도 |
|---|
X-Powered-By: Next.js | HTTP 헤더 검사 | 높음 |
__NEXT_DATA__ 스크립트 태그 | HTML 소스 파싱 | 높음 |
/_next/ 에셋 경로 | HTML 소스 파싱 | 중간 |
| React 하이드레이션 마커 | HTML 소스 파싱 | 중간 |
| 옵션 | 설명 | 기본값 |
|---|
-t, --target | 단일 대상 URL | - |
-f, --file | 대상 목록 파일 | - |
-o, --output | JSON 출력 파일 | - |
-v, --verbose | 상세 증거 표시 | False |
--timeout | 요청 시간 제한(초) | 10 |
--threads | 동시 스레드 수 | 5 |
--verify-ssl | SSL 인증서 확인 | False |
--user-agent | 사용자 지정 User-Agent | Mozilla/5.0... |
--no-banner | 배너 숨기기 | False |
| 상태 | 의미 | 필요한 조치 |
|---|
| 🔴 VULNERABLE | 취약한 버전 감지 확인됨 | 즉시 패치 |
| 🔴 LIKELY_VULNERABLE | RSC가 포함된 React 19.x, 취약 범위 내 버전 | 긴급 패치 |
| 🟡 POTENTIALLY_VULNERABLE | RSC 엔드포인트 발견, 버전 불명 | 조사 및 패치 |
| 🟢 NOT_VULNERABLE | 패치된 버전 확인됨 | 업데이트 모니터링 |
| 🔵 UNKNOWN | 상태 확인 불가 | 수동 검증 필요 |
| ⚪ ERROR | 스캔 실패 | 재시도 또는 수동 확인 |
| 결과 유형 | 신뢰도 | 설명 |
|---|
| VULNERABLE(버전 포함) | 높음 (90%+) | 버전 문자열이 알려진 취약 버전과 일치 |
| VULNERABLE(헤더 통해) | 높음 (85%+) | X-Powered-By가 취약한 버전을 노출 |
| LIKELY_VULNERABLE | 중간-높음 (70-85%) | React 19.x 감지, RSC 활성화, 명시적으로 패치되지 않은 버전 |
| POTENTIALLY_VULNERABLE | 중간 (50-70%) | RSC 엔드포인트가 응답하지만 버전 불명 |
| NOT_VULNERABLE | 높음 (85%+) | 패치된 버전이 명시적으로 감지됨 |
| UNKNOWN | 낮음 (<50%) | 수집된 정보 부족 |
| 시나리오 |
|---|
| 발생 이유 |
|---|
| 완화 방법 |
|---|
| 번들에서 버전 정보 제거됨 | 프로덕션 최적화 | 빌드 매니페스트 확인 |
| WAF가 프로브 차단 | 보안 통제 | 허용된 IP에서 테스트 |
| 비표준 경로의 RSC | 사용자 지정 라우팅 | 경로 워드리스트 확장 |
| SSR 지표가 없는 SPA | 클라이언트 전용 렌더링 | API 엔드포인트 확인 |
| Kubernetes/컨테이너 | 각 파드(pod)가 다를 수 있음 |
| 기능 플래그 | RSC가 조건부로 활성화될 수 있음 |