Forcepoint X-Labs a divulgué le 18 mai une attaque supply-chain sur LiteLLM, le gateway Python open-source qui sert d'interface unifiée à 100+ providers LLM. Le groupe de menace TeamPCP a poisoned les releases PyPI 1.82.7 et 1.82.8. La chaîne d'attaque a pas breach le repository source de LiteLLM directement — à la place, TeamPCP a poisoned Trivy (le scanner de vulnérabilités que LiteLLM utilise dans son pipeline de build) en impersonating des maintainers Trivy et en triggering les processus de release automatisés pour distribuer des binaires Trivy backdoored. Quand le CI/CD de LiteLLM a pulled le build Trivy compromised, le backdoor a scrape la mémoire du runner et exfiltré un PYPI_PUBLISH token. Les attaquants ont ensuite utilisé ce token pour publier des releases LiteLLM malicieuses directement. Divulgué par Prashant Kumar chez Forcepoint X-Labs.
Le comportement du payload diffère entre les deux versions. La version 1.82.7 utilisait des payloads Base64-encoded à l'intérieur de proxy_server.py qui s'exécutaient au startup du proxy — plus facile à spot pour n'importe qui qui diffe le fichier. La version 1.82.8 était plus stealthy : elle déployait un fichier litelllm_init.pth dans site-packages qui active « au startup de l'interpréteur Python sur chaque process subséquent, peu importe si LiteLLM a été explicitement importé ou non ». C'est l'escalation clé — une fois installé, le backdoor roule chaque fois qu'un interpréteur Python démarre dans cet environnement, pas juste quand LiteLLM est utilisé. Les credentials targeted : clés API OpenAI, Anthropic, Microsoft Azure ; credentials SDK AWS, Google Cloud et Azure ; fichiers kubeconfig et AWS credential des home directories des users. L'exfiltration était AES-256-CBC encryptée avec une session key de 32 bytes, envoyée via curl vers models.litellm.cloud. Un module de persistance appelé Sysmon.py polled checkmarx.zone toutes les 50 minutes pour des nouvelles instructions.
La leçon architecturale c'est le hijack de la chaîne de trust. TeamPCP a pas attaqué le repository LiteLLM bien-défendu ; ils ont attaqué Trivy, que le processus de build de LiteLLM trustait par défaut. C'est la même classe d'attaque supply-chain que xz-utils (l'impersonation de maintainer qui a presque compromised systemd) et que l'attaque npm tj-actions du début de l'année. N'importe quel outil dans ton processus de build — scanners, formatters, dependency resolvers, linters — est une surface d'attaque potentielle, même si son job réel est security-adjacent. Le compromise LiteLLM est spécialement damaging parce que la value proposition entière de LiteLLM c'est d'être le gateway à chaque provider LLM majeur. Comme Prashant Kumar l'a dit : « LiteLLM fonctionne comme un gateway unifié aux providers AI majeurs, ce qui veut dire qu'un seul compromise a donné aux attaquants un accès simultané aux credentials OpenAI, Anthropic et Azure. » Si t'as installé 1.82.7 ou 1.82.8, chaque credential de provider que l'environnement a touché est potentiellement dans les mains de TeamPCP.
Lundi matin : si t'as un environnement qui a roulé LiteLLM 1.82.7 ou 1.82.8, traite chaque clé API à laquelle l'environnement a eu accès comme compromised — rotate les clés OpenAI, Anthropic, Azure, AWS, GCP immédiatement, et audit les usage logs pour des requêtes pas familières. Check pour le fichier litelllm_init.pth dans tes site-packages et le module de persistance Sysmon.py. Bloque l'egress vers models.litellm.cloud et checkmarx.zone à ta couche réseau jusqu'à temps que t'aies clean l'host. Pour ta pipeline de build allant de l'avant : pin Trivy et chaque autre dépendance de build-tool à des hashes vérifiés (pas juste des versions), demande des releases signées pour le tooling security-adjacent, et isole les tokens de publish PyPI pour qu'ils soient pas accessibles aux scanners build-time. Le writeup de Forcepoint n'a pas divulgué le timeline exact, les download counts, ou la réponse de BerriAI — ces gaps rendent impossible d'estimer l'exposition précisément. Traite comme worst-case jusqu'à temps que BerriAI publie une disclosure coordonnée.
