Le 24 mars 2026, deux versions malveillantes de LiteLLM (v1.82.7 et v1.82.8) ont été publiées sur PyPI suite à la compromission du compte mainteneur du projet. LiteLLM est une interface Python unifiée vers 100+ fournisseurs de modèles LLM (accès via SDK ou proxy MCP). L'attaquant TeamPCP a utilisé un pipeline CI/CD infecté (via Trivy) pour voler le token PyPI du mainteneur, puis a poussé des releases activant un payload de vol de credentials. La v1.82.7 contient un loader dans proxy_server.py qui se déclenche à l'import du proxy, tandis que la v1.82.8 ajoute un fichier .pth (litellm_init.pth) qui s'exécute automatiquement à chaque démarrage de Python.
Une fois lancé, le malware collecte un vaste ensemble d'informations sensibles (variables d'environnement, clés SSH, jetons cloud AWS/GCP/Azure, secrets Kubernetes, fichiers de configuration, historiques shell, wallets crypto, etc.). Il chiffre les données (AES-256 + RSA-4096) et les exfiltre vers models.litellm.cloud. Ensuite, il installe une persistance locale (agent "System Telemetry Service" en ~/.config/sysmon/, unité systemd sysmon.service) qui contacte périodiquement checkmarx.zone/raw pour charger de nouveaux payloads. En outre, si un token Kubernetes privilégié est disponible, le malware crée des pods node-setup-* dans kube-system pour propager le backdoor sur chaque nœud. Cette attaque est particulièrement grave : LiteLLM centralise des clés et tokens très critiques (MCP, API LLM, cloud, DB, etc.), de sorte que la compromission touche potentiellement l'ensemble de l'infrastructure AI (poste développeur, CI, serveurs, clusters Kubernetes).
Contexte et chronologie
L'attaque s'inscrit dans la même campagne TeamPCP qui a ciblé Trivy (19 mars) et Checkmarx/KICS (23 mars). Les événements clés du 24 mars 2026 sont :
- 10:39 UTC – Publication sur PyPI de LiteLLM v1.82.7 malveillante (pas de tag Git correspondant).
- 10:52 UTC – Publication sur PyPI de LiteLLM v1.82.8 malveillante, incluant
litellm_init.pthqui s'exécute au démarrage de Python. - Peu après 11:00 UTC, la compromission est révélée publiquement (GitHub Issues, threads HackerNews) et PyPI met en quarantaine le projet. L'équipe LiteLLM retire les tokens, confirme l'origine via Trivy, et prévient les utilisateurs.
- 14:00 UTC – Mise à jour du blog LiteLLM et mails d'urgence recommandant la rotation des credentials.
Les sources principales (LiteLLM, Snyk, Datadog, Register, BleepingComputer, Upwind, Wiz, Comet, Penligent) confirment ces dates.

