
DonkAI is a hands-on lab for the OWASP Top 10 for LLM Applications (2025) - no real LLM required.
Практическая лаборатория для OWASP Top 10 для LLM-приложений (2025) — без необходимости в реальной LLM.
DonkAI — это намеренно уязвимое веб-приложение, которое можно запустить одной командой и использовать для изучения того, как взламываются системы, интегрированные с LLM, на практике. Каждая категория из OWASP LLM Top 10 представлена как минимум одним воспроизводимым заданием с письменным описанием, редактором полезной нагрузки, активной защитой, которую нужно обойти, прогрессивными подсказками и историей каждой попытки для каждого пользователя. Это не просто фиксированный набор упражнений, а расширяемая учебная лаборатория: модульная архитектура (один файл на категорию, бэкенд и фронтенд) позволяет легко добавлять новые уязвимости, усиливать существующие защиты или создавать совершенно новые треки для воркшопов, курсов и CTF.
Warning Это приложение намеренно предоставляет живые поверхности атаки (инъекции промптов, IDOR, SQL-инъекции, жёстко заданные учётные данные и другое). Его следует запускать только в изолированной лабораторной среде, желательно внутри выделенной виртуальной машины, и ни в коем случае не разворачивать в открытом интернете.
OWASP Top 10 для LLM-приложений описывает риски и даёт словарь для их обсуждения — обязательное чтение для всех, кто работает над безопасностью LLM. DonkAI задуман как практическое дополнение к этой работе: небольшая, детерминированная песочница, где вы пробуете атаки сами, видите, как они срабатывают против вымышленного, но реалистичного чат-бота, и читаете разбор того, что именно сработало и как реальная система защищалась бы от этого. За кулисами нет настоящей LLM, весь стек работает на правилах, поэтому лаборатория недорогая, работает офлайн и воспроизводима.
Клонируйте, соберите и запустите полный стек двумя командами:
git clone https://github.com/OWASP/DonkAI.git && cd DonkAI
docker compose up --build
Затем откройте http://localhost:3000, войдите под учётной записью alice / password123 и выберите первое задание на панели OWASP слева.
| Сервис | URL / Адрес |
|---|---|
| Веб-интерфейс | http://localhost:3000 |
| Бэкенд (API + документация) | http://localhost:8000/docs |
| PostgreSQL | localhost:5432 — бд |
| Имя пользователя | Пароль |
|---|
Совет — чтобы сбросить всё состояние (пользователей, сессии, историю попыток) и начать с чистого листа:
docker compose down -v
Каждая категория из OWASP LLM Top 10 представлена как минимум одним воспроизводимым заданием.
Чтобы добавить или изменить категории и задания, см. Расширение заданий.
┌──────────────────┐ ┌──────────────────┐ ┌────────────────┐
│ React SPA │ ───► │ FastAPI │ ───► │ PostgreSQL │
│ :3000 │ │ :8000 │ │ :5432 │
│ webapp/ │ │ ml-service/ │ │ database/ │
└──────────────────┘ └──────────────────┘ └────────────────┘
Это приложение намеренно уязвимо. Настройки по умолчанию (пароли, учётные данные базы данных, жёстко заданные секреты в системных промптах) являются частью образовательного контента, а не упущениями безопасности. Запускайте локально или в изолированной лаборатории, никогда на общем хостинге или в публичном интернете, и никогда против реальных продуктивных данных.
Применяйте полученные здесь техники только к системам, которыми вы владеете или на тестирование которых получили явное письменное разрешение.
donk_ai_lab| Роль |
|---|
alice | password123 | user |
bob | password123 | user |
admin | admin123 | admin |
| # | Категория | Заданий | Файл бэкенда |
|---|
| LLM01 | Инъекция промпта (Prompt Injection) | 2 | llm01_prompt_injection.py |
| LLM02 | Раскрытие конфиденциальной информации | 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 |
| Уровень | Стек | Роль |
|---|
| Фронтенд | React | Отображает интерфейс заданий, редактор полезной нагрузки и панель истории попыток. |
| Бэкенд | FastAPI | Один движок заданий на основе правил для каждой категории OWASP — полностью детерминированный, без вызовов LLM. |
| База данных | PostgreSQL | Хранит users, chat_sessions, chat_messages, exploit_attempts |