سيبرانا
أخبارعاجلحرجة

ثغرة يوم-صفر غير مُصلَحة في Magento وAdobe Commerce تُستغل لزرع أبواب خلفية في المتاجر الإلكترونية

Sansec تكشف «StyleSmuggler»: تنفيذ شفرة دون تسجيل دخول على خوادم المتاجر، مع غرسة Rust تتنكّر في هيئة خيط نواة لينكس. أدوبي لم تُصدر تنبيهًا ولا معرّف CVE ولا تصحيحًا حتى الآن، وكل الإصدارات الحالية متأثرة بما فيها 2.4.9. النصيحة المؤقتة: عطّل GraphQL.

نُشر
4 دقائق قراءة
مشاركة:XLinkedInFacebookTelegramWhatsApp
مجسّم لواجهة متجر إلكتروني زجاجية مضيئة ليلًا، وتحت أرضيته الشفافة غرسة معدنية داكنة تمتد منها كابلات مضيئة إلى داخل المتجر دون أن تُرى من الشارع
رسم توضيحي — سيبرانا

يستغل مهاجمون ثغرة جديدة غير مُصلَحة في Magento Open Source وAdobe Commerce تتيح لهم تنفيذ شفرة خبيثة على خادم المتجر دون تسجيل دخول، بحسب تنبيه نشرته شركة أمن التجارة الإلكترونية الهولندية Sansec في 5 سبتمبر ونقله The Hacker News. أطلقت Sansec على الثغرة اسم StyleSmuggler وقالت إن الهجمات بدأت في 4 سبتمبر: «ننشر مبكرًا لأن المتاجر تُخترق الآن».

من المتأثر؟

قالت Sansec إن كل الإصدارات الحالية متأثرة، بما فيها 2.4.9، وإنها أعادت إنتاج سلسلة الاستغلال الكاملة دون مصادقة على منشآت Magento Open Source نظيفة بالإصدارات 2.4.7 و2.4.8 و2.4.9. أول ضحية رصدتها كانت تشغّل 2.4.6-p15 مع تحديثات يوليو وأغسطس 2026 الأمنية مطبّقة — أي أحدث مستوى تصحيح تقدّمه أدوبي لهذا الخط.

لم تنشر Sansec إعادة إنتاج على Adobe Commerce أو Adobe Commerce on Cloud، ولم تؤكد أدوبي الإصدارات المتأثرة، ولم تُعلن Sansec عدد المتاجر المخترقة.

«حالة التصحيح لم تكن ذات صلة هنا، وهذا ما يحتاج التجار إلى سماعه أكثر من أي شيء.» — Disrex Group لـ The Hacker News

كيف يعمل الهجوم؟

بحسب مخطط Sansec، يعمل الهجوم على مرحلتين:

  1. تلويث ملف يكتبه Magento بنفسه — مثل تقرير عطل يولّده النظام — بشفرة PHP مضمّنة.
  2. إجبار Magento على تنفيذ ذلك الملف عبر تشغيل رسالة البريد القياسية «Payment Transaction Failed Reminder». تعمل الشفرة أثناء عرض Magento للرسالة، فلا يحتاج أحد إلى فتحها، وينجح الهجوم حتى لو فشل إرسال البريد.

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

الغرسة: Rust يتنكّر في خيط نواة

الغرسة عملية خلفية تتخفى تحت الاسم [kworker/u:8:0] — اسم يعود لخيط في نواة لينكس — ببرنامج Rust ثابت الربط بحجم 1.9 ميغابايت لمعماريتي x86-64 وarm64، مثبَّت في ~/.local/share/.gvfsd/gvfsd-user تحت مجلد المستخدم لا داخل جذر الويب، مع إدخال cron يعيد تشغيله كل خمس دقائق ويُكتب مباشرة في ملف spool فلا يظهر استبدال crontab في سجل النظام. في أحد المتاجر تكررت السطر 1,728 مرة، وأعادت الغرسة إضافته خلال ثانية من حذفه.

تفصيل مهم من Disrex: على أحد المتجرين لم تُجرِ الغرسة أي اتصال خارج؛ احتفظت بـ 28 اتصالًا إلى Redis المحلي وقرأت تخزين جلسات Magento منه — أي أن قواعد الجدار الناري الخارجة وحدها لا تكشفها. وعلى المتجر نفسه كان الملف التنفيذي في الذاكرة بناءً مختلفًا عن الملف على القرص.

كيف تكتشفها؟

أين تبحث

ما تبحث عنه

var/report/ وvar/log/system.log

