
Hands-on AI security learning platform with intentionally vulnerable LLM applications. Explore OWASP Top 10 for LLMs through interactive pizza shop scenarios covering prompt injection, data disclosure, and supply chain risks.
At PwnzzAI Shop, every slice serves up a helping of holistic AI security instruction. This hands-on learning platform prepares professionals to understand the protection of AI technologies broadly delivered through an engaging, practical pizza shop scenario.
Just as an incorrect ingredient can spoil a pizza, a flawed prompt or inadequate architecture can leave AI technologies vulnerable to severe threats, including information breaches, intellectual property theft, or illegitimate access.
Here, you'll explore practical examples of how vulnerabilities are created, exploited, and mitigated. You need to login as alice/alice or bob/bob for some pages. Grab a slice, dig in, and discover how delicious learning about AI security can be.
Table of Content
PwnzzAI Shop represents a hands-on learning platform purposefully built for instruction on AI technology protection. This intentionally insecure Flask-based web application showcases an extensive array of AI security weaknesses via an immersive pizza shop experience.
Founding partner: OWASP AI Exchange
PwnzzAI is designed as a comprehensive, evolving learning platform aligned with the AI Exchange risk taxonomy Its scope expands progressively in step with OWASP AI Exchange security analysis frameworks and defensive guidance, ensuring long-term relevance as AI security practices mature. The project currently incorporates the OWASP Top 10 for LLMs, with an architecture intentionally mapped to AI Exchange risk classifications. Over time, PwnzzAI aims to mature into a structured learning ecosystem that supports:
AI protection and defense training, including self-directed learning paths
Hands-on security training programs with practical, scenario-driven exercises
Team-based learning initiatives for security engineers and practitioners
End-to-end AI security education, spanning design, development, deployment, and operations
Choose one of these 3 ways to run PwnzzAI:
https://www.docker.com/products/docker-desktop.git clone https://github.com/OWASP/PwnzzAI.git
cd PwnzzAI
The labs run on a free local model out of the box. To also use the cloud model tabs (OpenAI / Gemini / Claude), you need two things — an API key and a model name:
.env (OPENAI_API_KEY=...). The key from Lab Setup takes precedence..env. There is no default in code, so calls fail with LLM Provider NOT provided if it is unset.Create .env from the template and uncomment the model line:
cp .env.example .env
# then edit .env and set, for example:
# OPENAI_MODEL=gpt-4o-mini
# (or LITELLM_MODEL=gemini/gemini-2.5-flash, etc.)
Restart the app after editing .env. For a full provider/model walkthrough, see Workshop hosts: choosing OpenAI, Claude, Gemini, or other cloud models.
Use this option if you want Docker to run both the PwnzzAI app and Ollama for you.
docker compose up -d
docker compose ps
http://localhost:8080
In the app, go to the Basics page and run Ollama setup to pull models.
Follow logs if needed:
# App logs
docker compose logs -f pwnzzai-app
# Ollama logs (optional)
docker compose logs -f ollama
docker compose down
docker compose down -v
If you publish the app image under another registry path, override the image name when starting:
PWNZZAI_IMAGE=ghcr.io/owasp/pwnzzai:latest docker compose up -d
docker compose uses the default pwnzzai-app image from docker-compose.yml (overridable with PWNZZAI_IMAGE). If docker compose up fails with denied, unauthorized, or similar when pulling that image, the registry may require login or your account may not have pull access. You can still run everything from this repository by building the app image locally and pointing compose at it.
From the repository root:
docker build -t pwnzzai-local:dev .
PWNZZAI_IMAGE=pwnzzai-local:dev docker compose up -d
Windows PowerShell:
docker build -t pwnzzai-local:dev .
$env:PWNZZAI_IMAGE="pwnzzai-local:dev"; docker compose up -d
Then open http://localhost:8080. The first load can fail briefly while Flask starts inside the container; wait a few seconds and refresh if you see a connection error.
If you do have access to the registry image, you can authenticate first (example for GitHub Container Registry):
docker login ghcr.io
The same PWNZZAI_IMAGE=pwnzzai-local:dev approach applies to Option 2 if you use docker-compose.external-ollama.yml and hit the same pull error.
Use this option if Ollama is already running somewhere else and you only want to run PwnzzAI in Docker.
If you run Ollama on WSL and PwnzzAI in Docker, see
OLLAMA_CONNECTION_TROUBLESHOOTING.md
for connectivity fixes (Connection refused, host.docker.internal, binding, and env validation).
Keep your Ollama service running.
If Ollama is on a remote machine, set OLLAMA_HOST before starting (skip this if Ollama is on the same machine as Docker and reachable at the default in docker-compose.external-ollama.yml, http://host.docker.internal:11434).
Linux/macOS:
export OLLAMA_HOST=http://your-ollama-server:11434
Windows PowerShell:
$env:OLLAMA_HOST="http://your-ollama-server:11434"
docker compose -f docker-compose.external-ollama.yml up -d
If the default app image does not pull from GHCR, build locally and set PWNZZAI_IMAGE as in If the default image does not pull (build locally).
Visit http://localhost:8080 in your browser to see the application. Start from the Basic page and setup your lab.
Follow app logs if needed:
docker compose -f docker-compose.external-ollama.yml logs -f pwnzzai-app
docker compose -f docker-compose.external-ollama.yml down
Use this option if you want to run Python directly (without Docker for the app).
Linux/macOS:
python -m venv venv
source venv/bin/activate
Windows PowerShell:
python -m venv venv
.\venv\Scripts\Activate.ps1
./install.sh
Make sure Ollama is available:
http://localhost:11434 or another endpoint via OLLAMA_HOST.
Run the app:
flask run --host=0.0.0.0 --port=8080
http://localhost:8080
If you need more details, watch this walkthrough , which shows step-by-step setup.
This platform showcases an extensive spectrum of AI protection challenges, aligned with the OWASP AI Exchange comprehensive threat taxonomy. Current implementation covers the OWASP Top 10 for LLM Applications and core AI Exchange threat categories, with an extensible architecture built for future AI risk coverage.
Every weakness demonstrated in PwnzzAI features:
According to OWASP AI Exchange threats and OWASP Top 10 for LLM Applications 2025:
Prompt Injection AI Exchange: Direct Prompt Injection, Indirect Prompt Injection, Top 10: LLM-01.
Data Disclosure AI Exchange: Disclosure of sensitive data in model output , Top 10: LLM-02
Data and Model Poisoning AI Exchange: Data Poisoning, Model Poisoning, Top 10: LLM04
Improper Output Handling AI Exchange: Output Contains Conventional Injection, Top 10:LLM05
Excessive Agency AI Exchange: Least Model Privilege, Oversight, Top 10:LLM06
System Prompt Leakage AI Exchange: Sensitive Information Disclosure, Top 10:LLM07
Vector and Embedding Weakness AI Exchange: Direct augmentation data leak, Top 10:LLM08
Misinformation AI Exchange: Augmentation data manipulation, Top 10:LLM09
Unbounded Consumption AI Exchange: AI Resource Exhaustion, Top 10:LLM10
and,
⚠️ Educational Purpose Only: This application contains intentional security vulnerabilities. Do not use in production environments.