# 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.
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ę.
Etap 3: Trwałość
W Kubernetes malware:
- Odczytuje wszystkie sekrety klastra za pomocą tokena service account.
- Tworzy uprzywilejowane pody
alpine:latestwkube-systemz 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:
# 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-*wkube-system.
Co ważne
- Złośliwy kod w
.pthuruchamia się bezimport, 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
Brak komentarzy.