## https://sploitus.com/exploit?id=853B8210-3FE8-562A-B254-B1A583577990
# React2Shell - Preuve de Concept
**CVE-2025-55182**
Ce projet a été réalisé dans le cadre d'un projet de veille technologique à l'Université de La Rochelle (Licence Professionnelle Métiers Informatiques Applications Web parcours développeur fullstack).
Il s'agit d'une preuve de concept (PoC) qui démontre comment une vulnérabilité dans les "Server Actions" de Next.js (CVE-2025-55182) peut être exploitée pour lire des fichiers sensibles sur le serveur et les exfiltrer.
## Avertissement
Ce code est fourni **uniquement à des fins éducatives**. Il vise à illustrer un problème de sécurité potentiel et à sensibiliser les développeurs. Ne l'utilisez jamais sur des systèmes pour lesquels vous n'avez pas une autorisation explicite.
## Structure du Projet
- `next/`: Une application web Next.js intentionnellement vulnérable. Elle contient un formulaire de connexion qui utilise une Server Action.
- `exploit/`: Contient les scripts de l'attaquant :
- `server.ts`: Un serveur d'écoute pour recevoir les fichiers exfiltrés.
- `exploit.ts`: Le script qui envoie la charge utile malveillante à l'application Next.js.
## Fonctionnement de la Vulnérabilité
L'exploit tire parti de la manière dont certaines versions de Next.js traitent les données envoyées aux Server Actions.
1. L'application `next/` expose une page avec un formulaire de connexion. La soumission de ce formulaire est gérée par une Server Action.
2. Le script `exploit/exploit.ts` n'utilise pas le formulaire. Il envoie directement une requête `POST` à l'endpoint de la Server Action avec une charge utile (`payload`) spécialement conçue.
3. Cette charge utile est structurée de manière à tromper le framework Next.js pour qu'il exécute du code arbitraire sur le serveur. Dans ce PoC, le code :
- Lit le contenu des fichiers `.env.local` et `connexion.json`.
- Envoie le contenu de ces fichiers au serveur de l'attaquant (`exploit/server.ts`).
4. Le script `exploit/server.ts` tourne en arrière-plan, écoute sur le port 5001, et sauvegarde les informations reçues dans `save_env.txt` and `save_json.json`.
## Prérequis
- [Node.js](https://nodejs.org/) (version 18 ou supérieure recommandée)
- [Bun](https://bun.sh/) (utilisé pour le serveur d'écoute de l'exploit)
## Installation
1. **Application Next.js (Vulnérable)**
```bash
cd next
npm install
```
*Note : L'application est configurée avec des versions de démonstration (`next: 16.0.6`).*
2. **Scripts d'Exploit**
Les scripts de l'exploit n'ont pas de dépendances externes à installer via npm, mais nécessitent `bun`.
## Guide d'Utilisation
Pour voir l'exploit en action, vous aurez besoin de 3 terminaux distincts.
1. **Terminal 1 : Lancer le serveur d'écoute de l'attaquant**
Ce serveur recevra les fichiers volés.
```bash
cd exploit
bun run server.ts
```
Le terminal affichera `Server running at http://localhost:5001`.
2. **Terminal 2 : Lancer l'application Next.js vulnérable**
```bash
cd next
npm run dev
```
L'application sera accessible sur `http://localhost:3000`. Vous pouvez y naviguer pour voir le formulaire de connexion, mais il n'est pas nécessaire de l'utiliser pour l'exploit.
3. **Terminal 3 : Exécuter le script d'exploit**
Ce script enverra la charge utile malveillante.
```bash
cd exploit
bun run exploit.ts
```
Le terminal affichera `Start fetching...` puis `fetched ...`.
## Résultat
Après l'exécution du script d'exploit, vérifiez le contenu du dossier `exploit/`. Deux nouveaux fichiers auront été créés :
- `save_env.txt`: Contient les variables d'environnement du serveur.
- `save_json.json`: Contient les identifiants qui auraient été sauvegardés par l'application.
Cela prouve que l'attaquant a réussi à lire des fichiers sur le serveur et à les exfiltrer.