Złośliwy kod w LiteLLM — bibliotece Pythona z 97 milionami pobrań

Złośliwy kod w LiteLLM — bibliotece Pythona z 97 milionami pobrań
Photo by Nick Rickert / Unsplash

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