
# Cible pédagogique en Python simulant la CVE-2026-22807, une RCE dans la chaîne d'approvisionnement IA via TOCTOU lors du chargement de modèles Comprend une bibliothèque vulnérable, un script PoC et la génération dynamique de charges utiles pour la recherche en sécurité et l'enseignement.
⚠️ Avertissement / Disclaimer
Ce projet est destiné uniquement à des fins de recherche et d'enseignement en sécurité, afin de démontrer le principe d'attaque sur la chaîne d'approvisionnement lors du chargement de modèles IA (Remote Code Execution). N'utilisez pas les modèles malveillants générés dans un environnement de production, et il est strictement interdit d'utiliser ce projet pour toute action d'attaque illégale. Le développeur décline toute responsabilité légale en cas d'utilisation inappropriée.
Il s'agit d'un champ d'entraînement Python léger, conçu pour simuler et reproduire CVE-2026-22807 (une logique de vulnérabilité typique de la chaîne d'approvisionnement IA).
Ce champ d'entraînement démontre le problème de course temporelle (TOCTOU) lorsque les frameworks d'inférence IA (tels que vLLM, Transformers, etc.) chargent des modèles :
si le chargeur, avant de vérifier trust_remote_code=False, importe prématurément le code Python fourni par l'utilisateur pour analyser l'architecture du modèle (AutoConfig/AutoModel), un attaquant peut contourner les contrôles de sécurité et réaliser une exécution de code à distance (RCE).
| Nom de fichier | Rôle | Description |
|---|---|---|
vulnerable_lib.py | 🎯 Cible (Victim) | Simule une bibliothèque de chargement de modèles IA vulnérable (MiniLLM). Contient un ordre logique erroné. |
poc_dynamic.py | 🔫 Attaquant (Attacker) | Script d'attaque automatisé. Génère le répertoire de modèle malveillant et déclenche le processus de chargement. |
dynamic_evil_model/ | 📦 Payload malveillant | Répertoire généré automatiquement après l'exécution du script, contenant config.json et malicious.py avec code injecté. |
Assurez-vous que Python 3.x est installé. Ce champ d'entraînement ne dépend d'aucune bibliothèque tierce.
Exécutez directement le script d'attaque ; la commande whoami est exécutée par défaut.
python poc_dynamic.py
Sortie attendue : vous verrez la console afficher PWNED ainsi que le nom d'utilisateur système actuel, puis le programme lèvera l'exception « Remote code not allowed ». Cela prouve que la défense a été contournée.
Vous pouvez passer n'importe quelle commande système comme argument au script pour générer une « bombe » spécifique.
Exemple Windows (ouvrir la calculatrice) :
python poc_dynamic.py calc
Exemple Linux/Mac (afficher un fichier) :
python poc_dynamic.py cat /etc/passwd
Ce champ d'entraînement reproduit le processus dangereux suivant :
config.json.auto_map et, pour confirmer la classe du modèle, exécute directement l'import via importlib du fichier Python cible.import de Python, le os.system() au niveau supérieur du fichier malveillant est exécuté immédiatement.trust_remote_code. Bien qu'il intercepte et lève une erreur à ce moment-là, l'attaque est déjà terminée.❌ Code vulnérable (vulnerable_lib.py) :
# 1. Déclenche d'abord le chargement du code (la RCE se produit ici)
self._resolve_model_class()
# 2. Effectue ensuite le contrôle de sécurité (fermer la porte après l'évasion)
if not self.trust_remote_code:
raise RuntimeError("Aborted!")
✅ Correctif :
# 1. Effectue d'abord le contrôle de sécurité
if not self.trust_remote_code and self._needs_remote_code():
raise RuntimeError("Aborted!")
# 2. Ne charge le code qu'après validation
self._resolve_model_class()