تنفيذ الأوامر عبر Pingback في WordPress وBrotli
أساليب الهجوم وتقنياته2026-11-06, 14:02
أثبت الباحثون كيف يمكن استخدام ميزة pingback المدمجة في WordPress للوصول إلى ثغرة CVE-2026-111497 في مفكك ترميز Brotli الأصلي. العيب ليس في نواة WordPress بل في مكتبة Google Brotli، التي يستخدمها libcurl لمعالجة استجابات HTTP المضغوطة. ونتيجة لذلك، يمكن لطلب واحد غير مصادق عليه إلى
xmlrpc.php أن يحفز ثغرة في مفكك الترميز الأصلي، مما قد يؤدي إلى تعطل عملية PHP أو، في ظروف محددة، إلى تنفيذ أوامر.ما المشكلة؟
عند معالجة pingback، يرسل WordPress طلبًا صادرًا إلى URL المحدد. إذا استجاب الخادم البعيد بترويسة
Content-Encoding: br، فإن libcurl يستدعي مفكك ترميز Brotli الأصلي. في إصدارات المكتبة المصابة (1.0.3–1.2.0)، يؤدي تدفق مضغوط مصمم خصيصًا إلى كتابة خارج الحدود (CWE-787).كيف يعمل الاستغلال
• التسليم. يرسل المهاجم
pingback.ping إلى xmlrpc.php، محددًا URL يشير إلى خادمه الخاص. لا يلزم المصادقة؛ يحتاج الموقع فقط إلى وجود منشور واحد على الأقل يقبل pingbacks.
• الطلب. يستدعي WordPress الدالة wp_safe_remote_get()، التي تستخدم libcurl لجلب URL المحدد. يستجيب خادم المهاجم بتدفق مضغوط بـ Brotli مصمم خصيصًا.
• فك الترميز. يمرر libcurl التدفق إلى مفكك ترميز Brotli الأصلي. يكتب الإصدار المصاب خارج الذاكرة المخصصة.
• التأثير. بشكل عام، يمكن لهذه السلسلة أن تتسبب في تعطل عملية PHP، مما يؤدي إلى حجب الخدمة. تحت ظروف المختبر، وعلى بناء محدد (WordPress 7.1.3، Debian 13.7، PHP 8.3.36)، حقق الباحثون تنفيذ أوامر. ومع ذلك، تعتمد هذه القدرة بشكل كبير على تخطيط الذاكرة وإصدارات جميع المكونات المعنية، لذا فهي ليست عالمية.تجدر الإشارة أيضًا إلى أن الحمولة لا تُرسل في الطلب إلى WordPress. بل تُسلَّم في استجابة HTTP من خادم المهاجم، لذا فإن الأدوات التي تفحص الطلبات الواردة لا ترى حمولة الاستغلال الفعلية. في سلسلة الاستغلال الموضحة، يرسل WordPress طلبي GET صادرين إلى URL الذي يتحكم به المهاجم ضمن طلب PHP واحد. الطلب الثاني هو إعادة محاولة ناتجة عن خطأ فك ترميز المحتوى، مع تعطيل فك ترميز Brotli. تحتوي استجابته على اسم ترويسة يتحكم به المهاجم يعالجه WordPress باستخدام دالة
strtolower() في PHP. بسبب تلف الذاكرة الناتج عن الاستجابة الأولى، يمكن إعادة توجيه هذا الاستدعاء إلى دالة system() في PHP، مما يؤدي إلى تنفيذ أوامر.