علامة بشكل X-TRACE- أو X- متبوعة بعشرة أحرف سداسية — ابحث عن الشكل لا النص الحرفي؛ فحص Sansec المنشور يغطي var/report فقط وفاته كلا متجري Disrex

system.log

خطأ TypeError من array_merge() بوسيطة عددية مباشرة بعد التضمين = نجح الاستغلال (متغير أخفى لا يترك شيئًا)

قائمة العمليات

عملية باسم بين أقواس مربعة مملوكة للمستخدم غير root ولها ذاكرة مقيمة — خيط النواة الحقيقي مملوك لـ root بلا ذاكرة. فحص حقل comm لا يكفي؛ استخدم /proc/<pid>/exe

بريد المالك

رسائل «Payment Transaction Failed Reminder» بقوالب غير مفكوكة ({{var ...}} خام)، عنوان عميل على نطاق .invalid، ومجموع صفر — أوضح إنذار مبكر ولا يحتاج أدوات

مؤشرات منشورة (Sansec وDisrex)
filename[kworker/u:8:0]اسم العملية المنتحَل — مملوكة لمستخدم غير root
filename~/.local/share/.gvfsd/gvfsd-userالغرسة على القرص
filename/tmp/.kw_<random> · /tmp/.gvfsd_<8hex>.lockملفات مؤقتة وقفل
sha256e315687a1dfe61ef4a5a5642214db6d3b2b05d81391285eebc2af664641a26a7عينة Sansec
sha2568334b434fa3fe9f59cebe9609b11e0b1fd19d10212c45c705adec1902a1d06efعلى القرص في متجري Disrex
sha256251fabd50d7b18a8b5e1b3ef5d64e7198c17244778f6461fb1ab07f6169bf220في الذاكرة على أحد المتاجر
domain247[.]cdnflare[[.]]xyzمضيف تنزيل الغرسة
ipv499[.]84[.]67[[.]]186:443تحكّم عبر WebSocket/TLS (Sansec)
ipv488[.]216[.]72[[.]]181 · 5[.]181[.]86[[.]]133مصادر الهجوم

الروابط والعناوين معطَّلة (defanged) للحماية

ماذا تفعل حتى يصدر الإصلاح؟

  1. عطّل GraphQL مؤقتًا — نصيحة Sansec للمتاجر التي لا تستخدم منتجها Shield. تنبيه: واجهات headless وتطبيقات PWA تحتاج GraphQL؛ أغلب الواجهات الكلاسيكية وHyvä لا.
  2. قواعد nginx/Apache من Disrex تحجب معاملات الاستغلال في سلسلة الاستعلام — لكن اختبار Disrex نفسه أظهر أن المعاملات ذاتها في جسم POST أو JSON تصل إلى PHP. هذه القواعد توقف الحملة بشكلها الحالي لا الثغرة.
  3. تعديل Disrex الرئيسي: إضافة فحص إلى ثلاث دوال في ماسحات حقن الاعتماديات يمنع تشغيلها خارج سطر الأوامر. يُلغى مع كل composer install، فالشركة تنشر أيضًا رقعة composer.
  4. وسّع نطاق الفحص: eComscan أعطى نتيجة «نظيف» على متجر مصاب لأنه فحص جذر المستند بينما الغرسة تجلس مجلدًا أعلى. افحص مجلد المستخدم كاملًا.
  5. دوّر بيانات اعتماد Magento أينما وُجدت العملية، حتى دون دليل على استخدام الباب الخلفي.
  6. راقب إصدار أدوبي في 8 سبتمبر وطبّقه فور صدوره إن غطّى الثغرة.

*سنحدّث هذا التقرير عند صدور تنبيه أدوبي أو التفصيل التقني الكامل من Sansec.*

المصادر والمراجع

  1. Unpatched Magento and Adobe Commerce Zero-Day Exploited to Backdoor Online StoresThe Hacker News
  2. Sansec — StyleSmuggler advisorySansec
  3. Disrex Group — incident-response repository and mitigationsDisrex
مشاركة:XLinkedInFacebookTelegramWhatsApp
ليلى الحربي

عن الكاتب

ليلى الحربي

رئيسة التحرير

ملف تعريفي تجريبي لأغراض العرض. تغطي «ليلى» الثغرات الأمنية والاستجابة للحوادث، وتشرف على السياسة التحريرية وعمليات التحقق.

  • الثغرات الأمنية
  • الاستجابة للحوادث
  • السياسة التحريرية
كل مقالات ليلى الحربي