
إثبات المفهوم لـ CVE-2025-22510
إضافة ووردبريس
اسم المكوّن WC Price History for Omnibus
الإصدار المعرّض <= 2.1.4
Slug المكوّن wc-price-history
رابط المكوّن https://wordpress.org/plugins/wc-price-history/
فئة الثغرة A3: Injection
نوع الثغرة PHP Object Injection
مدير المتجر (Administrator أو أعلى)
في إضافة WC Price History for Omnibus الإصدار 2.1.4 وما دونه، يمكن رفع ملفات JSON من خلال قسم 'استيراد بيانات التصحيح' في قائمة 'سجل الأسعار' في لوحة تحكم WooCommerce (/wp-admin/admin.php?page=wc-price-history). يُرسَل ملف JSON المرفوع كحمولة wc_price_history_import_file، وتحدث ثغرة حقن كائنات PHP في قيمة المفتاح 'serialized' من بيانات JSON. من خلال هذه الثغرة، يمكن لمهاجم يملك صلاحيات مدير المتجر حقن كائنات PHP.
على الرغم من أن الإضافة نفسها لا تحتوي على أي سلاسل POP معروفة، إلا أنه إذا تم اكتشاف سلاسل POP في إضافات أو قوالب أخرى على موقع WordPress المستهدف، يمكن للمهاجمين تنفيذ حذف ملفات عشوائية، وسرقة معلومات حساسة، وتنفيذ كود.
جهّز موقع WordPress مثبّتًا عليه إضافة WC Price History for Omnibus الإصدار 2.1.4 أو أقل ومفعّلًا.
لتفعيل هذه الإضافة، يجب أولاً تثبيت وتفعيل إضافة WooCommerce.
لاختبار ثغرة حقن كائنات PHP، أضف الكلاس التالي PoC_POP_Chain_Object إلى أسفل ملف wp-config.php.
class PoC_POP_Chain_Object {
public $message = "";
public function __destruct() {
echo "<mark>Success PoP Chain</mark>";
echo "<br>";
echo "<mark>msg: ". $this->message ."</mark>";
}
}

بعد ذلك، أنشئ ملفًا يحتوي على بيانات JSON التالية.
في بيانات JSON هذه، البيانات المُدخلة في المفتاح
serializedتكون بصيغة كائن PHP مُسلسَل، مما ينشئ نسخة من الكلاسPoC_POP_Chain_Objectالذي أُضيف سابقًا إلى ملفwp-config.phpويُسند السلسلة 'Exploit !!' إلى خاصيةmessage.
{
"serialized": "O:20:\"PoC_POP_Chain_Object\":1:{s:7:\"message\";s:10:\"Exploit !!\";}"
}
عند رفع بيانات JSON عبر قسم 'استيراد بيانات التصحيح' في قائمة 'سجل الأسعار' بلوحة تحكم WooCommerce (/wp-admin/admin.php?page=wc-price-history) والنقر على زر 'استيراد'،
يتم تنفيذ الدالة import_file() المعرَّفة في الكلاس Import داخل الملف /wp-content/plugins/wc-price-history/app/PriorPrice/Import.php. تسترجع هذه الدالة حمولة الطلب wc_price_history_import_file التي تحتوي على ملف JSON، ثم تسترجع البيانات ذات المفتاح serialized من بيانات JSON وتقوم بإلغاء التسلسل عبر الدالة maybe_unserialize.

لذلك، فإن حمولة الطلب wc_price_history_import_file تكون بصيغة JSON، وتحدث ثغرة حقن كائنات PHP أثناء عملية إلغاء تسلسل البيانات المُسلسَلة ذات المفتاح serialized دون أي تحقق.
بعد ذلك، انتقل إلى قائمة 'سجل الأسعار' (/wp-admin/admin.php?page=wc-price-history) في لوحة تحكم WooCommerce. في قسم 'استيراد بيانات التصحيح'، اختر ملف JSON الذي أنشأته سابقًا عبر نموذج رفع الملفات، وانقر على زر 'استيراد' لرفعه.

نتيجةً لطلب الرفع، يمكنك رؤية في بيانات الاستجابة أن الطريقة السحرية __destruct() من الكلاس PoC_POP_Chain_Object المضاف إلى wp-config.php قد نُفِّذت، وعرضت الرسالة التالية.
<mark>Success PoP Chain</mark>
<br>
<mark>msg: Exploit !!</mark>
