LiteLLM 1.107.0 به خطر افتاده در PyPI یک سرقت کننده اعتبار و درپشتی را نصب می کند
آدرس مقاله: https://safedep.io/litellm-pypi-compromise-credential-stealer-backdoor/ آدرس نظرات: https://news.ycombinator.com/item?id=50181114 امتیاز: 293 # نظرات: 108
نسخه LiteLLM 1.107.0 در PyPI دارای یک سرقت کننده اعتبار و یک درب پشتی اجرای کد از راه دور است. هر هفت چرخ (لینوکس، macOS، ویندوز) آنها را به عنوان سه فایل در بسته های سایت نصب می کنند. هر دو زمانی اجرا می شوند که هر فرآیند پایتون روی هاست شروع شود، حتی فرآیندی که هرگز litellm را وارد نمی کند. منبع GitHub بالادست آنها را شامل نمی شود. PyPI از آن زمان انتشار را حذف کرده است.
نسخه های 1.106.2، 1.107.0rc1 و 1.107.0rc2 تمیز هستند. بسته های همراه که پین 1.107.0، litellm-proxy-extras==0.4.110 و litellm-enterprise==0.1.78 هستند، نیز تمیز هستند.
نصب litellm==1.107.0 سه فایل را در پکیج های سایت قرار می دهد. پایتون هر بار که شروع می شود، دو عدد از آنها را بارگذاری می کند.
pyproject.toml در توزیع منبع 1.107.0 (sdist) یک خط اضافی در بخش ساخت maturin دارد:
تنظیمات maturin data = "cook" یک پوشه cook/cook را در litellm-1.107.0.data/purelib/ در چرخ کپی می کند. pip آن پوشه را در بستههای سایت نصب میکند.
sdist پوشه cook/ را کنار می گذارد، بنابراین این خط تنها تغییر قابل مشاهده است. هیچ تعهد عمومی در BerriAI/litellm حاوی داده = "آشپز" یا آشپز/پوشه نیست.
چرخ RECORD سه فایل اضافه شده را فهرست می کند:
تگ v1.107.0 به 66c8f5b (06:59 UTC) اشاره می کند. pyproject.toml آن نسخه = "1.108.0" را می گوید. SafeDep هر فایل sdist را با درختان git با هش blob مقایسه کرد. sdist با commit اصلی بعدی، a8113b0 (08:50 UTC)، به اضافه پنج فایل ویرایش شده و پوشه cook/cook مطابقت دارد.
چهار مورد از فایل های ویرایش شده فایل های Cargo.toml هستند که یک خط readme = "README.md" دریافت می کنند. نسخه های قانونی 1.106.2 و rc2 دارای ویرایش یکسانی هستند. پنجمین pyproject.toml است که در اینجا با a8113b0 مقایسه شده است:
ویرایش، نسخه را به 1.107.0 برمی گرداند و بسته های همراه را به مقادیر rc2 پین می کند. در نتیجه، تفاوت وابستگی در برابر rc2 هیچ چیز غیرعادی را نشان نمی دهد. sdist قانونی 1.106.2 با تگ commit 49943cd خود به جز خطوط Readme Cargo.toml مطابقت دارد.
چرخ های مخرب با خروجی خط لوله انتشار معمولی BerriAI مطابقت دارند:
هیچ GitHub Actions عمومی اجرا نشده یا منتشر شده است. SafeDep همه 539 اجرا را بین ساعت 09:30 تا 12:30 UTC بررسی کرد. در ساعت 11:50 UTC، حدود 10 دقیقه پس از آپلود PyPI، litellm-dispatcher[bot] نسخه GitHub نسخه 1.107.0 را منتشر کرد. همین تاخیر برای 1.106.2 رخ داد. PyPI هیچ گواهی منشا برای 1.107.0، 1.106.2 یا rc2 ندارد.
SafeDep با اطمینان متوسط تا بالا ارزیابی میکند که خط لوله انتشار خصوصی BerriAI این چرخها را از یک منبع git اصلاحشده توسط مهاجمان ساخته است. مهاجم میتواند از یک نگهدارنده یا اعتبار ربات آسیبدیده، یک شعبه یا آینه خصوصی یا مرجعی که خط لوله از آن ساخته میشود استفاده کند. یک توکن PyPI سرقت شده که از ماشینهای خود مهاجم استفاده میشود، با شواهد کمتری مطابقت دارد. فقط گزارش های خط لوله BerriAI می تواند علت را تأیید کند.
در هنگام راهاندازی، پایتون هر خطی را که با import شروع میشود، در یک فایل pth. در بستههای سایت اجرا میکند. cook.pth حاوی import cook است، بنابراین دزد در هر فرآیند پایتون روی میزبان اجرا میشود: برنامه، پیپ، سرورهای زبان IDE و کارهای CI.
cook.py حدود 61 کیلوبایت پایتون را در یک لایه exec (zlib.decompress(base64.b64decode('...')) قرار می دهد. کد رمزگشایی شده با این پیکربندی شروع می شود:
پایتون هنگام راه اندازی سایت را سفارشی می کند، بنابراین این فایل در هر فرآیند پایتون نیز اجرا می شود.
مهاجم میتواند با ویرایش domain.txt دیمون را به سمت سرور جدیدی هدایت کند. هر میزبان آلوده هر چیزی را که سرور به عنوان کدی برمی گرداند اجرا می کند.
در ساعت 13:40 UTC، حساب GitHub letters9813 و مخزن آن، حدود دو ساعت پس از انتشار، 404 را برگرداندند. اکنون درب پشتی هیچ آدرس سروری را پیدا نمی کند و هیچ کاری انجام نمی دهد. میزبان هایی که دیمون را قبل از حذف اجرا می کردند، می توانستند کد مرحله دوم را دریافت کرده و اجرا کنند. SafeDep نتوانست آدرس سرور را بازیابی کند.
فایل های کاشته شده به دلیل انتهای خط CRLF دارای هش های مختلفی در ویندوز هستند:
برای آخرین به روز رسانی ها و بینش ها در مورد امنیت و مهندسی منبع باز دنبال کنید
یک مهاجم تعهدات جعلی را به شاخه های پیش فرض hugo-paper و mevn-cli هل داد. اجرای npm install یا bun install در هر دو مخزن دانلود می شود و اسکریپت مرحله دوم را از...
متن اصلی (انگلیسی)
Compromised LiteLLM 1.107.0 on PyPI Installs a Credential Stealer and Backdoor
Article URL: https://safedep.io/litellm-pypi-compromise-credential-stealer-backdoor/ Comments URL: https://news.ycombinator.com/item?id=50181114 Points: 293 # Comments: 108