Powrót do strony głównej

Atak na litellm: kradzież credentials w PyPI

Kompromitacja wersji litellm 1.82.7 i 1.82.8 na PyPI obejmuje zbieranie i eksfiltrację credentials przez pliki .pth i pody K8s. Opisano mechanizmy, IoC i kroki remediation. Atak powiązany z kampanią TeamPCP.

litellm pod atakiem: stealer w wersjach PyPI
Advertisement 728x90

# Kompromitacja litellm 1.82.7/1.82.8: mechanizm kradzieży poświadczeń przez PyPI

Biblioteka litellm w wersjach 1.82.7 i 1.82.8 na PyPI zawiera złośliwy kod, który kradnie klucze SSH, poświadczenia chmurowe, sekrety Kubernetes i klucze API. Atak wykorzystuje łańcuch dostaw, uruchamiając się automatycznie przy starcie interpretera Python lub imporcie modułu. Dotknięte są systemy z zależnościami transitive, w tym wtyczki MCP Cursor.

Odkrycie incydentu

Atak ujawnił się poprzez fork-bombę w pliku .pth, która wyczerpała zasoby hosta. Bez tego błędu malware mogło działać ukrycie. Wersje opublikowano 24 marca 2026 w godzinach 10:39–10:52 UTC bez aktualizacji w GitHub — złośliwy kod został wstrzyknięty tylko do artefaktów PyPI, omijając code review.

Badacze z FutureSearch zauważyli brak tagów wydań. Repozytorium jest czyste, co jest typowe dla ataków na łańcuch dostaw.

Google AdInline article slot

Szczegóły techniczne malware

Etap 1: Zbieranie danych

Payload wyciąga:

  • Klucze SSH i konfiguracje.
  • Pliki .env.
  • Poświadczenia AWS, GCP, Azure.
  • Kubeconfig i sekrety Kubernetes.
  • Hasła baz danych.
  • Historię shell.
  • Pliki portfeli kryptowalutowych.
  • Zmienne środowiskowe.

Wykonywane są zapytania do endpointów IMDS dostawców chmurowych.

Etap 2: Ekstrakcja danych

Dane są szyfrowane za pomocą AES-256-CBC z RSA-4096 (wstępnie zdefiniowany klucz publiczny) i wysyłane na models.litellm[.]cloud — nieoficjalną domenę.

Google AdInline article slot

Etap 3: Trwałość

W Kubernetes malware:

  • Odczytuje wszystkie sekrety klastra za pomocą tokena service account.
  • Tworzy uprzywilejowane pody alpine:latest w kube-system z montowaniem host-FS.
  • Instaluje backdoor ~/.config/sysmon/sysmon.py.
  • Rejestruje usługę systemd user do uruchamiania na wszystkich nodach.

Wersja 1.82.8 używa litellm_init.pth (34 628 bajtów), wykonywalnego automatycznie przez Python. 1.82.7 — zaciemniony kod w proxy/proxy_server.py.

Sprawdzenie i remediacja

Sprawdźcie systemy poleceniami:

Google AdInline article slot
# Wersja litellm
pip show litellm

# Ślady w pamięci podręcznej uv
find ~/.cache/uv -name "litellm_init.pth"

# Backdoor
ls ~/.config/sysmon/sysmon.py
ls ~/.config/systemd/user/sysmon.service

W Kubernetes: kubectl get pods -n kube-system | grep node-setup-.

Jeśli zainstalowane są wersje 1.82.7/1.82.8:

pip uninstall litellm
rm -rf ~/.cache/uv
# Lub: pip cache purge

Wróćcie do wersji 1.82.6 (22 marca, czysta wg Endor Labs). Zróbcie rotację wszystkich poświadczeń: klucze SSH, tokeny chmurowe, kubeconfig, klucze API, hasła baz danych. Sprawdźcie potoki CI/CD i obrazy Docker za ostatnie 24–48 godzin.

Kontekst kampanii TeamPCP

Atak jest częścią kampanii TeamPCP (od grudnia 2025):

  • 19 marca: Trivy (75/76 tagów trivy-action).
  • 21–23 marca: KICS/Checkmarx, OpenVSX, CanisterWorm w npm (64+ pakietów).
  • 24 marca: litellm.

Wspólne markery: AES-256 + RSA-4096, jeden klucz publiczny. GitHub Issue #24512 w litellm zamknięty jako „not planned” z podejrzanymi komentarzami — możliwa kompromitacja konta.

Wskaźniki kompromitacji

  • Domena C2: models.litellm[.]cloud.
  • Plik: litellm_init.pth.
  • SHA-256: ceNa7wMJnNHy1kRnNCcwJaFjWX3pORLfMh7xGL8TUjg.
  • Backdoor: ~/.config/sysmon/sysmon.py.
  • K8s: pody node-setup-* w kube-system.

Co ważne

  • Złośliwy kod w .pth uruchamia się bez import, dotykając wszystkich procesów Python.
  • Ekstrakcja jest szyfrowana, C2 to fałszywa domena litellm.
  • Exploit Kubernetes daje pełny dostęp do klastra przez uprzywilejowane pody.
  • Część łańcucha TeamPCP: monitorujcie Trivy, KICS, pakiety npm.
  • Powrót do 1.82.6 + pełna rotacja poświadczeń są obowiązkowe.

— Editorial Team

Advertisement 728x90

Czytaj dalej