لقد أصبحت LiteLLM ذات باب خلفي: قم بمراجعة سلسلة أدوات الذكاء الاصطناعي الخاصة بك هذا الأسبوع
قام فريق TeamPCP بشحن برامج ضارة لسرقة بيانات الاعتماد داخل إصدار LiteLLM واستنزف مفاتيح AWS وGCP وSSH من أجهزة التطوير. خمس عمليات فحص يجب تشغيلها قبل تثبيت النقطة التالية.
في مارس 2026، نشر ممثل التهديد الذي يطلق على نفسه اسم TeamPCP إصدارًا تم التلاعب به من
litellm، مكتبة Python التي تجمع ما يزيد عن 100 من موفري LLM في مكتبة واحدة
واجهة متوافقة مع OpenAI. قام الإصدار بشحن أداة سرقة المعلومات السلكية في مسار ما بعد التثبيت.
أي شخص ركض pip install litellm خلال النافذة تم تسليم مفاتيح SSH الخاصة،
بيانات اعتماد AWS ورموز Azure المميزة وJSONs لحساب خدمة GCP وDocker config.json
الملفات إلى نقطة نهاية يسيطر عليها المهاجم. The Hacker News، وArdan Labs، وSecurity Boulevard
أكد كل منهما الإسناد وقائمة القطع الأثرية المسربة.
LiteLLM ليس غامضا. إنه موجود داخل أطر عمل الوكيل، داخل خطوط أنابيب CI التي تحدد المسار حركة المرور عبر مقدمي الخدمة، داخل دفاتر ملاحظات Jupyter الموجودة على الكمبيوتر المحمول الخاص بعالم البيانات والذي يحمل أيضًا بيانات الاعتماد السحابية طويلة الأمد. أعطى إصدار واحد مخترق للمهاجم محفظة من المزود المفاتيح، ومجموعة من الأدوار السحابية، ومواد SSH للانتقال بشكل جانبي إلى كل ريبو لتلك المفاتيح يمكن أن تصل.
لا يمكنك منع سرقة رمز PyPI الخاص بالمشرف. يمكنك تقليص نصف قطر الانفجار الخاص بك بحيث عندما يتم ضرب مكتبة الذكاء الاصطناعي التالية؛ وسوف؛ كمبيوتر محمول واحد لا يتحول إلى حادثة عبر السحابة. فيما يلي خمس عمليات فحص تستحق إجراءها هذا الأسبوع عبر الذكاء الاصطناعي بأكمله سلسلة الأدوات: LiteLLM، وLangChain، وLlamaIndex، وأغلفة Ollama، وClaude SDKs، وعملاء MCP، وكل إطار الوكيل لديك في الإنتاج.
ما استغرقه TeamPCP بالفعل
ركضت الحمولة في الداخل setup.py وخطاف ما بعد التثبيت. عند الاستيراد أو تثبيته
اقرأ ما يلي من الدليل الرئيسي للمطور ونظام ملفات CI runner:
~/.ssh/id_rsa,id_ed25519، وknown_hosts~/.aws/credentialsو~/.aws/configالملفات الشخصية~/.azure/الرموز وتحديث بيانات الاعتماد- Google Cloud Platform
application_default_credentials.jsonوملفات JSON لحساب الخدمة ~/.docker/config.jsonبما في ذلك الرموز المميزة لمصادقة التسجيل- متغيرات البيئة تبدأ بـ
AWS_,GCP_,OPENAI_,ANTHROPIC_,GITHUB_
كانت قناة exfil عبارة عن HTTPS POST عادي إلى مجال مهاجم يتم تدويره أسبوعيًا. انهاء الخدمة حدث ذلك خلال أيام، لكن تلك النافذة كانت كافية؛ لا يمكن إلغاء تسريب بيانات الاعتماد التي تم تسريبها. إلى الشيكات.
الفحص رقم 1: قم بتثبيت الإصدارات الدقيقة، وليس النطاقات
ال ^1.14.0 و ~=1.48 الأنماط في requirements.txt,
pyproject.toml، و package.json السماح لأي إصدار ثانوي أو تصحيح جديد
لفة في بيئة نظيفة بين عشية وضحاها. هذه هي الطريقة التي تصبح بها نافذة ضارة مدتها ثلاث ساعات
التعرض لمدة شهر. لم يتم إعادة إنشاء ملف القفل الخاص بك أبدًا ولكن ذاكرة التخزين المؤقت لـ CI الخاصة بك سحبت الأشياء السيئة
الإصدار على بنيته الباردة القادمة.
تثبيت الإصدارات الدقيقة. التثبيت بالتجزئة عندما يدعمها النظام البيئي.
مع --require-hashes، ترفض النقطة تثبيت أي شيء لا يتطابق معه SHA-256
ما قمت بإنشائه في وقت القفل. إصدار مخترق بنفس سلسلة الإصدار ولكن a
فشل تجزئة tarball المختلفة في التثبيت. زوج pip-compile --generate-hashes مع أ
وظيفة CI التي تعمل على إعادة إنشاء ملف التجزئة فقط على تحديثات التبعية الصريحة، وليس على تحديثات عادية أبدًا
تثبيت.
يحصل مستخدمو الشعر على نفس شبكة الأمان عبر ملف القفل. مسكتك هو بناء جملة الإقحام في
pyproject.toml; استبدلها بالدبابيس المحددة:
poetry install --sync يزيل أي حزمة غير موجودة في ملف القفل، والذي يتوقف
تبعية طائشة من الاختباء بين عمليات النشر. بالنسبة لأدوات الذكاء الاصطناعي من جانب npm، استخدم
npm ci (لا npm install) في كل تشغيل والتزام CI
package-lock.json.
الفحص رقم 2: عزل بيانات الاعتماد عن قذائف التطوير
قذيفة التطوير التي لديها ~/.aws/credentials مع مفتاح وصول طويل الأمد يتم تحميله
تم توجيه البندقية نحو فاتورتك السحابية وبيانات عملائك. لم تكن LiteLLM بحاجة إلى أوراق الاعتماد هذه
القيام بعملها؛ جلسوا على القرص لأن المطور ركض مرة واحدة aws configure و
لم يتم تنظيفها أبدًا.
نقل بيانات الاعتماد من القرص. قم بتحميلها عند الطلب، واختصر نطاقها، وأبطل الثابتة طبقة:
-
خدمات أمازون ويب:
aws sso loginمع تحديد مدة الجلسة من 8 إلى 12 ساعات. يمسح~/.aws/credentials. كل شيء يجب أن يمر~/.aws/ssoذاكرة التخزين المؤقت التي تنتهي صلاحيتها من تلقاء نفسها. -
Google Cloud Platform:
gcloud auth application-default loginمع--lifetime=43200. إبطال JSONs لحساب الخدمة طويل الأمد الموجود على أجهزة الكمبيوتر المحمولة؛ استخدام اتحاد هوية عبء العمل من CI. -
أزور:
az loginمع الوصول المشروط الذي يفرض أسلوب MFA؛ اقتل رموز التحديث المخزنة الأقدم من 12 ساعة. -
مفاتيح واجهة برمجة التطبيقات: احتفظ بها في 1Password أو Vault أو Doppler. حقن في بداية العملية
عبر
op runأوvault read. لا تقم بتصديرها إلى~/.zshrc.
إذا عثر فريق TeamPCP على رموز جلسة STS منتهية الصلاحية فقط، فسيتوقف نصف قطر الانفجار عند بضع ساعات من الوصول. وقع الحادث لأن المفاتيح طويلة العمر ظلت نصًا عاديًا على القرص، وجاهزة للظهور قراءة.
الفحص رقم 3: قم بفحص كل عملية تثبيت باستخدام وضع الحماية
قبل أن تثق بمكتبة ذكاء اصطناعي جديدة أو بالترقية إلى مكتبة موجودة، قم بتثبيتها في مكان ما لا يمكن الوصول إلى بيانات الاعتماد الخاصة بك. حاوية Docker يمكن التخلص منها ذات إمكانات و يخبرك عزل الشبكة ما إذا كان رمز وقت التثبيت يفعل أي شيء مريب:
نمط الخطوتين مهم. تحتاج الخطوة الأولى إلى الوصول إلى الشبكة للوصول إلى PyPI، لذلك يجب إجراء ما بعد التثبيت
لا يزال بإمكان البرنامج النصي الترشيح. قم بتشغيل الخطوة الأولى على جهاز افتراضي نظيف بدون أسرار وقاعدة خروج DNS
الذي يسجل كل اسم مضيف صادر. الخطوة الثانية تعمل مع --network=none; إذا كان لديك
تحاول المكتبة الاتصال بالمنزل في وقت الاستيراد، ويفشل الاستيراد، وأنت تعلم.
الأفضل: استخدم جهاز microVM يمكن التخلص منه مثل Firecracker أو orb على نظام التشغيل MacOS لنفسه
الشكل بدون نواة Docker المشتركة. بالنسبة لجافا سكريبت، يمنحك نموذج إذن Deno
نفس العزلة بدون حاوية: deno run --allow-net=api.openai.com,api.anthropic.com
agent.ts.
الفحص رقم 4: تحقق من التعرض للاختراق قبل التدوير
إذا كانت مفاتيحك موضوعة على جهاز لمس إصدارًا سيئًا، فقم بتدويرها. لا نقاش. ولكن أيضا التحقق مما إذا كانت الهويات المرتبطة بهذه المفاتيح تظهر بالفعل في عمليات تفريغ البيانات المعروفة؛ كمبيوتر محمول ذلك قد يكون تشغيل إصدار LiteLLM المخترق الشهر الماضي هو جهاز كمبيوتر محمول أعاد مالكه استخدام كلمات المرور من تفريغ مجموعة 2019 1. تحتاج كلتا المشكلتين إلى الإصلاح، ويخبرك الفحص رقم 4 بالحسابات بحاجة إلى الاهتمام الأكثر إلحاحا.
بوتوي /v1/breach/check تلتف نقطة النهاية على نفس مصادر البيانات في معظم IAM للمؤسسات
الأدوات تُدفع مقابل كل مقعد، ولا تكلف شيئًا في الطبقة المجانية:
يمكنك الاطلاع على كل بريد إلكتروني خاص بحساب الخدمة، وكل بريد إلكتروني لمستخدم الجهاز، وكل مطور بشري يمتلك جهاز الكمبيوتر المحمول الخاص به
لمست النافذة. أي بريد إلكتروني مع password_exposed: true يحتاج إلى دوران و
إعادة ضبط MFA القسري قبل المضي قدمًا. قم بتوجيه المخرجات إلى دليل الاستجابة للحوادث الخاص بك؛ واحد
حليقة لكل هوية، عشر دقائق لمؤسسة هندسية مكونة من 50 شخصًا.
الفحص رقم 5: راقب خروجك للخارج
يجب أن تتصل البرامج الضارة بعد التثبيت بالمنزل بطريقة ما. لا يستطيع معظم المطورين تذكر آخر مرة لقد نظروا إلى ما يتحدث إليه جهاز الكمبيوتر المحمول الخاص بهم بالفعل؛ هذه هي الفجوة التي اعتمد عليها فريق TeamPCP.
على الجهاز المشبوه، يخبرك أمر واحد بماهية كل عملية من عمليات Python وNode متصل بـ:
على مستوى الأسطول، ادفع كل كمبيوتر محمول مطور ومشغل CI عبر مخرج الثقة المعدومة القائمة المسموح بها. تمنحك Cloudflare WARP وTailscale ACLs وLittle Snitch نفس الشكل: قم بإدراج أسماء المضيفين التي تحتاجها بالفعل، ثم قم بحظر الباقي، وقم بالتنبيه على الكتل.
تبدو القائمة المسموح بها بهذا الضيق قاسية في الأسبوع الأول. بحلول الأسبوع الثاني، التنبيهات الوحيدة التي تراها هي حقيقي: مكتبة تحاول الوصول إلى وجهة لا يمكنها الوصول إليها. هذا هو بالضبط إشارة إلى أن أداة سرقة معلومات TeamPCP قد تتعثر عند التثبيت.
الشيكات الخمسة في لمحة
| يفحص | جهد | تقليل نصف قطر الانفجار |
|---|---|---|
| قم بتثبيت الإصدارات الدقيقة باستخدام التجزئات | ساعة واحدة لريبو واحد؛ يوم واحد لمونوريبو | يوقف النشر الصامت للإصدار المخترق |
| نقل بيانات الاعتماد إلى جلسات قصيرة الأجل | من 2 إلى 4 ساعات لكل مطور، لمرة واحدة | قبعات exfil إلى 8 إلى 12 ساعة من الوصول بدلا من أشهر |
| وضع الحماية في كل عملية تثبيت | 15 دقيقة لكل تقييم جديد للمكتبة | لا يمكن لرمز وقت التثبيت رؤية الأسرار الحقيقية أو شبكة الإنتاج |
| هويات التحقق من الخرق مرتبطة بالمفاتيح المكشوفة | 10 دقائق لمؤسسة مكونة من 50 شخصًا | يعطي الأولوية للدورات وإعادة ضبط MFA من خلال التعرض المعروف |
| فرض القائمة المسموح بها للخروج على dev وCI | يوم واحد للتكوين، والصيانة المستمرة | يحظر قنوات الهاتف المنزلي التي تسحب البيانات المسروقة |
الوجبات السريعة الرئيسية
- قم بتثبيت الإصدارات الدقيقة، وليس النطاقات. تعتبر علامة الإقحام أو التلدة في ملف القفل الخاص بك بمثابة وعد أن إطلاق سراح الغد آمن. لقد كسر فريق TeamPCP هذا الوعد.
- لا تنتمي بيانات الاعتماد السحابية إلى أغلفة التطوير. تتحول جلسات SSO قصيرة العمر إلى أ بيانات الاعتماد المسروقة في حدث تناوب، وليس خرقًا.
-
يتم تثبيت Sandbox قبل أن تثق بهم. عامل ميناء بأحرف استهلالية و
--network=noneيكفي اكتشاف البرامج الضارة وقت التثبيت بتكلفة 15 دقيقة. -
تدوير بالإضافة إلى التحقق من الخرق. إذا لمست آلة إصدارًا سيئًا، فقم بتدوير كل منها
الهوية التي شاهدتها وقمت بتشغيل كل بريد إلكتروني من خلالها
/v1/breach/checkللعثور على تلك بحاجة إلى إعادة تعيين MFA عاجلة. - قوائم الخروج المسموح بها تلتقط هاتف المنزل. قواعد الثقة المعدومة على أجهزة الكمبيوتر المحمولة وCI تتحول إلى التسلل الصامت إلى حدث صاخب ومسجل وقابل للحظر.
يمنحك Botoi نقاط نهاية HTTP للتحقق من الاختراق والتحقق من التجزئة وفحص SSL وHTTP تدقيق الرأس والبحث عن البيانات الوصفية npm؛ البدائيات التي تحتاجها لتدقيق سلسلة التوريد الحادث دون تثبيت مكتبة أخرى. مفتاح API واحد، 5 متطلبات/دقيقة على الطبقة المجانية، لا تثبيت السنانير. تصفح مستندات تفاعلية أو سلك خادم MCP في Claude Code أو Cursor لاستدعاء نفس نقاط النهاية من المحرر الخاص بك أثناء العمل من خلال قائمة مرجعية.
FAQ
- ما هي إصدارات LiteLLM التي تأثرت وكيف أؤكد أنني نظيف؟
- ظهرت الإصدارات الضارة في مارس 2026 وبقيت على PyPI لفترة كافية للوصول إلى ذاكرة التخزين المؤقت لـ CI وأجهزة الكمبيوتر المحمولة الخاصة بالمطورين في جميع أنحاء العالم. قم بتشغيل pip show litellm لطباعة الإصدار المثبت لديك، ثم قم بمقارنة الإصدار وتحميل الطابع الزمني مقابل الاستشارات الأمنية LiteLLM وسجل إصدار PyPI. إذا قام جهاز بتشغيل pip install litellm أثناء النافذة، فتعامل معه على أنه مخترق: قم بتدوير كل مفتاح سحابي موجود في تلك الصدفة، وأعد النشر من صورة نظيفة، وامسح ~/.aws، و~/.config/gcloud، و~/.ssh الرموز المميزة التي تسبق تاريخ التدوير.
- هل كان هذا خطأ PyPI أم خطأ LiteLLM؟
- كلاهما، وهذا هو الدرس. LiteLLM هي مكتبة شرعية مع مشرف حقيقي؛ استخدم المهاجم قناة إطلاق مخترقة، وليس خطأ مطبعي. لا يزال PyPI لا يتطلب إصدارات موقعة أو 2FA إلزاميًا على الرموز المميزة لكل مشروع، لذلك تتحول بيانات اعتماد التحميل المسروقة إلى برامج ضارة يتم شحنها في دقائق. كان من الممكن أن يؤدي توقيع الحزمة عبر Sigstore والرموز المميزة على نطاق المشرف إلى إيقاف الهجوم عند التحميل.
- هل أحتاج إلى تدوير كل مفتاح AWS أم فقط المفاتيح التي تم لمسها على الأجهزة المتضررة؟
- تدوير كل منهم. يتمحور المهاجمون حول STS، وسلاسل الأدوار، وسياسات الثقة عبر الحسابات في اللحظة التي يكون لديهم فيها مفتاح واحد طويل الأمد. إذا كان الكمبيوتر المحمول أو مشغل CI الذي رأى الإصدار السيئ يحتوي على أي بيانات اعتماد IAM في الذاكرة أو على القرص، فتعامل مع الرسم البياني الرئيسي بأكمله الذي يمكن الوصول إليه من تلك الهوية على أنه ساخن. نفس المنطق لحسابات خدمة Google Cloud Platform ومبادئ خدمة Azure.
- هل يغير Bun أو Deno هذا بالنسبة لأدوات JavaScript AI؟
- قليلا، وليس كثيرا. يقوم Deno بتشغيل تعليمات برمجية ذات أذونات صريحة (--allow-net، --allow-env)، لذلك يتم رفض المكتبة التي تحاول فجأة قراءة ~/.aws/credentials ما لم تمنح حق الوصول إلى نظام الملفات. يحتوي Bun على علامة --frozen-lockfile ولا يقوم بتشغيل البرامج النصية للتثبيت افتراضيًا في الإصدارات الأخيرة. كلاهما عبارة عن تحسينات على إعدادات npm الافتراضية، لكن لا يمنع أي منهما المكتبة من تصفية البيانات بمجرد أن يقوم كود التطبيق الخاص بك بتسليمها بيانات الاعتماد في وقت التشغيل.
- ما الذي يجعل مخاطر سلسلة التوريد لسلسلة أدوات الذكاء الاصطناعي مختلفة عن مخاطر npm أو PyPI العادية؟
- مكتبات الذكاء الاصطناعي قريبة بشكل غير عادي من الأسرار. يحتاج برنامج LLM مثل LiteLLM إلى مفاتيح API لأكثر من 10 موفري خدمات في ملف env واحد. يقرأ وكيل LangChain بيانات اعتماد AWS حتى يتمكن من الاتصال بـ S3 كأداة. يلمس Claude SDK GITHUB_TOKEN لأنك طلبت منه فتح العلاقات العامة. يكون نصف قطر الانفجار لكل تثبيت أعلى من مكتبة الأدوات المساعدة النموذجية؛ يمنحك الإصدار المخترق محفظة من مفاتيح الموفر بالإضافة إلى بيانات الاعتماد السحابية بالإضافة إلى الوصول إلى كود المصدر في طلقة واحدة.
ابدأ البناء مع botoi
أكثر من 150 نقطة نهاية API للبحث ومعالجة النصوص وتوليد الصور وأدوات المطورين. باقة مجانية، بدون بطاقة ائتمان.