نسخة ملغومة من مكتبة LiteLLM بقيت على PyPI ساعتين وكانت تعمل مع أي عملية Python
في 21 أكتوبر 2026 رُفعت النسخة 1.107.0 من مكتبة LiteLLM على PyPI بين الساعة 11:39 و11:40 بتوقيت UTC، وفي داخلها برنامج يسرق المفاتيح. وبحسب تحليل SafeDep، لوحظ اختفاء النسخة الساعة 13:40، أي أنها بقيت متاحة نحو ساعتين، وأكد فريق LiteLLM عزلها الساعة 13:50.
وLiteLLM مكتبة يستخدمها كثيرون بوابةً بين التطبيق وموديلات الذكاء الاصطناعي، وتُنزَّل أكثر من 3 ملايين مرة يوميًا بحسب pypistats.
كانت الحيلة في ملف صغير اسمه cook.pth. فـ Python يقرأ ملفات .pth في مجلد الحزم مع كل تشغيل، وينفّذ أي سطر فيها يبدأ بكلمة import. والنتيجة أن البرنامج الخبيث يعمل مع أي عملية Python على الجهاز، حتى لو لم يستورد الكود مكتبة litellm أبدًا. وكان يجمع مفاتيح SSH وبيانات الدخول إلى السحابة وأسرار الـ CI ومفاتيح مزوّدي الموديلات.
وبحسب تحديث فريق LiteLLM، نُشر الإصدار من حسابات 3 مهندسين، ويبدو أن ذلك تم عبر OAuth tokens مسروقة لأداة GitHub CLI. ويقول الفريق إنه لم يحدد بعد طريقة الاختراق الأصلية. وفي اليوم نفسه أطلقت GitHub خيارًا في GitHub CLI، من النسخة 2.103.0، يجعل الـ token ينتهي ويتجدد تلقائيًا بدل أن يبقى صالحًا بلا حد.
وتكشف الحادثة قيمة فترة الانتظار قبل قبول أي إصدار جديد. فأداة uv تقبل إعداد exclude-newer بقيمة مثل 7 days، وpip يقبل --uploaded-prior-to بقيمة مثل P3D. ومع هذا الإعداد لا يدخل الإصدار الجديد إلا بعد أن يمر عليه بضعة أيام يكون المجتمع قد فحصه خلالها، وإصدار عاش ساعتين لن يصل إلى المشروع أصلًا.
ومن ثبّت النسخة 1.107.0 في أي وقت، فوجود cook.pth داخل site-packages هو العلامة، وتصبح الأسرار التي كانت على الجهاز بحاجة إلى تغيير.