LiteLLM، دروازه متن‌بازی که بسیاری از تیم‌ها برای هدایت درخواست‌ها به ده‌ها ارائه‌دهنده مدل زبانی از آن استفاده می‌کنند، روز ۲۱ اکتبر نسخه‌ای مخرب منتشر کرد. طبق گزارش رخدادی که مدیرعامل، مدیر فنی و مسئول امنیت شرکت امضا کرده‌اند، نسخه ۱.۱۰۷.۰ پس از آنکه مهاجمان کنترل فرایند انتشار را به دست گرفتند، روی PyPI و ایمیج‌های پروژه در Docker Hub و رجیستری کانتینر GitHub قرار گرفت. شرکت می‌گوید رخداد مهار شده و همه نسخه‌های پیشین امن هستند.

بازه آلودگی کوتاه اما گسترده بود. هر هفت بسته نصبی این نسخه از ساعت ۱۱:۳۹ تا ۱۳:۲۳ به وقت جهانی روی PyPI قابل دانلود بودند. در Docker Hub برچسب‌های v1.107.0 و latest و main-latest و main-stable از ساعت ۱۱:۴۶ تا ۱۴:۲۰ به ایمیجی آلوده اشاره می‌کردند و برچسب‌های مشابه در GHCR تا ساعت ۱۳:۵۱ حذف شدند. آزمایشگاه امنیتی Datadog که شمار دانلود هفتگی این ابزار را حدود ۲۳ میلیون می‌داند، هشدار می‌دهد هر کسی که در این بازه بدون تثبیت نسخه نصب کرده یا از این برچسب‌های متغیر استفاده کرده، ممکن است آسیب دیده باشد. مشتریانی که از رجیستری خصوصی سازمانی LiteLLM استفاده می‌کنند درگیر نشدند.

این بدافزار طوری طراحی شده بود که حتی بدون فراخوانی LiteLLM اجرا شود. هر بسته سه فایل در پوشه site-packages می‌گذاشت: یک فایل pth، یک برنامه سارق و یک اسکریپت sitecustomize. در نتیجه کد مخرب با هر بار اجرای مفسر پایتون فعال می‌شد. بر اساس پرونده OSV درباره بسته‌های مخرب و تحلیل Datadog، این برنامه کلیدهای ابری و فراداده ماشین‌ها، کلیدهای SSH و GPG، رمزهای Kubernetes و Vault و سامانه‌های یکپارچه‌سازی، داده‌های مرورگر و پوشه‌های تنظیمات ابزارهای برنامه‌نویسی مبتنی بر هوش مصنوعی را جمع می‌کرد، رمزگذاری می‌کرد و به دامنه‌ای جعلی شبیه دامنه اصلی می‌فرستاد. اسکریپت دوم هر ساعت نشانی دوردستی را بررسی می‌کرد تا کدی را دانلود و اجرا کند. Datadog می‌گوید آن فایل کنترلی فقط مقادیر آزمایشی داشت و مرحله دوم حمله در عمل دیده نشد.

روایت LiteLLM از چگونگی حمله هنوز اولیه است. شرکت می‌گوید مهاجم توکن‌های خط فرمان GitHub متعلق به سه توسعه‌دهنده را در اختیار داشت. یکی از آنها که به یکی از مالکان سازمان تعلق داشت، برای دور زدن حفاظت شاخه‌ها در فرایند خصوصی انتشار و هدایت آن به مخزن Berri-AI/litellm به کار رفت؛ مخزنی که نامش فقط با یک خط تیره با مخزن اصلی BerriAI/litellm فرق دارد. توکن دوم مرحله تأیید نهایی را پشت سر گذاشت و توکن سوم بعداً سوابق اجرای این فرایند را پاک کرد. برچسب رسمی کد منبع این نسخه هرگز فایل‌های مخرب را در خود نداشت.

منشأ توکن‌ها ناخوشایندترین بخش ماجراست. LiteLLM می‌گوید روی یکی از استقرارهای داخلی خودش که از اینترنت در دسترس بود، حساب کاربری ناشناخته‌ای پیدا کرده و گمان می‌کند مهاجم توکن‌ها را از گزارش‌های همان استقرار خوانده است. شرکت می‌افزاید Claude Code در شرایطی خاص ممکن است توکن احراز هویت خط فرمان GitHub کاربر را در متن پاسخ قرار دهد و اگر پاسخ‌ها ثبت شوند، این توکن در گزارش‌ها باقی می‌ماند. هنوز تأیید نشده که نفوذگر چگونه وارد آن استقرار شده و شرکت به آسیب‌پذیری‌ای که اخیراً وصله شده مظنون است.

این دومین بار در سال جاری است که LiteLLM به ابزاری برای پخش بدافزار تبدیل می‌شود. در ماه مارس نسخه‌های ۱.۸۲.۷ و ۱.۸۲.۸ در کارزاری آلوده شدند که Datadog آن را به گروهی به نام TeamPCP نسبت می‌دهد. شرکت امنیتی OX Security یادآوری می‌کند که این بار ابزارها و زیرساخت حمله متفاوت است و پیوندی میان دو رخداد اثبات نشده است. این ماجرا نشان می‌دهد دروازه‌ای که ذاتاً همه کلیدهای ارائه‌دهندگان مدل یک سازمان را نگه می‌دارد، تا چه حد هدف ارزشمندی است.

توصیه LiteLLM و شرکت‌های امنیتی صریح است. هر کسی که نسخه ۱.۱۰۷.۰ را نصب کرده یا یکی از ایمیج‌های آلوده را اجرا کرده، باید آن ماشین را آلوده فرض کند، پیش از اجرای دوباره پایتون فایل‌های رهاشده را پاک کند، محیط‌ها را با نسخه تثبیت‌شده ۱.۱۰۶.۲ از نو بسازد و همه اعتبارنامه‌های در دسترس، از جمله کلیدهای ارائه‌دهندگان ذخیره‌شده در پایگاه داده پراکسی، را تعویض کند. LiteLLM می‌گوید تحقیقات و جدول زمانی رخداد همچنان به‌روزرسانی می‌شود.

منابع