Популярният Python пакет LiteLLM е компрометиран като част от атака по веригата за доставка на софтуер, разпространяваща крадец на идентификационни данни и задна врата (backdoor), според доклади на SafeDep, Socket, StepSecurity и Upwind.
Компрометирането засяга LiteLLM 1.107.0, разпространяван чрез PyPI wheels и Docker изображения. Оттогава Python пакетът е поставен под карантина в Python Package Index (PyPI), а злонамерените Docker изображения са премахнати.
Оливър Йенсен, директор по сигурността в LiteLLM, заяви, че разследването на инцидента продължава и че все още се работи по проследяването на първоначалния вектор на атаката, чрез който атакуващият е публикувал злонамерената версия.
„Установихме, че злонамерените действия са извършени чрез профилите в GitHub на трима инженери, вероятно посредством откраднати GitHub CLI OAuth токени“, каза Йенсен. „Атакуващият е използвал акаунта на единия потребител за задействане на изпълнението на project-releaser, а акаунта на друг потребител – за неговото одобряване. Всички токени, участвали в тази атака, са анулирани.“
„Все още не сме идентифицирали механизма, по който атакуващият е придобил съответните токени, така че засега не можем да твърдим категорично, че няма последващ достъп до тези профили в GitHub. Като временна мярка премахнахме всички потребители от нашата GitHub организация, с изключение на един (незасегнат).“
Отделно от това, LiteLLM съобщи, че е актуализирал публичните регистри, за да премахне всякакви доверени връзки към своята GitHub организация, с цел да се предотврати по-нататъшно публикуване на злонамерени пакети.
Анализът на злонамерената версия показва, че тя е оборудвана за събиране на облачни идентификационни данни, частни ключове, данни от браузъри и автентикационни файлове за инструменти за разработка на AI. Засегнати са следните wheels: -
- litellm-1.107.0-cp310-abi3-macosx_10_12_x86_64.whl
- litellm-1.107.0-cp310-abi3-macosx_11_0_arm64.whl
- litellm-1.107.0-cp310-abi3-manylinux_2_28_aarch64.whl
- litellm-1.107.0-cp310-abi3-manylinux_2_28_x86_64.whl
- litellm-1.107.0-cp310-abi3-musllinux_1_2_aarch64.whl
- litellm-1.107.0-cp310-abi3-musllinux_1_2_x86_64.whl
- litellm-1.107.0-cp310-abi3-win_amd64.whl
- litellm-1.107.0.tar.gz (No payload files, but has the tampered pyproject.toml)
„Първият зловреден код е крадец на идентификационни данни, който нарича себе си privcollect“, съобщават от StepSecurity. „Вторият зловреден код стартира фонов демон, който проверява GitHub хранилище тип „dead drop“ на всеки час и изпълнява какъвто и да е Python код, предоставен от атакуващия.“
Зловредният софтуер се стартира от Python още преди LiteLLM да бъде импортиран, чрез пътния файл („cook.pth“), който е проектиран автоматично да изпълнява код при стартиране на интерпретатора. Струва си да се отбележи, че същото поведение беше наблюдавано и при компрометирането на LiteLLM като част от атаките по веригата за доставки на TeamPCP по-рано този март.
Файлът „cook.pth“ съдържа един-единствен ред, „import cook“, който от своя страна стартира злонамерения код за събиране на идентификационни данни. Това включва извличане на облачни токени, профили на разработчици и частни ключове, JSON файлове с идентификационни данни за AI инструменти, браузърни данни, свързани с Chromium и Firefox, и променливи на средата.
Зловредният софтуер също така е способен да се прицелва в инсталации на LiteLLM с цел извличане на запазените идентификационни данни и конфигурацията на моделите на проксито. Събраните данни се пакетират в GZIP-компресиран TAR архив и се изпращат към „litellm[.]dev/healthcheck“ чрез HTTP POST заявка.
Освен това зловредният софтуер е проектиран да чете съдържанието на текстов файл („domain.txt“), намиращ се в GitHub хранилище („github[.]com/letters9813“), да проверява дали съдържа домейн и ако е така, да стартира същия крадец на данни, и накрая да изпълни HTTP GET заявка към „<domain>/codepy“ и да изпълни получения отговор. В момента хранилището в GitHub връща грешка 404.
Потребителите, които са изтеглили злонамерената версия, се съветват да анулират и заменят изложените на риск идентификационни данни от чиста среда и да фиксират версия 1.106.2 чрез хеш (digest).