Útoky na dodavatelský řetězec PyPI: Případy LiteLLM a Telnyx s praktickými doporučeními
Útočníci kompromitovali balíčky litellm a telnyx prostřednictvím úniku API tokenu z závislosti Trivy. 19. března 2026 byly zveřejněny škodlivé verze: litellm 1.82.7 a 1.82.8, telnyx 4.87.0 a 4.87.2. Kód se aktivuje při importu modulů, skenuje prostředí na tajemství a exfiltruje data na vzdálené servery.
Škodlivý payload v litellm shromažďuje SSH klíče, Git/Docker přihlašovací údaje, .env soubory, K8s tokeny, DB hesla, LDAP konfigurace, historii shellu a kryptografické klíče. Pokouší se získat cloudové tokeny z metadata serverů a AWS Secrets Manager. Data odcházejí na models.litellm.cloud. Pro perzistenci vytváří SystemD službu "System Telemetry Service" nebo K8s pod, který stahuje instrukce z checkmarx.zone.
V telnyx škodlivý kód v _client.py načítá fáze z WAV souborů na 8.42.209.203. Na Windows umisťuje msbuild.exe do Startup pro automatické spuštění, na jiných OS – Python skript. Verze 4.87.1 obsahovala překlep, který blokoval provedení. Spojení s TeamPCP pomocí šifrovacího klíče.
Vývojáři reagovali rotací tokenů, odstraněním vydání a zavedením trusted publishers v PyPI.
Specifika útoků na populární OSS balíčky
Na rozdíl od typických PyPI útoků (typosquatting nebo nové balíčky) je zde škodlivý kód vložen do existujících projektů s vysokým provozem. Řetězec: kompromitace repozitářů → krádež PyPI/GitHub tokenů → publikace malware → sběr přihlašovacích údajů z dev strojů → opakovaná kompromitace.
LiteLLM stažen 119k+ krát během útoku. ~40-50% instalací bez verze (latest), ~1700 instalací/min. Doba reakce PyPI:
- LiteLLM: od publikace do karantény — 2h32min (13 hlášení uživatelů).
- Telnyx: 3h42min (auto-karanténa trusted users).
Opatření PyPI proti malware
Denně ~700-800 nových projektů. PyPI spoléhá na komunitu pro skenování a hlášení prostřednictvím "Report as malicious". Funkce od roku 2024 urychluje karanténu. Trusted publishers aktivují auto-reakci.
Doporučení: období chlazení závislostí
Zpoždění instalace čerstvých vydání dává čas na detekci malware. Formát RFC 3339 (P3D = 3 dny).
- uv: globálně v ~/.config/uv/uv.toml nebo pyproject.toml:
[tool.uv]
exclude-newer = "P3D"
- pip v26.1+: v pip.conf:
[install]
uploaded-prior-to = P3D
- pip 26.0 (absolutní datum):
python -m pip install --uploaded-prior-to=$(date -d '-3days' -Idate) package
Obcházení pro security záplaty: --uploaded-prior-to=P0D nebo Dependabot/Renovate (ignorují zpoždění).
Blokování závislostí pro reprodukovatelnost
Lock soubory s hashi zabraňují nahrazení kódu při reinstalaci.
| Nástroj | Příkaz | Formát |
|------------|---------|--------|
| uv | uv lock | uv.lock |
| pip-tools | pip-compile --generate-hashes | requirements.txt |
| pipenv | pipenv lock | Pipfile.lock |
pip freeze nestačí — bez hashů. Očekává se pip lock (pylock.toml).
Ochrana OSS projektů
- Zavést trusted publishers v PyPI.
- Používat 2FA + hardwarové klíče pro PyPI/GitHub.
- Omezit práva tokenů (scopes).
- Monitorovat publikace prostřednictvím webhooků.
- Skenovat repozitáře Trivy/Grype.
Pro dev stroje:
- Izolovat kompromitovaná prostředí.
- Rotovat všechny přihlašovací údaje.
- Zkontrolovat na perzistenci (SystemD, K8s pods, Startup).
- Analýza provozu/logů.
Co je důležité
- Útoky využívají reálné OSS balíčky; kontrolujte čerstvá vydání.
- Období chlazení P3D + lock soubory = základní ochrana.
- 119k+ instalací LiteLLM před karanténou; latest je nebezpečný.
- Exfiltrace zahrnuje cloudová metadata a Secrets Manager.
- Trusted publishers a komunita urychlují reakci PyPI.
— Editorial Team
Zatím žádné komentáře.