
Scanner de vulnérabilités passif pour CVE-2025-55182 et CVE-2025-66478, détectant une RCE non authentifiée dans les composants serveur React via framework fingerprinting, version analysis et RSC endpoint probing.
Outil de détection d'exécution de code à distance via le protocole Flight des React Server Components
Ce scanner identifie les systèmes potentiellement vulnérables aux CVE-2025-55182 (React) et CVE-2025-66478 (Next.js), des vulnérabilités critiques d'exécution de code à distance sans authentification dans le protocole « Flight » des React Server Components (RSC).
Facteurs de risque clés :
Une vulnérabilité critique de désérialisation non sécurisée dans l'implémentation des Server Components de React. Le protocole « Flight » du RSC ne parvient pas à valider correctement la structure et les types des charges utiles entrantes, permettant aux attaquants d'injecter des données malveillantes qui influencent l'exécution côté serveur.
Attaquant → Requête HTTP POST conçue → Point d'accès RSC → Désérialisation → Exécution de code (RCE)
L'attaque nécessite uniquement une requête HTTP spécialement conçue vers n'importe quel point d'accès de fonction serveur. Aucune authentification n'est nécessaire et les configurations par défaut sont vulnérables.
Le scanner utilise l'empreinte passive et le sondage de protocole pour identifier les systèmes potentiellement vulnérables. Il ne tente PAS d'exploitation.
┌─────────────────────────────────────────────────────────────────┐
│ CHAÎNE DE DÉTECTION │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 1. Détection du framework │
│ ├── En-têtes HTTP (X-Powered-By: Next.js) │
│ ├── Code source de la page (__NEXT_DATA__, artefacts React)│
│ └── Manifests de construction │
│ │
│ 2. Empreinte de version │
│ ├── Chaînes de version intégrées dans les bundles JS │
│ ├── Motifs de version des packages │
│ └── Analyse du manifest de construction │
│ │
│ 3. Découverte des points d'accès RSC │
│ ├── Envoi d'en-têtes RSC (RSC: 1, Accept: text/x-component)│
│ ├── Analyse du Content-Type de la réponse │
│ └── Détection des marqueurs du protocole Flight │
│ │
│ 4. Sondage des actions serveur │
│ ├── Requête POST avec une charge utile Flight minimale │
│ ├── Vérification du traitement de désérialisation │
│ └── Identification des points d'accès d'action │
│ │
│ 5. Évaluation de la vulnérabilité │
│ ├── Corrélation de la version avec les plages vulnérables │
│ ├── Pondération de la présence de points d'accès RSC │
│ └── Génération d'un verdict avec score de confiance │
│ │
└─────────────────────────────────────────────────────────────────┘
Le protocole Flight utilise un format de transmission spécifique :
0:["$","div",null,{"children":"Hello"}]
1:["$","$L1",null,{}]
2:{"name":"ServerComponent"}
Le scanner recherche :
text/x-component{numéro}:{charge utile}$, $L, $F, $@, $undefinedRecherche des motifs de version dans :
/_next/static/chunks/)[email protected])requests# Clonez ou téléchargez les fichiers du scanner
# Installez les dépendances
pip install -r requirements.txt
# Vérifiez l'installation
python3 cve-2025-55182-scanner.py --help
# Cible unique
python3 cve-2025-55182-scanner.py -t https://example.com
# Avec sortie détaillée
python3 cve-2025-55182-scanner.py -t https://example.com -v
# Créez un fichier de cibles (une URL par ligne)
echo "https://app1.example.com" > targets.txt
echo "https://app2.example.com" >> targets.txt
# Analysez toutes les cibles
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
Pour une analyse plus approfondie du protocole :
python3 rsc_analyzer.py https://example.com 2>/dev/null
Ceci fournit une analyse détaillée du protocole Flight et l'énumération des composants.
======================================================================
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"
]
}
✅ Chaîne de version explicite trouvée dans les bundles
✅ En-tête X-Powered-By expose la version
✅ Plusieurs indicateurs RSC présents
✅ Réponse du protocole Flight confirmée
✅ Le serveur accepte les requêtes POST RSC
❌ Aucune information de version exposée
❌ WAF/CDN masquant les réponses
❌ Implémentation personnalisée du framework
❌ Mise en cache importante empêchant les sondes
❌ Limitation de débit bloquant la détection
| Scénario | Pourquoi cela se produit | Atténuation |
|---|---|---|
| Ancienne chaîne de version en cache | Cache CDN/construction | Vérifier plusieurs points d'accès |
| RSC désactivé après mise à jour |
| Facteur | Impact sur la détection |
|---|---|
| Cloudflare/WAF | Peut bloquer les sondes, masquer les en-têtes |
Pour les résultats critiques, validez toujours avec :
npm audit ou yarn auditActions immédiates (0-24 heures) :
Appliquez le correctif immédiatement
npm install [email protected] [email protected]
npm install [email protected] # ou dernière version corrigée
Activez les règles WAF - Cloudflare, Akamai et AWS WAF ont déployé des règles de protection
Surveillez les journaux pour des requêtes POST suspectes vers les points d'accès RSC
Actions à court terme (24-72 heures) :
package.json# Analyse par lot de tous les actifs de l'entreprise
cat domains.txt | while read domain; do
python3 cve-2025-55182-scanner.py -t "$domain" -o "results_${domain//\//_}.json"
done
# Agrégation des résultats
jq -s '[.[] | select(.status == "VULNERABLE" or .status == "LIKELY_VULNERABLE")]' results_*.json > critical_findings.json
# Exemple GitHub Actions
- 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
| Version | Date | Modifications |
|---|---|---|
| 1.0.0 | 2025-12-03 | Version initiale |
Cet outil est fourni uniquement pour des tests de sécurité autorisés. Utilisez-le uniquement sur des systèmes dont vous êtes propriétaire ou pour lesquels vous avez une autorisation écrite explicite de test. Les auteurs déclinent toute responsabilité en cas d'utilisation abusive ou de dommages causés par cet outil.
| Package | Versions vulnérables | Versions corrigées |
|---|
| 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 |
| Indicateur | Méthode de détection | Confiance |
|---|
X-Powered-By: Next.js | Inspection des en-têtes HTTP | Élevée |
__NEXT_DATA__ script tag | Analyse du code source HTML | Élevée |
/_next/ chemins d'actifs | Analyse du code source HTML | Moyenne |
| Marqueurs d'hydratation React | Analyse du code source HTML | Moyenne |
| Option | Description | Défaut |
|---|
-t, --target | URL cible unique | - |
-f, --file | Fichier contenant la liste des cibles | - |
-o, --output | Fichier de sortie JSON | - |
-v, --verbose | Afficher les preuves détaillées | False |
--timeout | Délai d'attente de la requête (secondes) | 10 |
--threads | Threads concurrents | 5 |
--verify-ssl | Vérifier les certificats SSL | False |
--user-agent | User-Agent personnalisé | Mozilla/5.0... |
--no-banner | Supprimer la bannière | False |
| Statut | Signification | Action requise |
|---|
| 🔴 VULNÉRABLE | Version vulnérable confirmée détectée | Correctif immédiat |
| 🔴 PROBABLEMENT_VULNÉRABLE | React 19.x avec RSC, version dans la plage vulnérable | Correctif urgent |
| 🟡 POTENTIELLEMENT_VULNÉRABLE | Points d'accès RSC trouvés, version inconnue | Investiguer et corriger |
| 🟢 NON_VULNÉRABLE | Version corrigée confirmée | Surveiller les mises à jour |
| 🔵 INCONNU | Impossible de déterminer le statut | Vérification manuelle nécessaire |
| ⚪ ERREUR | L'analyse a échoué | Réessayer ou vérifier manuellement |
| Type de résultat | Confiance | Explication |
|---|
| VULNÉRABLE avec version | ÉLEVÉE (90 %+) | Chaîne de version correspondant à une version vulnérable connue |
| VULNÉRABLE via en-tête | ÉLEVÉE (85 %+) | X-Powered-By a exposé une version vulnérable |
| PROBABLEMENT_VULNÉRABLE | MOYENNE-ÉLEVÉE (70-85%) | React 19.x détecté, RSC actif, version non explicitement corrigée |
| POTENTIELLEMENT_VULNÉRABLE | MOYENNE (50-70 %) | Points d'accès RSC répondent, mais version inconnue |
| NON_VULNÉRABLE | ÉLEVÉE (85 %+) | Version corrigée explicitement détectée |
| INCONNU | FAIBLE (<50 %) | Informations insuffisantes collectées |
| Changement de configuration sans reconstruction |
| Vérifier la date de construction |
| Implémentation RSC non standard | Framework personnalisé | Vérification manuelle |
| Scénario | Pourquoi cela se produit | Atténuation |
|---|
| Version supprimée des bundles | Optimisation de production | Vérifier les manifests de construction |
| WAF bloquant les sondes | Contrôles de sécurité | Tester depuis une IP autorisée |
| RSC sur des chemins non standard | Routage personnalisé | Étendre la liste de mots des chemins |
| SPA sans indicateurs SSR | Rendu côté client uniquement | Vérifier les points d'accès API |
| Cache CDN | Peut fournir des informations de version obsolètes |
| Équilibreurs de charge | Peut acheminer vers différentes versions d'application |
| Kubernetes/Conteneurs | Chaque pod peut différer |
| Feature Flags | RSC peut être activé conditionnellement |