Description technique de l'exploit
Vecteurs d'entrée et vulnérabilités ciblées
L'attaquant n'a pas exploité une faille d'application LiteLLM, mais a attaqué la chaîne d'approvisionnement :
- Un jeton PyPI a été dérobé via la compromission d'un job CI (scanner Trivy compromis par TeamPCP).
- Avec ce jeton, deux versions LiteLLM ont été publiées sans passer par le dépôt GitHub officiel (aucune release GitHub associée).
- Il n'y a pas de vulnérabilité traditionnelle à patcher dans LiteLLM lui-même : c'est la confiance dans le dépôt PyPI qui a été brisée.
Chaîne d'attaque détaillée
Les versions malveillantes diffèrent par leur mécanisme d'attaque :
- LiteLLM v1.82.7 : le code malicieux (payload) est injecté dans le fichier
litellm/proxy/proxy_server.py. Ce code est encodé en base64 et exécuté dès que le modulelitellm.proxyest importé ou que l'on exécute la commandelitellm --proxy. Il était donc nécessaire que l'application cliente utilise explicitement la fonctionnalité proxy pour déclencher l'infection. - LiteLLM v1.82.8 : en plus du payload de 1.82.7, un nouveau fichier
litellm_init.pthest ajouté. En Python, le modulesiteexécute automatiquement toute ligne de code contenue dans un.pthlors de chaque démarrage de l'interpréteur. Du coup, l'installation de ce paquet infecté suffit à exécuter le payload à CHAQUE appel àpython,pytest, ou même un secondpip installdans le même environnement. C'est ce qui a fait basculer l'attaque d'un incident classique (import-triggered) à un incident "au plus bas niveau". Aucune interaction ultérieure n'était requise dans la v1.82.8 compromise pour exécuter le code malveillant.
Une fois le code malveillant chargé, la chaîne d'attaque se décompose comme suit :
- Collecte des secrets : le payload final balaye l'hôte pour voler des informations sensibles :
- Variables d'environnement et fichiers
.env(API keys, tokens). - Clés SSH (
~/.ssh/id_*,authorized_keys) et configurations SSH (known_hosts). - Identifiants de fournisseurs cloud :
- AWS : clés dans
~/.aws/, métadonnées IMDSv2, ECS container creds, secrets manager (ListSecrets, GetSecretValue via SIGv4). - GCP : credentials gcloud et
${GOOGLE_APPLICATION_CREDENTIALS}. - Azure : fichier
~/.azure/et vars (AZURE_*).
- AWS : clés dans
- Secrets Kubernetes : tokens de service accounts, fichiers kubeconfig/admin.conf, et appel direct à l'API pour lister tous les secrets de tous les namespaces.
- Fichiers d'infra/CI/CD : configs Docker (
~/.docker/config.json), Terraform (*.tfstate), configs Ansible/Helm, Jenkins/Travis/Drone YAML. - Credentials de base de données : PostgreSQL, MySQL, Redis, MongoDB, LDAP,
.netrc, etc. - Données d'application : historiques Shell (
bash_history,psql_history, etc.), fichiers.git-credentials, webhooks Slack/Discord, wallet crypto (Bitcoin, Ethereum, Cardano, etc.). - Tout contenu ressemblant à un secret : recherche de regex
api_key,apikey,access_token, etc.
- Variables d'environnement et fichiers
- Chiffrement et exfiltration : Les données volées sont bundlées dans une archive
tpcp.tar.gz. Un schéma hybride est utilisé : on génère une clé de session AES-256 pour chiffrer les données (avec PBKDF2), puis cette clé AES est chiffrée avec une clé RSA-4096 publique embarquée. Le tout est ensuite exfiltré par une requête HTTPS POST vershttps://models.litellm.cloud, avec l'en-têteX-Filename: tpcp.tar.gzpour masquer la nature du trafic. Cette infrastructuremodels.litellm.cloud(fausse URL, pas associée à LiteLLM) est utilisée comme serveur de collecte des attaquants. - Persistance locale : Le malware installe un agent persistant dans le home utilisateur :
- Il crée
~/.config/sysmon/sysmon.py(backdoor Python) et une unité systemd~/.config/systemd/user/sysmon.servicequi lancesysmon.pyen tâche de fond à chaque démarrage de session. Ce service se relance automatiquement toutes les 10 secondes (stdout/stderr à nul) et est activé parsystemctl --user enable --now. - Ce backdoor fait du « beaconing » : au premier lancement, il attend 5 minutes, puis toutes les ~50 minutes va chercher un nouveau payload sur
https://checkmarx.zone/raw. S'il y en a un, il télécharge dans/tmp/pglog, donne les droits d'exécution, et l'exécute. Ainsi, les attaquants peuvent injecter de nouveaux binaires à volonté dans les systèmes infectés.
- Il crée
- Propagation / Worm Kubernetes : Si un token Kubernetes avec RBAC élevé est trouvé, le malware utilise l'API K8s pour propager le backdoor :
- Il liste tous les nœuds du cluster, puis déploie sur chacun un pod
node-setup-<node>enhostPID: true, hostNetwork: true, avec montage du système de fichiers hôte (/host). - Chaque pod
alpine:latestprivilégié utilisechroot /hostpour installer la même persistance sysmon sur l'hôte. - Cela crée un effet de ver : une seule machine compromise suffit à infecter tout le cluster Kubernetes.
- Il liste tous les nœuds du cluster, puis déploie sur chacun un pod
Ces étapes rendent l'attaque extrêmement robuste et furtive. Elle ne se limite pas à voler un jeton PyPI ou un seul secret : il s'agit d'un malware conçu pour survivre, se propager et escalader dans les environnements modernes (dev local, CI, cloud, conteneurs, Kubernetes).
Surface d'attaque IA spécifique
Contrairement aux menaces IT classiques, LiteLLM vise l'écosystème IA/ML. Voici les points clés de la surface d'attaque IA :
Proxy MCP et Gateway LLM : LiteLLM peut fonctionner comme un serveur MCP (Model + Chat Proxy) qui permet à divers agents (Claude, Cursor, agents RAG, etc.) d'accéder à n'importe quel LLM via une API unifiée. Il gère les clés des fournisseurs, le routage, l'authentification et le logging pour les modèles. C'est donc un point central dans les architectures IA. Si cette couche est compromise, l'attaquant a potentiellement accès aux clés de 100+ modèles (Azure, OpenAI, Anthropic, Vertex, etc.) et aux données transmises.
Dépendances transitives dans les frameworks d'agents : De nombreux frameworks d'agents IA (CrewAI, Opik, Mem0, Guardrails, Agno, Camel-AI, etc.) incluent LiteLLM en dépendance directe ou transitive. Ces outils sont massivement téléchargés (5–6 millions de téléchargements mensuels pour certains). Un simple pip install some-agent peut entraîner l'installation de LiteLLM infecté sans que l'utilisateur ne s'en rende compte, surtout dans des chaînes CI/CD automatiques.
Position dans la pile sécurité : LiteLLM gère des secrets hautement sensibles — clés cloud, tokens API, configs d'infrastructure, logs de prompts, etc. LiteLLM se situe au plus près des secrets les plus critiques de la pile : credentials cloud, clés de fournisseurs de modèles... Une compromission ici est un problème de plan de contrôle pour l'infrastructure IA. Le tableau ci-dessous illustre des cas d'usage typiques :
| Environnement cible | Rôle de LiteLLM | Secrets à risque |
|---|---|---|
| PC développeur/local | SDK ou proxy local (tests/IDE) | Clés SSH, credentials cloud CLI, .env (OpenAI, Azure, etc.), Git credentials |
| Pipeline CI/CD | Tests/packaging/Release | Clés de publication (PyPI), jetons cloud, tokens GitHub/CI |
| Serveur Multi-tenant | Proxy/API Gateway LLM | Clés d'accès fournisseurs LLM, virtual keys internes, logs d'utilisation (Billing, prompts) |
| Cluster Kubernetes | Service d'inférence IA, RAG | kubeconfig, secrets K8s, credentials base de données, configurations d'infra |
En pratique, un attaquant n'a pas besoin d'accéder à tous ces environnements : la compromission de LiteLLM sur un seul poste développeur ou un unique job CI peut suffire à voler un ensemble considérable de clés. Le « blast radius » est donc immense. Chaque machine ou conteneur qui a installé LiteLLM 1.82.7/1.82.8 doit être traité comme un événement d'exposition complète de credentials. La centralisation que LiteLLM fournit pour les applications IA rend l'attaque particulièrement redoutable dans le domaine IA.
Impact opérationnel et risques
Les risques associés sont sévères :
Exfiltration de credentials : Comme décrit, tout secret stocké ou accessible par le processus LiteLLM malveillant a vraisemblablement été volé. Cela inclut les variables d'environnement CI/CD, les tokens d'accès cloud (AWS/GCP/Azure), les clés SSH privées, les accès Kubernetes et base de données, etc. Les attaquants peuvent reconquérir les comptes exposés et l'intelligence des opérations.
Persistance et présence continue : Grâce au backdoor systemd (sysmon) et au C2 checkmarx.zone, les attaquants disposent d'un accès permanent et peuvent télécharger de nouveaux outils (ransomware, mineur crypto, etc.) ultérieurement. Le remplacement du domaine de Checkmarx/OpenVSX et la création d'un domaine models.litellm.cloud montrent leur capacité à coordonner plusieurs attaques en cascade.
Mouvement latéral : Dans un cloud ou cluster Kubernetes, l'attaquant peut établir une présence sur plusieurs nœuds (via les pods node-setup-*) et potentiellement atteindre des ressources sensibles sur le réseau (serveur de métadonnées, API d'orchestrateur).
Secours/Résilience : Puisque LiteLLM peut être déployé dans divers contextes (serveur, cloud VM, container), la présence du malware est difficile à éradiquer. Certaines versions 1.82.6 ou images Docker officielles non infectées restent sûres, mais il faut vérifier toutes les traces du code malveillant.
Risques réputationnels et de conformité : Un tel incident peut exposer l'entreprise à des violations de données (PII dans env .ENV, clés de clients) et à des obligations de notification. Le fait que l'attaque cible la chaîne d'approvisionnement accentue les sanctions (pannes de production, partenariats détruits).
En résumé, il s'agit d'une campagne sophistiquée de ransomware-like infostealer mais ciblant un composant IA stratégique. Les organisations utilisant LiteLLM ou ses dépendances doivent craindre un compromis complet de leur environnement.
Actions immédiates et mesures de remédiation
En cas de suspicion d'attaque LiteLLM, voici les actions d'urgence prioritaires :
- Identifier l'exposition : Détecter toutes les installations de LiteLLM v1.82.7/1.82.8. Par exemple, exécuter
pip show litellmsur les machines/dev/test containers, ou rechercher dans les logs de build (grep -R "litellm==1.82.7" ...). - Isoler les systèmes infectés : Couper l'accès réseau des machines compromises (désactiver internet, réduire les firewalls/groupe de sécurité). Sur Kubernetes, isoler les pods suspects. Bloquer les domaines malveillants (DNS/hosts
models.litellm.cloud,checkmarx.zone) pour empêcher toute exfiltration supplémentaire. - Rotation immédiate des credentials : Révoquer sans attendre toutes les clés/jetons potentiellement exposés, sur la base du principe que tous ont été compromis. Concrètement :
- Générez de nouvelles clés d'accès pour tous les comptes cloud (AWS IAM, GCP Service Accounts, Azure AD) et remplacez les anciennes.
- Recréez clés SSH d'accès aux serveurs et configurations VPN.
- Regénérez jetons GitHub/GitLab, CI/CD (Jenkins, Travis), Docker registry, PyPI, npm, etc.
- Changez les mots de passe des bases de données et stockez-les dans un vault.
- Informez en urgence les équipes concernées de déployer ces nouvelles clés.
- Nettoyage et patching :
- Désinstallez LiteLLM v1.82.7/1.82.8 partout (
pip uninstall litellm) et purgez le cache pip (pip cache purge). - Installez la version propre v1.82.6 sur les environnements concernés, ou passez aux images Docker officielles LiteLLM (sans dépendance PyPI compromise).
- Recherchez et supprimez les artefacts malveillants : fichiers
litellm_init.pth,~/.config/sysmon/sysmon.py,/tmp/pglog,/tmp/.pg_state. Sur Kubernetes, supprimez tous les podsnode-setup-*. - Vérifiez les scripts de déploiement. Dans vos pipelines CI/CD, fixez (
pin) la version de LiteLLM à 1.82.6 (ou supprimez-la si possible) et passez tout GitHub Actions Git tags à des commits SHA immuables.
- Désinstallez LiteLLM v1.82.7/1.82.8 partout (
- Audit complet : Passez en revue tous les journaux de connexion, CloudTrail, logs Kubernetes, logs réseau pour détecter d'éventuelles actions non autorisées (ex. connexions anormales, secrets lus, pods créés). Recherchez les IOC connus (voir ci-dessous). Envisagez de refaire les images machine/containers à partir de sources « clean ».
- Renforcement post-incident : Revoyez la configuration CI/CD pour retirer l'usage de Trivy compromis ou autres outils vulnérables. Activez l'authentification multifacteur sur tous les comptes mainteneurs. Envisagez de faire auditer le pipeline par des tiers, et de collaborer avec le centre incident de LiteLLM ou PyPA si besoin.
Checklist opérationnelle priorisée
- (P1) Confirmer l'installation des versions malveillantes (scanner virtualenv, containers, runners).
- (P1) Isolement immédiat (couper accès internet/domaine malveillant).
- (P1) Rotation complète des secrets (cloud, SSH, CI/CD, base).
- (P2) Désinstallation LiteLLM malveillant + purge cache, détection Sysmon et pods K8s.
- (P2) Audit des logs et authentifications (Kubernetes, CloudTrail, SSH) pour déceler des accès illicites.
- (P2) Mise à jour des workflows (pin GitHub Actions, mettre à jour dépendances).
- (P3) Surveillance IDS/EDR centrée sur les IOC et comportements anormaux (voir ci-dessous).
- (P3) Documentation et revue post-incident, communication aux équipes légales/RH si nécessaire.
Détection et indicateurs de compromission (IoC)
Les indicateurs d'infection comprennent :
Fichiers suspects :
litellm_init.pthprésent dans un répertoiresite-packages.- Scripts persistants :
~/.config/sysmon/sysmon.pyet servicesysmon.service. - Fichiers temporaires :
/tmp/pglog,/tmp/.pg_state(flag de l'état C2).
Domaines réseau : Tout trafic sortant vers models.litellm.cloud ou checkmarx.zone (ou checkmarx[.]zone). Des sources citent aussi scan.aquasecurtiy.org (typosquat de Aqua) et *.icp0.io/*.trycloudflare.com comme parties de la campagne.
Processus anormaux : Apparition de python qui exécute du code base64 (examen des commandes ps ou outils EDR). Lecture intense de répertoires de clés secrets (~/.aws, ~/.kube, ~/.ssh, etc.). Requêtes fréquentes vers les metadata (169.254.169.254) sans logique métier.
Pod/Kubernetes : Création de pods nommés node-setup-* dans kube-system avec image Alpine privilégiée.
Logs CI/CD : Jobs GitHub/CI exécutant pip install liteLLM==1.82.7/1.82.8. Logs de build affichant du code encodé base64.
Scripts de détection
# Recherche le fichier litellm_init.pth sur l'ensemble du système
echo "[*] Recherche de litellm_init.pth sur le système..."
sudo find / -type f -name 'litellm_init.pth' -print 2>/dev/null \
&& echo "Fichier litellm_init.pth trouvé" || echo "Aucun fichier litellm_init.pth détecté."
# Vérification de la connectivité DNS/HTTP vers les IoC connus
for dom in models.litellm.cloud checkmarx.zone; do
if host "$dom" >/dev/null 2>&1; then
echo "⚠ Domaine $dom résolu (alerte potentielle)."
else
echo "✅ Domaine $dom non résolu."
fi
done
# Surveiller les connexions réseau vers les domaines IoC
grep -R "models\.litellm\.cloud" /var/log && echo "Trace d'IoC models.litellm.cloud détectée."
# Script Python pour scanner les IOC sur un hôte
import socket, subprocess
domains = ["models.litellm.cloud", "checkmarx.zone"]
for dom in domains:
try:
ip = socket.gethostbyname(dom)
print(f"[!] Le domaine {dom} ({ip}) est résolu - vérifier les connexions actives.")
except socket.gaierror:
print(f"[OK] {dom} non résolu ou bloqué.")
# Vérification de processus Python suspects
try:
netstat = subprocess.check_output(['netstat','-tunp']).decode()
if any(d in netstat for d in domains):
print("[!] Trafic suspect détecté vers un IoC.")
except Exception:
pass
Recommandations long terme
Au-delà de la réponse immédiate, il est crucial de renforcer la sécurité pour résister à de futures attaques supply-chain :
Réduction de la confiance implicite : Aucun service tiers (GitHub Actions, packages PyPI) ne doit être accepté implicitement. Imposer la signature des packages (Sigstore/TUF), valider les manifests avant exécution, auditer l'usage des libs externes. Pinner les workflows CI sur des commits SHA, et préférer les actions/outils open-source audités.
Sécurisation CI/CD :
- Segmenter les runners CI dans un réseau privé avec accès restreint aux secrets.
- Utiliser des variables d'environnement restreintes (vaults) au lieu de stocker des clés dans les pipelines.
- Exécuter les analyseurs de dépendances (Trivy, etc.) dans des environnements verrouillés (images conteneurisées éphémères).
- Alerter sur les changements inattendus de tag (comme décrit par Aqua/Trivy – cf. piratage du tag
@v2).
Inventaire des dépendances (SBOM) : Maintenir un Software Bill of Materials de toutes les dépendances, y compris transitives. Mener des revues de sécurité régulières des bibliothèques critiques pour l'IA. Les équipes de DevOps doivent connaître quelles versions de LiteLLM (et autres libs LLM) sont utilisées dans les clusters.
Least privilege et politique de secrets :
- Sur cloud, privilégier les rôles IAM à permissions minimales ; désactiver l'IMDS sur les workloads si pas utilisé.
- Dans Kubernetes, limiter les comptes de service (pas de token par défaut sans nécessité).
- Sur l'infrastructure, stocker les secrets dans un gestionnaire spécialisé (HashiCorp Vault, AWS Secrets Manager) plutôt que dans des fichiers.
- Utiliser l'authentification à jetons éphémères (OIDC) dans CI/CD.
Monitoring comportemental : Mettre en place des mécanismes de détection au runtime (EDR / CNAPP / CSPM) qui repèrent les comportements suspects (e.g. exfiltration de grands volumes de données chiffrées, création de pods Kubernetes inattendus, etc.). Par exemple, surveiller toute opération Python qui lit massivement ~/.aws, ~/.ssh, ~/.kube, etc.
Tests et drills : Effectuer des exercices de simulation d'incident (table-top, drills sur table). S'assurer que les équipes savent appliquer rapidement la checklist ci-dessus en cas de nouvelle alerte.
Ces recommandations font écho aux leçons tirées de Trivy/KICS : un attaquant exploite une faille de posture (confiance excessive aux composants populaires) plus qu'une vulnérabilité technique isolée. Elles doivent être appliquées en maintenant un suivi continu des menaces dans l'écosystème open-source de l'IA.
Exemples de code en sandbox et playbooks
Avertissement éthique : Les extraits suivants sont inoffensifs et réservés à un environnement de test ou éducatif. Ne jamais exécuter du code malveillant dans un contexte réel.
Simulation d'un .pth malveillant (sandbox) :
# Exemple de contenu de litellm_init.pth (ne fait rien de mal)
import os, base64
data = os.environ.get('TEST_SECRET', 'aucun secret trouvé')
print("[Sandbox .pth] Clé trouvée :", data)
Ce script s'exécute automatiquement au démarrage de Python dans l'environnement de test. Il illustre le mécanisme d'exécution d'un fichier .pth (bien qu'ici il ne fasse que lire une variable TEST_SECRET). En conditions réelles, le malware effectuerait la collecte/exfiltration à cette étape.
Script de détection et IoC :
#!/bin/bash
# Scanner rapide pour IoC LiteLLM
echo "[*] Scannage du système pour LiteLLM compromis..."
find / -type f -name 'litellm_init.pth' 2>/dev/null && \
echo "⚠ litellm_init.pth détecté !" || echo "Aucun fichier litellm_init.pth trouvé."
# Check des process Python suspects
pgrep -fa python | grep -E "(base64|pglog)" && \
echo "⚠ Processus Python suspect détecté" || echo "Pas de processus Python suspect."
# Scan DNS pour domaines malveillants
for dom in models.litellm.cloud checkmarx.zone; do
if dig +short $dom | grep -q '[0-9]\.'; then
echo "⚠ Domaine accessible : $dom"
else
echo "[OK] $dom non résolu"
fi
done
Playbook de rotation automatisée (exemple Ansible) :
# Playbook Ansible : Rotation des clés AWS d'un utilisateur critique
- hosts: localhost
vars:
user_name: "devOpsUser"
old_key_id: "INSERER_ANCIEN_ID"
tasks:
- name: Créer une nouvelle clé d'accès AWS
aws_iam_access_key:
user_name: "{{ user_name }}"
state: present
register: new_key
- name: Supprimer l'ancienne clé d'accès AWS
aws_iam_access_key:
user_name: "{{ user_name }}"
access_key_id: "{{ old_key_id }}"
state: absent
- name: Afficher la nouvelle clé pour mise à jour
debug:
msg: >
Nouvelle clé AWS créée (ID={{ new_key.access_key.access_key_id }}).
Veuillez mettre à jour vos applications et pipelines pour utiliser cette clé.
Tableau comparatif des mesures
Mesures de remédiation et leur effet (Cloud vs On-Premise) :
| Mesure | Cloud (AWS/GCP/Azure) | On-Premise / Datacenter | Effet principal / Priorité |
|---|---|---|---|
| Rotation des clés | IAM : créer/supprimer clés d'accès, API tokens | Générer nouvelles clés SSH, TLS, BDD | Élimine les clés exposées (P1) |
| Isolation Réseau | Modifier VPC/Security Groups pour bloquer exfiltration | Couper Internet, segmenter VLAN | Empêche fuite de données (P1) |
| Suppression de LiteLLM malicieux | pip uninstall litellm et purge du cache |
Réinstaller images/OS propres | Évite réinstallation du malware (P1) |
| Audit CI/CD | Vérifier jobs ayant installé LiteLLM, logs Jenkins | Scanner logs build de serveurs internes | Détermine les vecteurs exposés (P1) |
| Patch/Pinning | Déployer LiteLLM v1.82.6 ou conteneur officiel | Mettre à jour conteneurs et scripts CI | Restaure état sain (P2) |
| Recherche de persistance | Chercher sysmon.py, pods node-setup-* |
Chercher scripts .py inconnus, audits log | Détecte backdoors (P2) |
| Monitoring & SIEM | Alertes sur IoC DNS/HTTPS (CloudWatch, Stackdriver) | IDS/EDR sur endpoints | Détection comportementale (P3) |
Conclusion
L'incident LiteLLM met en lumière les risques inédits des chaînes logicielles AI. Il s'agit d'une attaque multistade et multivecteur qui exploite à la fois le ciblage de l'écosystème IA (proxies LLM, MCP, frameworks) et les failles de posture dans les pipelines de production. Les organisations doivent maintenant effectuer une remédiation urgente (rotation massive de credentials, nettoyage complet) tout en repensant leur architecture de confiance autour des outils AI.
L'attaque a déjà fait l'objet de rapports officiels (LiteLLM, PyPA) et de nombreuses analyses techniques (Snyk, Upwind, Datadog, Wiz, etc.), toutes datées du 24–25 mars 2026. Les mesures énumérées dans cet article sont basées sur ces sources primaires et résument les meilleures pratiques à court terme et à long terme pour mitiger ce type de menace.
Sources : Publications et rapports du 24-25 mars 2026 — LiteLLM official blog, Snyk, NetSPI, Datadog, BleepingComputer, The Register, Wiz, Comet, Stéphane Robert, Penligent.