Złośliwy kod w LiteLLM — bibliotece Pythona z 97 milionami pobrań
24 marca 2026 roku w oficjalnym repozytorium PyPI pojawiły się wersje 1.82.7 oraz 1.82.8 popularnej biblioteki Pythona LiteLLM, zawierające złośliwy kod. LiteLLM to opensource'owa „bramka", która pozwala programistom łączyć się z wieloma modelami językowymi (LLM) przez jeden wspólny interfejs API. Przy ponad 97 milionach pobrań trudno o bardziej atrakcyjny cel ataku.
Wystarczyło zainstalować — nie trzeba było nawet uruchamiać
Atakujący wykorzystali mało znany mechanizm Pythona: pliki z rozszerzeniem .pth (tzw. Python Startup Hooks). Zatruty pakiet zawierał plik litellm_init.pth, który był automatycznie wykonywany przy każdym uruchomieniu interpretera Pythona — niezależnie od tego, czy ofiara kiedykolwiek napisała import litellm w swoim kodzie.
Wystarczyło mieć zainstalowaną paczkę (np. jako zależność innego projektu), a ukryty skrypt cicho uruchamiał się w tle przy każdym wywołaniu Pythona, wykradając:
- Klucze SSH, zmienne środowiskowe oraz pliki konfiguracyjne Dockera
- Dane uwierzytelniające do AWS, GCP i Azure, a także konfiguracje klastrów Kubernetes
- Klucze prywatne TLS, hasła do baz danych (PostgreSQL, MySQL, Redis) oraz pliki portfeli kryptowalutowych
- Historię powłoki (
bash_history,zsh_history), gdzie hasła często lądują wpisywane „z palca"
Wszystkie zebrane dane były pakowane do archiwum tpcp.tar.gz, szyfrowane i wysyłane na serwer kontrolowany przez napastników: models.litellm[.]cloud. Szacuje się, że ofiarą ataku mogło paść nawet 500 000 urządzeń.
Błąd hakera ograniczył skalę katastrofy
Paradoksalnie, błąd w złośliwym kodzie pomógł ograniczyć szkody. Wstrzyknięty skrypt uruchamiał w tle nowy proces Pythona — który z kolei ponownie czytał plik .pth, odpалając kolejny proces, i tak w nieskończoność. Powstała klasyczna fork bomba, błyskawicznie zużywająca całą dostępną pamięć RAM i zawieszająca maszyny — szczególnie u użytkowników edytorów takich jak Cursor.
Ponieważ komputery ofiar spektakularnie się wieszały, atak został szybko zauważony. Zatruте wersje usunięto z PyPI w niecałe 3 godziny.
Podręcznikowy atak na łańcuch dostaw
Grupa stojąca za atakiem — znana jako TeamPCP — nie włamała się bezpośrednio do LiteLLM. Najpierw skomprometowała skaner podatności Trivy, który był używany w procesie CI/CD LiteLLM. Przejmując narzędzie zaufane przez potok budowania, napastnicy mogli wstrzyknąć złośliwy kod do finalnego pakietu. To klasyczny, wręcz podręcznikowy atak na łańcuch dostaw.
Co zrobić?
Jeśli pracujesz z Pythonem, sprawdź natychmiast:
pip show litellm
Jeśli masz zainstalowaną wersję 1.82.7 lub 1.82.8, poszukaj pliku litellm_init.pth w katalogu site-packages i usuń go.
Jeśli go znajdziesz — przyjmij, że wszystkie sekrety na tej maszynie są skompromitowane: klucze API, hasła, pliki .env, tokeny. Obróć je natychmiast.
Ten incydent przypomina dobitnie, że ataki na łańcuch dostaw mogą zamienić zaufane, powszechnie używane narzędzia w wektory ataku — i że jedna źle zabezpieczona zależność w CI/CD może mieć katastrofalne konsekwencje na ogromną skalę.
Źródło: niebezpiecznik.pl