دليل عملي

Drupal Commerce CVE-2026-118539: التحديث وتدقيق الطلبات

الأمان والمراقبة10 دقائق للقراءةعدد الخطوات: 16

تصف النشرة SA-CONTRIB-2026-254، الصادرة في 28 أكتوبر 2026، تجاوزًا للصلاحيات في Commerce Core، الوحدة التي تدير مسار الشراء في كثير من متاجر Drupal. لا تتطلب الثغرة أي مصادقة، وتعلن drupal.org أنها مستغَلة فعليًا. تصحيح الإصدار لا يكفي: فالطلب الذي عُدّل قبل الترقيع يبقى في قاعدة البيانات. وبالنسبة لوكالة تستضيف عدة متاجر، السؤال مزدوج: أيّ المتاجر متأثرة، وأيّها تعرّض للإساءة فعلًا. هذا هو الإجراء، بيئةً بيئة، مع تدقيق للطلبات يُسلَّم للعميل.

المحتويات· الثغرة في فقرة واحدة، والباقي إجراء1/14
  1. 01الثغرة في فقرة واحدة، والباقي إجراء
  2. 02جدول مرجعي: الفرع، الإصدار المتأثر، الإصدار المصحَّح
  3. 03لماذا لا يكفي التصحيح
  4. 04جرد إصدار Commerce في كل متجر
  5. 05النسخ الاحتياطي قبل لمس الشيفرة
  6. 06تحديث متجر واحد
  7. 07إجراء لكل بيئة
  8. 08التطوير وما قبل الإنتاج والإنتاج: الإجراء والإثبات
  9. 09تدقيق الطلبات دون افتراض أسلوب المهاجم
  10. 10ما لا يثبته التدقيق
  11. 11إذا وُجد طلب متناقض
  12. 12نشرات Commerce الأخرى في اليوم نفسه
  13. 13من يتولى علاقة العميل، وماذا تسلّمه
  14. 14التوثيق الرسمي

الثغرة في فقرة واحدة، والباقي إجراء

تخص النشرة SA-CONTRIB-2026-254 وحدة Commerce Core ‏(drupal/commerce). تصنّفها drupal.org بأنها «Highly critical» بدرجة 21 من 25، وتصفها بأنها تجاوز للصلاحيات: فالوحدة لا تحمي بما يكفي بعض المسارات وبعض حقول الكيانات. وتذكر النشرة أن مستوى المصادقة المطلوب هو «الجميع/المجهولون»، وتوضح أن الثغرة قد تترتب عليها آثار مالية على البائع. كما تؤكد أنها مستغَلة فعليًا.

لا تسمّي النشرة المسارات ولا الحقول المعنية. لذلك لا نستنتج شيئًا: لا قائمة مسارات تُحجب، ولا توقيع يُبحث عنه في السجلات. المعرّف CVE-2026-118539 مأخوذ من صفحة النشرة؛ ولم نقارنه بقاعدة NVD، فاذكره بوصفه «المعرّف المنشور في النشرة» إلى أن تتم هذه المقارنة.

جدول مرجعي: الفرع، الإصدار المتأثر، الإصدار المصحَّح

مرّر الجدول أفقيًا

وضعكالحالة بحسب النشرةالإجراء
Commerce 3.x، من 3.0.0 إلى ما قبل 3.3.13معرَّض للثغرةالانتقال إلى 3.3.13 أو أحدث
Commerce 2.x ‏(8.x-2.x)، قبل 8.x-2.41معرَّض للثغرةالانتقال إلى 8.x-2.41 أو أحدث
Commerce 3.3.13 أو 8.x-2.41 مثبَّت مسبقًامصحَّحدقّق مع ذلك الطلبات السابقة للتحديث
Drupal ^10.3 أو 11الفرع 3.x معلَن متوافقًاالتحديث داخل الفرع 3.x
Drupal ^9.3 أو ^10الفرع 2.x معلَن متوافقًاالتحديث داخل الفرع 2.x دون تغيير الفرع في الوقت نفسه
الوحدة غائبة عن `composer.lock`خارج نطاق هذه النشرةسجّل الغياب في الجرد
متجر بلا وصول إلى Composer أو بشيفرة منسوخة يدويًاإصدار مجهولاعرف الإصدار قبل أي استنتاج

لماذا لا يكفي التصحيح

