
DonkAI es un laboratorio práctico para el OWASP Top 10 para Aplicaciones LLM (2025): no se requiere un LLM real.
Laboratorio práctico para el OWASP Top 10 para Aplicaciones LLM (2025) - no se requiere ningún LLM real.
DonkAI es una aplicación web deliberadamente vulnerable que puedes ejecutar con un solo comando y usar para aprender cómo se rompen los sistemas integrados con LLM, rompiéndolos de verdad. Cada categoría del OWASP LLM Top 10 está representada por al menos un desafío jugable, con un briefing escrito, un editor de payloads, una defensa activa que evadir, pistas progresivas y un historial por usuario de cada intento. Más que un conjunto fijo de ejercicios, es un laboratorio didáctico extensible: la arquitectura modular (un archivo por categoría, backend y frontend) facilita añadir nuevas vulnerabilidades, endurecer las defensas existentes o construir pistas completamente nuevas para talleres, cursos y CTFs.
Advertencia esta aplicación expone intencionadamente superficies de ataque reales (inyección de prompts, IDOR, inyección SQL, credenciales embebidas y más). Debe ejecutarse únicamente en un entorno de laboratorio aislado, preferiblemente dentro de una máquina virtual dedicada, y nunca debe desplegarse en la internet abierta.
El OWASP Top 10 para Aplicaciones LLM enumera los riesgos y proporciona el vocabulario para hablar de ellos; es lectura esencial para cualquiera que trabaje en seguridad de LLM. DonkAI está diseñado como una extensión práctica de ese trabajo: un pequeño parque de juegos determinista donde pruebas los ataques tú mismo, ves cómo tienen éxito contra un chatbot falso pero realista, y lees un informe que explica qué ha funcionado y cómo un sistema real se defendería de ello. No hay ningún LLM real detrás del telón; toda la pila está basada en reglas, por lo que el laboratorio es barato, funciona sin conexión y es reproducible.
Clona, compila y lanza la pila completa con dos comandos:
git clone https://github.com/OWASP/DonkAI.git && cd DonkAI
docker compose up --build
A continuación abre http://localhost:3000, inicia sesión con alice / password123 y elige tu primer desafío en el panel de OWASP de la izquierda.
| Servicio | URL / Dirección |
|---|---|
| Interfaz web | http://localhost:3000 |
| Backend (API + docs) | http://localhost:8000/docs |
| PostgreSQL | localhost:5432 — db |
| Usuario | Contraseña |
|---|
Consejo — para borrar todo el estado (usuarios, sesiones, historial de intentos) y empezar desde cero:
docker compose down -v
Cada categoría del OWASP LLM Top 10 está representada por al menos un desafío jugable.
Para añadir o modificar categorías y desafíos, consulta Ampliación de desafíos.
┌──────────────────┐ ┌──────────────────┐ ┌────────────────┐
│ React SPA │ ───► │ FastAPI │ ───► │ PostgreSQL │
│ :3000 │ │ :8000 │ │ :5432 │
│ webapp/ │ │ ml-service/ │ │ database/ │
└──────────────────┘ └──────────────────┘ └────────────────┘
Esta aplicación es intencionadamente vulnerable. Los valores por defecto (contraseñas, credenciales de la base de datos, secretos embebidos en los system prompts) forman parte del contenido educativo, no son descuidos de seguridad. Ejecútala localmente o en un laboratorio aislado, nunca en un host compartido ni en la internet pública, y nunca contra datos reales de producción.
Aplica solo las técnicas que aprendas aquí contra sistemas que poseas o para los que tengas permiso explícito por escrito de realizar pruebas.
donk_ai_lab| Rol |
|---|
alice | password123 | user |
bob | password123 | user |
admin | admin123 | admin |
| # | Categoría | Desafíos | Archivo backend |
|---|
| LLM01 | Prompt Injection | 2 | llm01_prompt_injection.py |
| LLM02 | Sensitive Info Disclosure | 2 | llm02_sensitive_info.py |
| LLM03 | Supply Chain | 1 | llm03_supply_chain.py |
| LLM04 | Data & Model Poisoning | 1 | llm04_data_poisoning.py |
| LLM05 | Improper Output Handling | 2 | llm05_improper_output.py |
| LLM06 | Excessive Agency | 2 | llm06_excessive_agency.py |
| LLM07 | System Prompt Leakage | 2 | llm07_system_prompt_leak.py |
| LLM08 | Vector & Embedding Weaknesses | 1 | llm08_vector_weaknesses.py |
| LLM09 | Misinformation | 1 | llm09_misinformation.py |
| LLM10 | Unbounded Consumption | 1 | llm10_unbounded_consumption.py |
| Capa | Stack | Rol |
|---|
| Frontend | React | Renderiza la interfaz de los desafíos, el editor de payloads y el panel lateral con el historial de intentos. |
| Backend | FastAPI | Un motor de desafíos basado en reglas por cada categoría OWASP: totalmente determinista, sin llamadas a LLM. |
| Base de datos | PostgreSQL | Almacena users, chat_sessions, chat_messages, exploit_attempts |