إذا كان لديك خادم MLflow لتتبّع التجارب أو تقييم نماذج اللغة، فالأولوية اليوم هي معرفة رقم إصداره. في 27 أكتوبر 2026 نُشرت ثغرة CVE-2026-116692 بدرجة CVSS تبلغ 9.8، وهي تتيح تنفيذ كود Python عن بُعد على الخوادم المتأثرة. هذا المقال يشرح كيف تعمل الثغرة، ومن المعرّض لها، وما الذي تفعله الآن بترتيب عملي، دون أي تهويل.

ما الذي حدث بالضبط؟

MLflow CVE-2026-116692: ثغرة بدرجة 9.8 تنفّذ كود Python على خادمك، وكيف تحمي نفسك — برمجة وتطوير

الثغرة تصيب MLflow من الإصدار 3.12.0rc0 وحتى ما قبل 3.17.0. أي إن الإصدار 3.17.0 هو النسخة المُصلَحة، وليس النسخة المتأثرة. تقع المشكلة في ميزة المُقيِّمين (Scorers) المخصصة لتقييم تطبيقات الذكاء الاصطناعي التوليدي، وتحديداً في الملف mlflow/genai/scorers/base.py.

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

كيف يمكن استغلالها؟

يعتمد الهجوم على سلسلة من ثلاث خطوات متتابعة:

  1. إنشاء تجربة جديدة وتحديد مسار تخزين محلي للمخرجات يشير إلى حزمة قابلة للكتابة تقع ضمن المسار المسموح.
  2. رفع ملف Python عبر واجهات المخرجات (artifacts) المتاحة في الخادم، فيستقر الملف داخل تلك الحزمة.
  3. إرسال طلب إلى واجهة استدعاء المُقيِّم يحدد فيه اسم الوحدة والصنف الذي رفعه المهاجم، فيستورده الخادم وينشئه قبل أي فحص، فينفَّذ الكود.

والنتيجة تنفيذ كود Python بصلاحيات العملية التي تشغّل خادم MLflow. وإذا كانت هذه العملية تملك مفاتيح سحابية أو وصولاً إلى قواعد بيانات، فهذه المفاتيح تصبح عملياً في يد المهاجم.

من المعرّض للخطر؟

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

الإعداد الافتراضي لخادم MLflow لا يفرض مصادقة، وكثير من الفرق تتركه هكذا لأنه "داخلي". هذه الثغرة تذكير بأن الخدمة الداخلية بلا مصادقة هي هدف يكفيه وصول واحد ليصبح بوابة.

ماذا تفعل الآن؟

أولاً: اعرف إصدارك. شغّل pip show mlflow على الخادم، أو افحص وسم صورة Docker إن كنت تستخدم حاوية. إن كان الرقم بين 3.12.0rc0 و3.16.x فأنت ضمن النطاق.

ثانياً: حدّث إلى 3.17.0 أو أحدث. هذا هو الحل الجذري، فالإصلاح يفرض مطابقة تامة للوحدات المسموحة، ويتحقق من وراثة الصنف من الصنف الأساسي للمُقيِّمين.

ثالثاً: إن تعذّر التحديث فوراً، فهناك تخفيفات مؤقتة:

  • اجعل مجلدات Python (مثل site-packages) للقراءة فقط للمستخدم الذي يشغّل الخادم.
  • شغّل الحاوية بمستخدم غير جذر وبنظام ملفات جذري للقراءة فقط (--read-only).
  • فعّل المصادقة وقيّد الوصول إلى الخادم بجدار حماية أو شبكة خاصة.
  • امنع إنشاء تجارب بمسارات تخزين محلية عشوائية من المستخدمين العاديين.

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

حالة الاستغلال

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

دروس تتجاوز هذه الثغرة

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

أسئلة شائعة

هل أنا معرّض إن كنت أستخدم MLflow لتتبع التجارب فقط؟

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

هل يكفي تفعيل المصادقة؟

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

كيف أتأكد أن التحديث نجح؟

أعد تشغيل الخادم ثم تحقق من الإصدار بالأمر نفسه، وتأكد أن الرقم 3.17.0 أو أعلى، ثم اختبر أن مسارات التتبع والتقييم لديك تعمل كالمعتاد.

الخلاصة

CVE-2026-116692 ثغرة خطيرة لكن إصلاحها واضح ومتاح: حدّث MLflow إلى 3.17.0 أو أحدث. وإلى أن يتم ذلك، قيّد الوصول، واجعل مسارات Python للقراءة فقط، وشغّل الخادم بأقل صلاحيات ممكنة، وراجع السجلات إن كان الخادم مكشوفاً. وبعد التحديث، استغل الفرصة لتفعيل المصادقة وإخراج خوادم الذكاء الاصطناعي من وضع "داخلي فلا خطر".

المصادر: GitLab Advisory Database، DEV Community، VulDB