
DonkAI est un laboratoire pratique pour l'OWASP Top 10 des applications LLM (2025) - aucun vrai LLM n'est requis.
Laboratoire pratique pour le Top 10 de l'OWASP pour les applications LLM (2025) - aucun LLM réel requis.
DonkAI est une application web délibérément vulnérable que vous pouvez lancer en une seule commande et utiliser pour apprendre comment les systèmes intégrant des LLM sont compromis en les compromettant réellement. Chaque catégorie du Top 10 LLM de l'OWASP est représentée par au moins un défi jouable, avec un énoncé écrit, un éditeur de payload, une défense active à contourner, des indices progressifs et un historique par utilisateur de chaque tentative. Plus qu'un ensemble fixe d'exercices, c'est un laboratoire d'enseignement extensible : l'architecture modulaire (un fichier par catégorie, backend et frontend) permet d'ajouter facilement de nouvelles vulnérabilités, de durcir les défenses existantes ou de créer des parcours entièrement nouveaux pour des ateliers, des cours et des CTF.
Avertissement : cette application expose intentionnellement des surfaces d'attaque réelles (injection de prompt, IDOR, injection SQL, identifiants codés en dur, etc.). Elle doit être exécutée uniquement dans un environnement de laboratoire isolé, de préférence dans une machine virtuelle dédiée, et ne doit jamais être déployée sur l'Internet public.
Le Top 10 de l'OWASP pour les applications LLM cartographie les risques et fournit le vocabulaire pour en parler, une lecture essentielle pour toute personne travaillant sur la sécurité des LLM. DonkAI est conçu comme une extension pratique de ce travail : un petit terrain de jeu déterministe où vous essayez vous-même les attaques, voyez celles-ci réussir contre un chatbot faux mais réaliste, et lisez un débriefing expliquant ce qui vient de fonctionner et comment un système réel se défendrait contre cela. Il n'y a aucun vrai LLM derrière le rideau, toute la pile est basée sur des règles, ce qui rend le laboratoire peu coûteux, utilisable hors ligne et reproductible.
Clonez, construisez et lancez toute la pile avec deux commandes :
git clone https://github.com/OWASP/DonkAI.git && cd DonkAI
docker compose up --build
Ouvrez ensuite http://localhost:3000, connectez-vous avec alice / password123 et choisissez votre premier défi dans le panneau OWASP sur la gauche.
| Service | URL / Adresse |
|---|---|
| Web UI | http://localhost:3000 |
| Backend (API + documentation) | http://localhost:8000/docs |
| PostgreSQL | localhost:5432 — base de données |
| Nom d'utilisateur | Mot de passe |
|---|
Astuce — pour effacer tout l'état (utilisateurs, sessions, historique des tentatives) et repartir de zéro :
docker compose down -v
Chaque catégorie du Top 10 LLM de l'OWASP est représentée par au moins un défi jouable.
Pour ajouter ou modifier des catégories et des défis, consultez Extension des défis.
┌──────────────────┐ ┌──────────────────┐ ┌────────────────┐
│ React SPA │ ───► │ FastAPI │ ───► │ PostgreSQL │
│ :3000 │ │ :8000 │ │ :5432 │
│ webapp/ │ │ ml-service/ │ │ database/ │
└──────────────────┘ └──────────────────┘ └────────────────┘
Cette application est intentionnellement vulnérable. Les valeurs par défaut (mots de passe, identifiants de base de données, secrets codés en dur dans les prompts système) font partie du contenu pédagogique, et non des oublis de sécurité. Exécutez-la localement ou dans un laboratoire isolé, jamais sur un hôte partagé ni sur l'Internet public, et jamais contre des données de production réelles.
N'appliquez les techniques apprises ici que contre des systèmes que vous possédez ou pour lesquels vous avez une autorisation écrite explicite de tester.
donk_ai_lab| Rôle |
|---|
alice | password123 | user |
bob | password123 | user |
admin | admin123 | admin |
| # | Catégorie | Défis | Fichier backend |
|---|
| LLM01 | Injection de prompt | 2 | llm01_prompt_injection.py |
| LLM02 | Divulgation d'informations sensibles | 2 | llm02_sensitive_info.py |
| LLM03 | Chaîne d'approvisionnement | 1 | llm03_supply_chain.py |
| LLM04 | Empoisonnement des données et du modèle | 1 | llm04_data_poisoning.py |
| LLM05 | Gestion inappropriée des sorties | 2 | llm05_improper_output.py |
| LLM06 | Agentivité excessive | 2 | llm06_excessive_agency.py |
| LLM07 | Fuite du prompt système | 2 | llm07_system_prompt_leak.py |
| LLM08 | Faiblesses des vecteurs et des embeddings | 1 | llm08_vector_weaknesses.py |
| LLM09 | Désinformation | 1 | llm09_misinformation.py |
| LLM10 | Consommation illimitée | 1 | llm10_unbounded_consumption.py |
| Couche | Stack | Rôle |
|---|
| Frontend | React | Affiche l'interface du défi, l'éditeur de payload et le tiroir d'historique par tentative. |
| Backend | FastAPI | Un moteur de défi basé sur des règles par catégorie OWASP - entièrement déterministe, aucun appel LLM. |
| Database | PostgreSQL | Stocke users, chat_sessions, chat_messages, exploit_attempts |