
DonkAI is a hands-on lab for the OWASP Top 10 for LLM Applications (2025) - no real LLM required.
Laboratório prático para o OWASP Top 10 para Aplicações LLM (2025) - sem necessidade de LLM real.
DonkAI é um aplicativo web deliberadamente vulnerável que você pode executar com um comando e usar para aprender como sistemas integrados com LLM são quebrados, de fato os quebrando. Cada categoria do OWASP LLM Top 10 é representada por pelo menos um desafio jogável, com um resumo escrito, um editor de payload, uma defesa ativa a ser contornada, dicas progressivas e um histórico por usuário de cada tentativa. Mais do que um conjunto fixo de exercícios, é um laboratório de ensino extensível: a arquitetura modular (um arquivo por categoria, backend e frontend) torna simples adicionar novas vulnerabilidades, endurecer defesas existentes ou construir trilhas inteiramente novas para workshops, cursos e CTFs.
Aviso este aplicativo expõe intencionalmente superfícies de ataque reais (injeção de prompt, IDOR, injeção SQL, credenciais codificadas e muito mais). Ele deve ser executado apenas em um ambiente de laboratório isolado, de preferência dentro de uma máquina virtual dedicada, e nunca deve ser implantado na internet aberta.
O OWASP Top 10 para Aplicações LLM mapeia os riscos e fornece o vocabulário para falar sobre eles, leitura essencial para qualquer pessoa que trabalhe com segurança de LLM. DonkAI é projetado como uma extensão prática desse trabalho: um playground pequeno e determinístico onde você tenta os ataques você mesmo, vê eles terem sucesso contra um chatbot falso, porém realista, e lê um resumo explicando o que funcionou e como um sistema real se defenderia contra isso. Não há LLM real por trás da cortina; toda a pilha é baseada em regras, então o laboratório é barato, amigável para uso offline e reproduzível.
Clone, construa e inicie a pilha completa com dois comandos:
git clone https://github.com/OWASP/DonkAI.git && cd DonkAI
docker compose up --build
Em seguida, abra http://localhost:3000, faça login com alice / password123 e escolha seu primeiro desafio no painel OWASP à esquerda.
| Serviço | URL / Endereço |
|---|---|
| Interface Web | http://localhost:3000 |
| Backend (API + docs) | http://localhost:8000/docs |
| PostgreSQL | localhost:5432 — db |
| Usuário | Senha |
|---|
Dica — para limpar todo o estado (usuários, sessões, histórico de tentativas) e começar do zero:
docker compose down -v
Cada categoria no OWASP LLM Top 10 é representada por pelo menos um desafio jogável.
Para adicionar ou modificar categorias e desafios, consulte Extending challenges.
┌──────────────────┐ ┌──────────────────┐ ┌────────────────┐
│ React SPA │ ───► │ FastAPI │ ───► │ PostgreSQL │
│ :3000 │ │ :8000 │ │ :5432 │
│ webapp/ │ │ ml-service/ │ │ database/ │
└──────────────────┘ └──────────────────┘ └────────────────┘
Este aplicativo é intencionalmente vulnerável. Os padrões (senhas, credenciais de banco de dados, segredos codificados em prompts do sistema) fazem parte do conteúdo educacional, não são descuidos de segurança. Execute localmente ou em um laboratório isolado, nunca em um host compartilhado ou na internet pública, e nunca contra dados reais de produção.
Aplique as técnicas aprendidas aqui apenas em sistemas que você possui ou para os quais tenha autorização explícita por escrito para testar.
donk_ai_lab| Função |
|---|
alice | password123 | usuário |
bob | password123 | usuário |
admin | admin123 | admin |
| # | Categoria | Desafios | Arquivo do Backend |
|---|
| LLM01 | Injeção de Prompt | 2 | llm01_prompt_injection.py |
| LLM02 | Divulgação de Informações Sensíveis | 2 | llm02_sensitive_info.py |
| LLM03 | Cadeia de Suprimentos | 1 | llm03_supply_chain.py |
| LLM04 | Envenenamento de Dados e Modelo | 1 | llm04_data_poisoning.py |
| LLM05 | Manipulação de Saída Imprópria | 2 | llm05_improper_output.py |
| LLM06 | Agência Excessiva | 2 | llm06_excessive_agency.py |
| LLM07 | Vazamento de Prompt do Sistema | 2 | llm07_system_prompt_leak.py |
| LLM08 | Fraquezas de Vetor e Incorporação | 1 | llm08_vector_weaknesses.py |
| LLM09 | Desinformação | 1 | llm09_misinformation.py |
| LLM10 | Consumo Ilimitado | 1 | llm10_unbounded_consumption.py |
| Camada | Pilha | Função |
|---|
| Frontend | React | Renderiza a interface do desafio, o editor de payload e o painel de histórico por tentativa. |
| Backend | FastAPI | Um mecanismo de desafio baseado em regras por categoria OWASP — totalmente determinístico, sem chamadas a LLM. |
| Banco de Dados | PostgreSQL | Armazena users, chat_sessions, chat_messages, exploit_attempts |