عنقود استدلال LLM لديك يستمع على المنفذ 5555 — وأي شيء على تلك الشبكة يمكنه تنفيذ تعليمات برمجية بصلاحيات الجذر
قبل أسبوعين، أعلن فريق الأمان في JFrog عن ثغرة بتقييم CVSS يبلغ 9.8، وهو ثاني أعلى تصنيف ممكن. لا يوجد إصلاح. ويوجد دليل استغلال (PoC) عام. والبرنامج المتأثر يقع مباشرة في طبقة الاستدلال لدى واحدة من أكثر حزم خدمة LLM مفتوحة المصدر شيوعًا في العالم.
الثغرة هي CVE-2026-105192، وهي موجودة في LMCache: طبقة التخزين المؤقت الموزّعة للمفاتيح والقيم التي تشغّل vLLM، محرك الاستدلال مفتوح المصدر الذي يعمل الآن على آلاف العناقيد الإنتاجية.
هذا ليس خللًا نظريًا. إنه مسار تنفيذ تعليمات برمجية عن بُعد دون مصادقة، أُعلن عنه في 7 أكتوبر 2026 تحت الاستشارة JFSA-2026-001694382، وإلى حين كتابة هذه السطور، لا يوجد أي إصدار مُصلَّح.
ما الذي تفعله LMCache فعليًّا — ولماذا هي في كل مكان
إذا كنت تشغّل استدلال LLM على نطاق واسع، فمن المحتمل أنك قابلت LMCache بالفعل. إنها ذاكرة تخزين مؤقت موزّعة للمفاتيح والقيم تقوم بتخزين كتل KV cache وإعادة استخدامها (حالات الانتباه الوسيطة التي تهيمن على ذاكرة وزمن استدلال LLM). يدمج vLLM — محرك الاستدلال الذي تستخدمه مؤسسات تمتد من Hugging Face إلى شركات في الشرق الأوسط لخدمة النماذج مفتوحة الأوزان والمضبوطة — LMCache كطبقة التخزين المؤقت الخارجية له في عمليات النشر متعددة العقد.
الفكرة: عندما تحسب عملية عاملة على العقدة A كتلة KV، يمكنها مشاركتها مع عمليات عاملة على العقدة B بدلًا من إعادة حسابها. في الوضع الموزّع، تفتح LMCache مقبس ZeroMQ من نوع ROUTER — افتراضيًا على المنفذ 5555 — حتى تتمكن العمليات العاملة من التسجيل وتبادل كتل التخزين المؤقت عبر الأجهزة.
إنه مسار سريع لخدمة LLM. وهو بلا أي مصادقة.
الثغرة: رسالة تخزين مؤقت تنفّذ تعليماتك البرمجية
إليك الخلل، مُفصَّلًا:
- يستخدم نقل LMCache متعدد العمليات MessagePack مع رمز الامتداد 1 الخاص بـ
DeviceIPCWrapper - أثناء فك الترميز، تُمرّر خطّافة الامتداد في
lmcache/v1/multiprocess/custom_types.pyالبيانات المُضمَّنة إلىDeviceIPCWrapper.Deserialize - تلك الدالة تستدعي
pickle.loads— إلغاء التسلسل الثنائي غير الآمن في Python - يحدث إلغاء التسلسل بينما يعالج الخادم معطيات
REGISTER_KV_CACHE، قبل تشغيل معالج الطلب
بمعنى آخر: أي رسالة تصل إلى خادم التخزين المؤقت على المنفذ 5555 يمكنها تحفيز تنفيذ تعليمات برمجية على المضيف، بصلاحيات المستخدم الذي تعمل به عملية LMCache.
يوضّح دليل الاستغلال العام الخاص بـ JFrog (research.jfrog.com) الأمر من البداية إلى النهاية:
- يرسل المهاجم رسالة MessagePack مُصمَّمة متعددة الأجزاء إلى المنفذ 5555 على أي عقدة LMCache يمكن الوصول إليها
- تتضمن الحمولة المُضمَّنة لـ pickle كائن
DeviceIPCWrapperخبيثًا - عندما يفكّ الخادم تسلسلها، ينفّذ إعادة تركيب pickle أمرًا على نظام التشغيل
- يكتب دليل الاستغلال مخرجات الأمر
idإلى/tmp/zmq_pwn - ثم يسجّل الخادم خطأ نوع — إذ يتلقى المعالج قيمة إرجاع الأمر بدلًا من الغلاف المتوقع. بعد فوات الأوان.
يؤكد دليل الاستغلال التنفيذ. وتعمل الحاوية بصلاحيات الجذر.
من المتأثر
أُدخل مسار فك الترميز المعرّض للثغرة في LMCache 0.3.9 ويظل موجودًا في كل إصدار حتى 0.5.5، وجميع إصدارات المرشح للطرح حتى 0.5.6rc3، وفرع التطوير الذي تمت مراجعته حتى 7 أكتوبر. وهذا يعني:
- أي عملية نشر موزّعة لـ vLLM + LMCache على الإصدارات من 0.3.9 حتى 0.5.6rc3
- عمليات النشر التي تستخدم علم
--hostللارتباط بعنوان IP قابل للتوجيه (وليس localhost فقط) - العناقيد الإنتاجية في تهيئات متعددة وحدات GPU أو متعددة العقد حيث يمكن الوصول إلى عقد التخزين المؤقت عبر الشبكة
حدّدت JFrog صراحةً أن التقييم 9.8 ينطبق على التهيئة التي يمكن الوصول إليها عبر الشبكة. أما عملية نشر vLLM على مضيف واحد حيث لا تفتح LMCache المنفذ المعرّض، فهي غير متأثرة. لكن إذا كنت قد فعّلت الاستدلال متعدد العقد بعناوين قابلة للتوجيه — وهو ما تفعله معظم عناقيد LLM الواقعية — فأنت ضمن النطاق.
ما ينبغي عليك فعله الآن
لا يوجد إصدار مُصلَّح. إليك دليل التخفيف:
- تقييد المنفذ 5555: طبّق قواعد جدار الحماية لضمان أن عناوين IP المحددة لعقد التخزين المؤقت في عنقود LLM لديك فقط هي التي يمكنها الوصول إلى المنفذ 5555. واحجب كل ما عدا ذلك.
- العودة إلى الارتباط بـ localhost: إن كان بإمكانك إعادة تهيئة نشرك مؤقتًا لاستخدام LMCache مع localhost فقط، فافعل ذلك. ستفقد مشاركة التخزين المؤقت بين العقد لكنك ستزيل سطح الهجوم بالكامل.
- استبدال pickle بمعامل تسلسل آمن: توصية JFrog على المدى الأطول هي استبدال إلغاء التسلسل الشبكي القائم على pickle بصيغة تسلسل آمنة (النظام النوعي الأصلي في MessagePack، أو JSON، أو protobuf)، ومصادقة نقل ZeroMQ باستخدام CURVE أو ZAP أو التحقق لكل رسالة عبر HMAC.
- تثبيت إصدارات LMCache والمراقبة: إن كنت على 0.5.x، فراقب متتبّع الإصدارات لصدور نسخة مُصلَّحة. وإلى أن تصدر، تبقى التدابير أعلاه دفاعك الوحيد.
- تدقيق طوبولوجيا عنقودك: تحقّق من العقد التي تشغّل LMCache بعلم
--hostقابل للتوجيه. كل واحدة منها نقطة نهاية محتملة لتنفيذ تعليمات برمجية عن بُعد دون مصادقة لأي شيء يستطيع الوصول إلى المنفذ 5555 على الشبكة الداخلية.
الصورة الأوسع: البنية التحتية للذكاء الاصطناعي أصبحت سطح هجومك
ثغرة LMCache CVE-2026-105192 ليست أول ثغرة حرجة غير مُعالَجة في حزمة خدمة الذكاء الاصطناعي، لكنها واحدة من أكثرها تأثيرًا نظرًا لانتشار هذا البرنامج. أصبحت محركات الاستدلال مفتوحة المصدر مثل vLLM مكوّنات حاملة للأحمال في عمليات نشر LLM الإنتاجية في مختلف أنحاء المنطقة، وسلاسل تبعياتها — بما في ذلك طبقات التخزين المؤقت والمُرمِّزات وأدوات التنسيق — تتقدم بوتيرة أسرع من مراجعة الأمان.
بالنسبة لمنطقة الخليج، حيث تتسارع مبادرات الذكاء الاصطناعي السيادي وعمليات نشر LLM على مستوى المؤسسات، يُعدّ هذا تذكيرًا بأن "أمن البنية التحتية للذكاء الاصطناعي" لم يعد شأنًا هامشيًّا. فالنماذج ليست سوى طبقة الحوسبة. أما سطح الهجوم الفعلي فهو كل ما يحيط بها: التخزين المؤقت، والمنسّق، والحاوية، والشبكة.
في aratech، كنا نعمل على بناء محرك السياق وحلقات التشغيل التي تقوم على هذا النوع من البنية التحتية تحديدًا. نحن نفكر من منظور ما يمكن الوصول إليه، ومن يستطيع الوصول إليه، وما يحدث عندما تصل رسالة غير موثوقة إلى المنفذ 5555 دون أي بيانات اعتماد مرفقة.
هذه هي العقلية التي ينبغي لكل فريق يشغّل استدلال LLM على نطاق واسع أن يفكر بها الآن.