В сряда от LiteLLM разкриха, че киберпрестъпници са компрометирали „множество независими мерки за сигурност“, за да публикуват злонамерена версия на Python пакета, съдържаща инструмент за кражба на идентификационни данни и задна вратичка (backdoor).
На 21 октомври 2026 г. процесът по издаване на нови версии на LiteLLM е бил компрометиран с цел качване на версия 1.107.0 в регистъра Docker Hub и хранилището Python Package Index (PyPI). Инцидентът се е случил около 4:00 ч. сутринта PST. Следните компрометирани версии са били публикувани –
- LiteLLM v1.107.0 (PyPI)
- v1.107.0, latest, main-latest и main-stable (Docker)
- v1.107.0, latest, main-latest и main-stable (GHCR)
Засегнати са потребителите, които са изтеглили версия на LiteLLM без фиксиран номер между 11:39 ч. и 13:23 ч. UTC чрез pip или са използвали Docker изображение v1.107.0, latest, main-latest или main-stable между 11:46 ч. и 14:20 ч. UTC.
Отровната версия е включвала код за събиране на идентификационни данни и ключове, както и за стартиране на произволен код от отдалечен сървър на всеки час, което я превръща в троянски кон за отдалечен достъп (RAT).
По-конкретно, интерпретаторът на Python обработва файл с пътища („cook.pth“), който включва команда за импортиране на „cook“ – Python скрипт („cook.py“), който се деобфускира сам и стартира модул за кражба, наречен „privcollect“, събиращ тайни от системата, браузъра, средите за разработка, облачните услуги и инструментите с изкуствен интелект, след което изпраща данните към „litellm[.]dev/healthcheck“ чрез HTTP POST заявка.
Освен това интерпретаторът се опитва да изпълни „sitecustomize.py“, който работи само на Linux и macOS машини и е конфигуриран да изтегли „domain.txt“ от вече свален канал за скрита комуникация в GitHub („github[.]com/letters9813“). Ако този файл върне валиден отговор, зловредният софтуер пристъпва към изтегляне на Python скрипт от втори етап от „<domain>/codepy“ и го изпълнява.
„Той форква фонов процес (daemon), който заема заключване в '/tmp/remote_code_loader.lock', за да предотврати множество инстанции, след което влиза в безкраен цикъл“, каза изследователят от Aikido Иляс Макари. „Всеки час процесът извлича текущия команден домейн (C2) на атакуващия от хранилище в GitHub (raw[.]githubusercontent[.]com/letters9813/pythonclient-test/main/domain[.]txt), след което изтегля и изпълнява зловреден код на Python от https://{domain}/codepy.“
Според притежаваната от Google компания за облачна сигурност Wiz, текстовият файл е съдържал единствено първоначални тестови стойности преди спирането му от GitHub около 13:30 ч. UTC.
„Подходът с двойна техника, използващ едновременно .pth файлове и sitecustomize.py, изглежда е първият документиран случай в реални условия“, заявиха изследователите от Wiz Бенджамин Рийд и Рами Маккарти.
От Wiz отбелязват, че оттогава са наблюдавали злоупотреба с откраднати идентификационни данни, започнала около 4,5 часа след източването, като атакуващият е валидирал идентификационни данни за роли на AWS инстанции, прихванати от компрометирани CI изпълнители и Kubernetes възли от следните IP адреси между 16:20 ч. и 17:01 ч. UTC –
- 168.100.8[.]57
- 165.227.201[.]8
„Всяко удостоверение беше проверявано със sts:GetCallerIdentity, последвано от bedrock:ListFoundationModels и повикване на ListModels, което съответства на LLMjacking“, добавиха от Wiz. „В малък брой среди атакуващият също така е обхождал IAM (ListRoles, ListUsers, ListAccessKeys) и е извършвал общо разузнаване (ListAccounts, DescribeTrails и т.н.).“

