يواجه GiveWP، وهو إضافة التبرعات لـ WordPress التي تشغل ملايين المواقع الخيرية، ثغرة أمنية مفاجئة وخطيرة تسمح بتنفيذ التعليمات البرمجية عن بُعد (remote-code-execution). حصلت الثغرة CVE-2026-82222 على درجة 10.0 كاملة في مقياس CVSS، وهي تتيح لأي شخص على الإنترنت تشغيل أوامر عشوائية على الخادم المصاب. يتوفر الإصلاح في الإصدار 4.16.7.2.

لماذا تُعد هذه الثغرة مهمة

يقع GiveWP في قلب عدد لا يحصى من صفحات جمع التبرعات؛ حيث يعتمد أصحاب المواقع عليه للتعامل مع بيانات المتبرعين، ومعالجة المدفوعات، وتخزين معلومات الجلسة. يمكن للمهاجم الذي يستطيع تنفيذ تعليمات برمجية على الخادم الأساسي سرقة بيانات الاعتماد، أو تشويه الموقع، أو الانتقال إلى أجزاء أخرى من الشبكة. وبما أن الثغرة تعمل دون الحاجة إلى تسجيل دخول، فإن الإنترنت العام بأكمله يصبح سطحاً للهجوم.

كيف يعمل الاستغلال

الثغرة ليست مجرد خطأ برمجِي واحد، بل هي سلسلة من ثلاث مشكلات منفصلة تفتح معاً باباً خلفياً.

  1. إلغاء تسلسل غير آمن (Unsafe deserialization) – تقوم الدالة المساعدة safeUnserialize في الإضافة بتحويل الكائنات المتسلسلة إلى عناصر نائبة بدلاً من تجريدها، مما يترك بيانات الكائن الأصلي سليمة.
  2. إعادة إلغاء تسلسل عمياء (Blind re-deserialization) – يتم إدخال البيانات المستخرجة من قاعدة البيانات مرة أخرى في unserialize دون التحقق من صحتها، مما يسمح بإعادة إحياء كائنات مصممة خصيصاً.
  3. سلسلة أدوات TCPDF (TCPDF gadget chain) – تتضمن إضافة GiveWP مكتبة TCPDF لتوليد ملفات PDF، والتي تحتوي على سلسلة فئات (class chain) يمكنها استدعاء أوامر النظام بمجرد إلغاء تسلسل كائن ضار.

يتبع المهاجم تدفقاً من أربع خطوات لا يتطلب وجود حساب مسبق:

  • التسجيل (Registration) – من خلال الربط مع إجراء user_register ، يمكن للمهاجم إنشاء مستخدم WordPress حتى عندما يكون تسجيل الموقع معطلاً.
  • الزرع (Planting) – يقوم المهاجم بتخزين حمولة متسلسلة (serialized payload) في حقل last_name للملف الشخصي الجديد.
  • التسميم (Poisoning) – تجبر عملية تقديم تبرع الإضافة على كتابة تلك الحمولة في جدول wp_give_sessions.
  • التنفيذ (Execution) – عندما تقرأ أي صفحة عامة الجلسة لاحقاً، يتم إلغاء تسلسل الكائن الضار، وتعمل سلسلة أدوات TCPDF، ويتم تشغيل الأمر الذي قدمه المهاجم على الخادم.

الإصلاح

أصدر مطورو GiveWP الإصدار 4.16.7.2 لكسر السلسلة عند كل حلقة:

  • يتم رفض التبرعات التي تحتوي على بيانات متسلسلة بشكل مباشر.
  • تفرض جميع وظائف قراءة البيانات الآن فحوصات صارمة للنوع والمحتوى.
  • يتم حظر سلسلة أدوات TCPDF صراحةً، مما يمنع استدعاءات الطرق (method calls) غير المصرح بها.
  • يتم تنقية حقول الميتا (Meta fields)، بما في ذلك last_name ، قبل التخزين.
  • يتم تشغيل عملية ترحيل لقاعدة البيانات تلقائياً لتنظيف أي حمولات ضارة موجودة.

تحديث الإضافة هو الخطوة الأولى؛ يجب عليك التحقق من تشغيل عملية ترحيل التنقية لإزالة الحمولات الموجودة بالفعل في قاعدة بياناتك.

من هم المعرضون للخطر

أي موقع WordPress يعمل بإصدار GiveWP 4.16.7.1 أو أقدم هو عرضة للخطر، بغض النظر عما إذا كان التسجيل مفعلاً أم لا. يمكن أن تتعرض المنظمات غير الربحية الكبيرة، والجمعيات الخيرية الصغيرة، وصفحات جمع التبرعات الشخصية للخطر. لا يعتمد الهجوم على تكوين خادم معين؛ فأي بيئة PHP تدعم مكتبة TCPDF المرفقة تكون عرضة للاختراق.

وجهة نظر معارضة

يجادل بعض أصحاب المواقع بأن الاستغلال يتطلب من المتبرع تقديم دفعة مالية، وهو ما يرونه حدثاً منخفض الاحتمالية. وتدحض الثغرة هذا التصور: حيث يتم تخزين الحمولة الضارة أثناء خطوة التبرع، ولكن التنفيذ يحدث عند تحميل أي صفحة لاحقة، حتى بدون إتمام عملية الدفع. إن الطبيعة غير المصادق عليها ودرجة CVSS البالغة 10.0 تجعل المخاطر عالية جداً بحيث لا يمكن اعتبارها مجرد قلق نظري.

الخلاصة

تظهر ثغرة CVE-2026-82222 في GiveWP كيف يمكن لمجموعة من الاختصارات البرمجية التي تبدو غير ضارة أن تجتمع لتسبب خرقاً كارثياً. الإصلاح جاهز. يجب على مشغلي المواقع الترقية إلى 4.16.7.2 فوراً، والتأكد من أن عملية الترحيل قد مسحت الحمولات الموجودة، ومراقبة السجلات بحثاً عن أي علامات لنشاط ما بعد الاستغلال. إن تجاهل الإصلاح قد يترك الوجود الرقمي للمنظمة الخيرية — وبيانات متبرعيها — عرضة لجهة خبيثة تسيطر بشكل كامل على الخادم.