تقولها النشرة صراحة: على المواقع أن تدقق طلباتها، لأن الثغرة مستغَلة. المتجر الذي يُنقل اليوم إلى 3.3.13 ربما زِيرَ قبل ذلك. التحديث يغلق الباب، لكنه لا يصلح طلبًا عُدّل مبلغه أو حالته أو وضع دفعه. ولا تقول النشرة منذ متى بدأ الاستغلال: اختر نافذة تدقيق واسعة، واكتبها في الملف، ولا تختصرها في يوم التحديث.

ثم تأتي عقبة عادية: بلا جرد مركزي لا يعرف أحد أي المتاجر تضم Commerce، ولا في أي فرع. طريقة الجرد هي نفسها المتبعة مع ثغرة إضافة ووردبريس، وقد شرحناها في دليلنا عن Bricksforge. فترتيب العمل: الجرد، النسخة الاحتياطية، التحديث، التدقيق، الإثبات المؤرَّخ. وتأتي أولًا المتاجر التي تحصّل أكثر المدفوعات.

جرد إصدار Commerce في كل متجر

  1. قراءة الإصدار بواسطة Composer

    cd /var/www/boutique-client
    composer show drupal/commerce
    يعرض الأمر الإصدار المثبَّت. بالنسبة للفرع 2.x تتحدث drupal.org عن 8.x-2.41؛ أما Composer فيعرض الرقم دون البادئة 8.x. قارن الرقم لا السلسلة النصية. المسار مثال: كيّفه مع استضافتك.

  2. المقارنة مع Drush

    drush pm:list --type=module --status=enabled --filter=commerce
    تبيّن القائمة هل Commerce مفعَّل وبأي إصدار. قد يحمل الموقع الشيفرة دون تفعيل الوحدة: دوّن ذلك، فالوضع يتغير إن فعّلها أحدهم لاحقًا.

  3. قراءة ملف القفل بدل المجلد

    grep -A1 '"name": "drupal/commerce"' composer.lock
    يقول الملف composer.lock ما هو مثبَّت فعلًا دون تشغيل Drupal. وهي القراءة الأسلم على متجر لا تريد إجهاده أثناء التدقيق.

  4. المرور على كل متاجر الخادم

    find /home -name composer.lock -not -path '*/vendor/*' -exec grep -H -A1 '"name": "drupal/commerce"' {} +
    كل ملف مذكور يحتوي Commerce، ويلي الاسمَ السطرُ version. راجع القائمة: مجلد اختبار منسي أو نسخة احتياطية يُحسبان أيضًا.

  5. تسجيل النتيجة في جدول

    سطر لكل متجر: العميل، المستضيف، المسار، الفرع، الإصدار المرصود، إصدار Drupal، تاريخ القراءة ووقتها. أضف عمودين يُملآن لاحقًا: «التحديث تم» و«تدقيق الطلبات تم». يصبح هذا الجدول القطعة المركزية في الملف المسلَّم للعملاء.

النسخ الاحتياطي قبل لمس الشيفرة

يصعب التراجع عن تحديث وحدة دون نقطة عودة. قبل كل متجر: نسخة من قاعدة البيانات والشيفرة على وسيط لا يمسّه التحديث، مع تدوين تاريخها في الجدول. وفي متجر نشط تتغير القاعدة مع كل طلب: تثبّت النسخة الحالة التي ستقارن انطلاقًا منها الطلبات لاحقًا. لا تستبدلها بالتي تليها ما لم يُغلق التدقيق. تخدم مرتين: للرجوع إلى الوراء، ولإثبات ما كان يحتويه المتجر قبل الإصلاح.