В съобщение за сигурност, публикувано в сряда, от LiteLLM заявиха, че са затегнали своя процес по публикуване на нови версии след подобен инцидент, случил се по-рано през март тази година. Това е включвало преместване на версиите в частно хранилище, правене на Docker таговете неизменими и подписване на Docker изображенията.
Въпреки това, след като поддържащите проекта с отворен код временно са разширили правата за публикуване, за да позволят на двама вътрешни инженери да издават ежедневни поправки за клиенти, атакуващият е използвал достъпа си до три комплекта от идентификационни данни за GitHub CLI на разработчици, за да качи в крайна сметка злонамерената версия.
Пълната последователност от действия е следната –
- На 19 октомври 2026 г. LiteLLM временно разширява правата за публикуване на двама вътрешни инженери.
- Атакуващият е имал достъп до три комплекта от идентификационни данни за GitHub CLI на разработчици, включително един, който е имал възможност да стартира работни процеси (workflows) в GitHub.
- Атакуващият е използвал токен, принадлежащ на един от собствениците на организацията в GitHub, за да деактивира защитите на клоновете (branch protections) и да наложи принудително качване (force-push) на злонамерените промени.
- Атакуващият е стартирал компрометирания работен процес, насочвайки го към наподобяващо хранилище „Berri-AI/litellm“ вместо „BerriAI/litellm“, което е довело до подписването и публикуването на отровните артефакти.
„След задълбочено разследване установихме конкретни ситуации, при които Claude Code вгражда потребителския OAuth токен за GitHub CLI в тялото на отговора, а в ситуации, където телата на отговорите се записват в логовете, тези токени могат да се появят в логовете на LiteLLM“, посочват от LiteLLM.
Поддържащите проекта споделиха още, че са идентифицирали „неочакван, безобидно наименуван потребителски профил“ в своята вътрешна инсталация на LiteLLM, която е била достъпна от публичния интернет. Подозира се, че атакуващият е получил достъп до тази инсталация, сдобил се е с OAuth токените за GitHub CLI от нейните логове и впоследствие е използвал тези данни, за да компрометира процеса по публикуване на версии.
Към момента не е ясно как внедряването е станало публично достъпно и как атакуващият е получил достъп до него. Въпреки това от LiteLLM предполагат, че това най-вероятно е станало чрез наскоро отстранена уязвимост.
Използването на файл „.pth“ за стартиране на програмата за кражба на данни е забележително, тъй като наподобява начина на действие, наблюдаван при атаката от март 2026 г., приписана на TeamPCP. Въпреки това от Socket заявиха пред The Hacker News, че на този етап няма доказателства, свързващи двата инцидента.
„Публичните доказателства, прегледани до момента, не установяват връзка с атаката от март“, заявиха от Socket. „Вградените публични RSA ключове се различават, както и реализацията на източването и поведението на задната вратичка. Това не изключва възможността един и същ оператор да използва различни инструменти, но нямаме доказателства в подкрепа на такова приписване на авторството. Дали откраднатите през март идентификационни данни са изиграли роля, също остава непотвърдено.“
Препоръчва се разработчиците да премахнат LiteLLM 1.107.0 от своите машини, да изолират хостовете, на които е била инсталирана злонамерената версия, да потърсят зловредните Python артефакти, да блокират достъпа до домейна за източване на данни, да подменят (ротират) всички идентификационни данни и да разследват изпълнението на „/codepy“.
„Една-единствена компрометирана инсталация може да предостави на атакуващия възможност да разпространи зловреден код надолу по веригата“, каза изследователят по сигурността от JFrog Гай Королевски. „Урокът за екипите по сигурност е, че чистото изходно хранилище не дава гаранции за артефакта, който всъщност инсталирате, така че проверявайте точния wheel пакет и валидирайте версиите, преди да достигнат до средата за изграждане. Ако 1.107.0 е работила където и да е във вашата среда, сменете всяко достъпно удостоверение и преизградете наново.“