CVE-2026-44827 تتيح للمهاجم تنفيذ تعليمات برمجية عشوائية عند تحميل نموذج Hugging Face Diffusers، حتى لو تم إيقاف تشغيل علامة trust_remote_code. أطلق الباحثون على هذه الثغرة اسم “FaceHugger” وتتبعوا أصلها وصولاً إلى حالة سباق (race condition) في عملية تحميل النموذج ذات المرحلتين في المكتبة. ويمكن أن تتأثر أي pipeline تسحب النماذج من الـ hub.

لماذا تكتسب هذه الثغرة أهمية

تُعد Diffusers المحرك الأساسي لنماذج تحويل النص إلى صورة ونماذج الانتشار (diffusion models) الأخرى. وفي يوليو 2026، سجلت المكتبة 8.1 مليون عملية تحميل، مما يعني أن عدداً لا يحصى من مهام CI/CD، وصور الحاويات، وخدمات الاستدلال للمؤسسات تعتمد عليها. تتجاوز هذه الثغرة آلية الأمان الأساسية (trust_remote_code) التي يفعلها المطورون لمنع تشغيل كود Python غير الموثوق المرفق مع النموذج.

كيف يعمل التجاوز

  • التحميل ذو المرحلتين: تقوم Diffusers أولاً بجلب تكوين النموذج (configuration)، ثم يقوم طلب ثانٍ بجلب أوزان النموذج وأي كود مرتبط به.
  • حالة السباق (Race condition): فحص الأمان الذي يدقق في الطلب الأول لا يمتد ليشمل الطلب الثاني.
  • إدراج الحمولة (Payload insertion): يقوم المهاجم الذي يسيطر على الطلب الثاني بحقن كود خبيث تقوم المكتبة بتنفيذه لاحقاً، مما يتجاوز بوابة الثقة تماماً.

بما أن الفحص ينظر فقط إلى الطلب الأولي، فإن تعطيل trust_remote_code يعطي شعوراً زائفاً بالحماية.

خطوات فورية للمطورين

  1. تثبيت إصدار Diffusers في ملف requirements.txt أو ملف القفل (lock file) الخاص بك لمنع التحديثات غير المقصودة إلى إصدار معرض للثغرات.
  2. تجنب سحب النماذج بشكل فوري (on-the-fly) في بيئة الإنتاج. قم بتنزيل النماذج إلى مخزن ملفات موثوق (مثل S3 bucket داخلي) وتحميلها من هناك.
  3. تدقيق مستودعات النماذج قبل الاستخدام. تحقق من أن ملفات كود النموذج تطابق الهاشات (hashes) المتوقعة أو تأتي من مصدر معتمد.
  4. فرض ضوابط حركة المرور الصادرة من الشبكة (network egress controls) بحيث لا تتمكن وكلاء البناء (build agents) وخوادم الاستدلال من الوصول إلى Hugging Face hub العام ما لم تسمح بذلك.
  5. تشغيل تحميل النموذج داخل حاويات معزولة أو بيئات رملية (sandboxes) بصلاحيات محدودة، مما يقلل من تأثير تنفيذ أي كود عشوائي.

الخلاصة:

تظهر ثغرة FaceHugger أن إيقاف تشغيل trust_remote_code ليس كافياً. وإلى أن تقوم بتحديث Diffusers وتحصين مسار استيعاب النماذج (model ingestion pipeline) الخاص بك، سيظل كل سحب لنموذج عن بُعد نقطة دخول محتملة للكود الخبيث.