تحديث متجر واحد

  1. تثبيت الحالة

    drush sql:dump --gzip --result-file=/chemin/sauvegarde/boutique-avant.sql
    انسخ أيضًا مجلد المشروع: الشيفرة وcomposer.json وcomposer.lock والملفات. دوّن في الجدول مكان النسخة.

  2. التحقق مما يسمح به قيد Composer

    composer why-not drupal/commerce 3.3.13
    إذا ثبّت composer.json إصدارًا معيّنًا فإن هذا الأمر يسمّي ما يمنع التحديث. المتجر على 2.x يبقى على 2.x ويستهدف 8.x-2.41: تغيير الفرع مشروع مستقل يُخطَّط له على حدة.

  3. تحديث الوحدة وتبعياتها

    composer update drupal/commerce --with-dependencies
    راجع قائمة الحزم المعدَّلة قبل التأكيد: قد تتحرك وحدة Commerce أخرى معها.

  4. تطبيق تحديثات قاعدة البيانات

    drush updatedb -y
    drush cache:rebuild
    ينفّذ الأمر الأول تحديثات المخطط المعلقة، ويفرغ الثاني الذاكرة المؤقتة.

  5. التحقق من الإصدار المثبَّت

    أعد تشغيل composer show drupal/commerce. يجب أن يبلغ الإصدار 3.3.13 في الفرع 3.x، أو الرقم 2.41 في الفرع 2.x. دوّنه في الجدول مع التاريخ والوقت.

  6. إجراء طلب تجريبي

    في بيئة ما قبل الإنتاج، أو في الوضع التجريبي لبوابة الدفع، أضف منتجًا إلى السلة وأتمّ الطلب وتحقق من المبلغ والحالة والدفع. التحديث الذي يعطّل مسار الشراء يجب أن يُكتشف قبل أن يكتشفه العميل.

إجراء لكل بيئة

لا يُطبَّق الإصلاح نفسه بالطريقة نفسها في كل مكان. يحدد الجدول التالي لكل بيئة الإجراء المنتظر والإثبات الواجب حفظه. وبيئة ما قبل الإنتاج العامة تُحسب متجرًا.

التحديثات التلقائية للنظام، الموصوفة في دليلنا عن Debian وUbuntu، لا تمس وحدة Drupal: يبقى هذا الإجراء من شأن الوكالة.

التطوير وما قبل الإنتاج والإنتاج: الإجراء والإثبات

مرّر الجدول أفقيًا

البيئةالإجراءالإثبات الواجب حفظه
الإنتاجنسخة احتياطية، تحديث، `drush updatedb`، طلب تجريبي، ثم تدقيقنسخة مؤرَّخة، الإصدار المرصود، نتيجة التدقيق
ما قبل الإنتاج المتاح من الإنترنتالتحديث أولًا إن كانت الشيفرة مطابقة، أو حمايته بكلمة مرور في الأثناءالإصدار المرصود، الحماية المعتمدة
ما قبل الإنتاج المغلق أو المحليالتحديث وإعادة الطلب التجريبي قبل الإنتاجلقطة للطلب التجريبي، التاريخ
التطويرمواءمة `composer.lock` مع الإنتاج كي لا يعود الإصدار القديم في النشر التاليإيداع ملف القفل، الإصدار المرصود
نسخة أو احتياطي مستعادلا تُعده إلى الخدمة دون التحديثإشارة في ملف العميل

تدقيق الطلبات دون افتراض أسلوب المهاجم

  1. تحديد النافذة

    اختر تاريخ بداية واسعًا ودوّنه. لا تعطي النشرة تاريخ بدء الاستغلال: خذ على الأقل الفترة التي تغطيها نسخك الاحتياطية وسجلاتك، واكتب السبب.

  2. سرد طلبات النافذة

    صدّر الطلبات برقمها وتاريخَي إنشائها وإتمامها وحالتها ومجموعها وعملتها. تكفي واجهة الإدارة. وفي قاعدة البيانات ابدأ بقراءة أسماء الأعمدة:
    drush sql:query "DESCRIBE commerce_order"
    تتوقف الأسماء الدقيقة على إصدارك: لا تفترضها.

  3. البحث عن التناقضات الداخلية

    قارن في كل طلب المجموع بحساب بنوده وتعديلاته. مجموع لا يطابق بنوده، أو خصم لم يضبطه أحد، أو سعر بند يختلف عن الكتالوج: كل تناقض يستحق التحقيق.

  4. المطابقة مع بوابة الدفع

    طلب مكتمل بلا دفعة مقابلة لدى المزوّد، أو دفعة يختلف مبلغها عن المجموع، يستحق الفحص. كشف المزوّد هو المرجع للأموال المحصَّلة: أجرِ المطابقة على الملفات المصدَّرة لا على ما يعرضه المتجر.

  5. مراجعة انتقالات الحالة

    حدّد الطلبات التي تغيرت حالتها دون تدخل بشري ودون دفع متسق: مصادَق عليها دون المرور بالدفع، أو بلغت حالة نهائية في ثوانٍ. تساعد سجلات الوصول في تأريخ ما جرى. لا تفصّل النشرة أي مسار: البحث بالمسار قرينة لا دليل غياب.

