
إثبات مفهوم وتحليل تقني لـ CVE-2026-12227، وهو ثغرة تضمين ملفات محلية (LFI) بدون مصادقة في إضافة WordPress Visual Composer (<=45.16.0) تتيح تضمين الملفات والتنفيذ عن بُعد (RCE).
CVE-2026-12227 هو ثغرة تضمين ملف محلي (LFI) حرجة (CVSS 9.8) بدون مصادقة في إضافة Visual Composer Website Builder لـ WordPress، تؤثر على جميع الإصدارات حتى الإصدار 45.16.0 ضمناً. تكمن الثغرة في المعامل vcv-template، الذي يسمح للمهاجم بتضمين وتنفيذ ملفات عشوائية على الخادم. يمكن أن يؤدي ذلك إلى كشف بيانات حساسة، أو تجاوز ضوابط الوصول، أو حتى تنفيذ تعليمات برمجية عن بُعد (RCE) بالكامل إذا كانت بيئة الخادم مُهيأة بشكل خاطئ.
CVE-2026-12227
9.8/10
إضافة Visual Composer Website Builder (حتى الإصدار 45.16.0)
السبب الجذري: تُصنَّف الثغرة على أنها CWE-98: التحكم غير السليم في اسم الملف لعبارة Include/Require في برنامج PHP (يُشار إليها غالباً باسم تضمين الملفات عن بُعد في PHP). وهي ناتجة عن خلل منطقي في ملف PageTemplatesController.php، وتحديداً داخل الدالة viewPageTemplate()، التي ترتبط بمرشّح template_include الخاص بـ WordPress عند الأولوية 11 دون أي فحص للمصادقة.
المشكلة الأساسية هي خلل "التحقق ثم التعديل":
التحقق (على المدخلات الخام): يستدعي الكود أولاً دالة validate_file() الخاصة بـ WordPress على القيمة الخام التي يقدمها المستخدم للمعامل vcv-template. صُممت هذه الدالة لرفض المسارات التي تحتوي على تسلسلات اجتياز أدلة حرفية مثل ... في هذه المرحلة، لا يحتوي المدخل الخبيث theme:.theme:./.theme:./.theme:./wp-links-opml.php على أي .. حرفي، لذا يجتاز التحقق.
التعديل (بعد التحقق): مباشرة بعد التحقق، يفحص الكود ما إذا كان نوع القالب هو vc-custom-layout وما إذا كانت القيمة تحتوي على السلسلة theme:. إذا كان الأمر كذلك، فإنه ينفذ str_replace('theme:', '', $current['value'])، مما يزيل جميع حالات theme: من القيمة.
نقطة الوصول (Sink): تُمرَّر القيمة المعدَّلة بعد ذلك إلى locate_template()، التي تحل المسار وتضمّن الملف. ولأن سلاسل theme: قد أُزيلت، تتحد تسلسلات الاجتياز المُجزَّأة معاً، مما ينشئ مساراً صالحاً مثل ../../../../wp-links-opml.php لم يتم التحقق منه أبداً في شكله النهائي.
سطح الهجوم: ناقل الهجوم: الشبكة (AV:N) — الثغرة قابلة للوصول مباشرة عبر HTTP/HTTPS.
المصادقة: لا يُشترط أي شيء (PR:N) — إنها ثغرة بدون مصادقة. يمكن لأي مهاجم عن بُعد تفعيلها دون حساب صالح.
تفاعل المستخدم: لا يُشترط أي شيء (UI:N).
المكوّن المتأثر: إضافة Visual Composer Website Builder لـ WordPress.
المعامل الثغرة: المعامل vcv-template، المستخدم بالاقتران مع المعامل vcv-template-type.
شرط التفعيل: يجب أن تكون الإضافة مثبّتة ونشطة على موقع WordPress، ويجب أن تكون صفحة الواجهة الأمامية مبنية بـ Visual Composer (أي يجب أن يوجد رابط دائم عادي).
ملاحظات الاستغلال: التأثير: تسمح الثغرة لمهاجم غير مُصادَق بتضمين وتنفيذ ملفات محلية عشوائية على الخادم. ولأن ملفات PHP المُضمَّنة تُنفَّذ، يمكن أن يؤدي ذلك إلى تنفيذ تعليمات برمجية عن بُعد (RCE)، مما يسمح باختراق كامل لسرية الخادم وسلامته وتوافره.
تقنية الاستغلال: يمكن للمهاجمين استغلال ذلك عبر صياغة قيمة vcv-template خبيثة تستخدم البادئة theme: لتجاوز التحقق، كما هو موضح في السبب الجذري. على سبيل المثال، قد يبدو الطلب كالتالي: POST /?vcv-template-type=vc-custom-layout&vcv-template=theme:.theme:./.theme:./.theme:./wp-links-opml.php.
تصعيد RCE: بينما تُعدّ LFI نفسها حرجة، فإن تحقيق RCE غالباً ما يعتمد على بيئة الخادم. من الطرق الشائعة تضمين ملف تم رفعه بالفعل إلى الخادم (مثل ملف صورة يبدو غير ضار يحتوي على تعليمات PHP مضمّنة) أو الاستفادة من إعدادات خاطئة أخرى على الخادم.
توفر PoC: تتوفر عدة استغلالات إثبات مفهوم (PoC) بشكل عام، بما في ذلك سكربت Python وقالب Nuclei، والتي يمكن استخدامها للتحقق في بيئة مختبرية مصرّح بها
[*] كود Python المذكور أعلاه
إصدار التصحيح: 45.16.1