ما لا يثبته التدقيق

التدقيق النظيف يقول إنه لا يظهر أي تناقض في الطلبات. ولا يقول إنه لم يُسَأ استخدام الثغرة بأي طلب: فالنشرة تتحدث عن مسارات وحقول كيانات دون تسميتها. اكتب في التقرير ما نظرت فيه وما لم تنظر فيه.

إذا وُجد طلب متناقض

  • لا تحذف شيئًا — احتفظ بالطلب ودفعاته والنسخة المؤرَّخة: هي قطع الملف.
  • أوقف التسليم — امنع الشحن أو الوصول إلى المنتج الرقمي إلى أن يتأكد الدفع لدى المزوّد.
  • أبلغ عميل الوكالة — يذكر تقريرك الطلب والتناقض المرصود والتاريخ والمبلغ المعني.
  • استعلم من مزوّد الدفع — فهو يحتفظ بكشف التحصيلات؛ اطلب تفاصيل المعاملة.
  • احفظ السجلات — انسخ سجلات الوصول وسجلات التطبيق للفترة قبل تدويرها.
  • راجع الحسابات — إذا وجدت حسابًا أو دورًا لم ينشئه أحد، فغيّر كلمات مرور الإدارة ومفاتيح البوابة.
  • قدّر قبل أن تستعيد — العودة إلى نسخة سابقة للحادثة تمحو أيضًا الطلبات المشروعة التي تمت منذ ذلك الحين.

نشرات Commerce الأخرى في اليوم نفسه

في 28 أكتوبر 2026 نشرت drupal.org نشرات أخرى تمس منظومة Commerce، من الرقم 255 إلى الرقم 265: Commerce Core وCommerce Shipping وCommerce License وCommerce Stripe. هي مصنَّفة أقل خطورة من 254، والنشرة 254 وحدها تعلن استغلالًا فعليًا. غير أن إحداها، المتعلقة بـ Commerce Stripe، تبلغ «Critical» ‏(15 من 25).

فلا تحدّث Commerce Core وحدها. اسرد حزم Commerce في كل متجر بالأمر composer outdated 'drupal/commerce*' واقرأ كل نشرة في drupal.org/security قبل أن تقرر.

من يتولى علاقة العميل، وماذا تسلّمه

حين يُعثر على طلب احتيالي يتصل العميل بالوكالة. احتفظ بهذا الدور: الوكالة تتولى العلاقة وتقرير التدقيق وقرار الاسترداد أو الاستعادة. والمنصة تتولى البنية التحتية: حساب معزول لكل عميل، ونسخ احتياطية قابلة للاستعادة، ووصول SSH أو WHM للتحديث دون انتظار تذكرة. لا نعدّل شيفرة تطبيق المتجر مكانك؛ وتحديث Commerce يبقى من شأن الوكالة.

سلّم العميل صفحة مؤرَّخة: الإصدار قبل التحديث وبعده، تاريخ التحديث ووقته، مرجع النسخة الاحتياطية، نافذة التدقيق، عدد الطلبات المفحوصة، التناقضات المكتشفة أو انعدامها، وما لم يُفحص. احتفظ بالنموذج: ستتبع النشرة التالية عن وحدة Drupal التسلسل نفسه، بسطر آخر في الجرد. ويوصف إيقاع المراجعة الشهرية في قائمة تدقيق VPS العميل.

التوثيق الرسمي

نشرة SA-CONTRIB-2026-254
قائمة نشرات الأمان
صفحة مشروع Commerce
توثيق سطر أوامر Composer
توثيق Drush

حافظ على تحكمك في متاجر عملائك

حسابات معزولة لكل عميل، ونسخ احتياطية قبل التحديث، ووصول WHM وSSH لتطبيق الإصلاح دون انتظار، ومواعيد الانتهاء والأسطول ظاهرة في مكان واحد: وتبقى علاقة العميل بيدك.

بحاجة إلى مساعدة؟

تصفّح مركز المساعدة والأسئلة الشائعة، أو تواصل مع فريقنا — معاودة اتصال أو WhatsApp أو بريد إلكتروني. الدعم بـالعربية والفرنسية والإنجليزية.

راسلنا على WhatsAppيُفتح في علامة تبويب جديدة