LLMVault

July 18, 2026 ยท View on GitHub

LLMVault Banner

LLMVault

The Ultimate Hands-On OWASP LLM Top 10 Training Platform

๐ŸŽฌ Demo

LLMVault Demo

Learn โ€ข Exploit โ€ข Defend

Stars Forks License Last Commit Issues
OWASP Docker Python

A deliberately-vulnerable, CTF-style training range for the OWASP Top 10 for LLM Applications (2025) โ€” WebGoat / KubeGoat, but for AI. 25 labs across three tiers: ten core one-per-category labs; ten advanced, multi-turn labs (jailbreaking, data poisoning, agent exploitation, model extraction); and five expert labs modelling real-world attack classes. Each tier unlocks the next.

Every lab pairs the attack with a defense (in the private solutions guide): learn the fix by practising the break.

โš ๏ธ Everything here is intentionally insecure. Authorised, self-hosted security education only. Don't expose it to the internet or reuse its code in production.

๐Ÿ“ธ Screenshots

Labs (three tiers)A lab in actionCompletion card

๐Ÿงฉ Core Tier โ€” OWASP LLM Top 10

OWASP (2025)LabTechnique
LLM01 Prompt InjectionThe Obedient Assistantdirect instruction override
LLM02 Sensitive Info DisclosureRedaction Theateroutput-filter bypass via encoding
LLM03 Supply ChainTrust the Manifest?typosquatted / unsigned dependency
LLM04 Data & Model PoisoningThe Sleeper Phrasepoisoned-data backdoor trigger
LLM05 Improper Output HandlingRendered Without Questionunsanitised output โ†’ injection
LLM06 Excessive AgencyKeys to the Kingdomover-permissioned tool, no authz
LLM07 System Prompt LeakageLoose Lipssecret leaked from system prompt
LLM08 Vector & EmbeddingRetrieval Without BordersRAG retrieval ignores ACLs
LLM09 MisinformationThe Yes-Mansycophancy / false authority
LLM10 Unbounded ConsumptionDenial of Walletrunaway generation + leaky error

๐Ÿ”ฅ Advanced Tier โ€” Multi-Turn Challenges (unlocks after completing all 10 Core challenges)

These are conversational: no single message wins โ€” they require building state across turns (roleplay escalation, iterative poisoning, tool chaining, oracle querying).

OWASPLabAdvanced technique
LLM01Roleplay Unchainedmulti-turn jailbreak via persona escalation
LLM02Death by a Thousand Hintsfragment reconstruction from a partial-disclosure oracle
LLM03The Tampered Registrydeployed-vs-canonical hash correlation
LLM04Teach Me Wrongactive data poisoning of an online-learning filter
LLM05The Note Keeperstored / second-order injection
LLM06Confused Deputyagent tool-chaining (SSRF to internal metadata)
LLM07Method Actormulti-technique system-prompt extraction
LLM08Crossed Wirescross-tenant RAG memory bleed
LLM09The Confident Liarhallucination โ†’ overreliance cascade
LLM10The Oraclequery-based model extraction

โš”๏ธ Expert Tier โ€” Real-World Attack Classes (unlocked after all Advanced challenges are solved)

Five expert labs modelling real-world, disclosed-vulnerability attack classes against LLM systems. Each is simulated โ€” the app recognises the known payload and returns a flag; no real RCE/SSRF/SQL happens in the tool.

This tier ships ENCRYPTED, and its contents are intentionally not listed here. The challenges and flags are AES-encrypted (Fernet) into challenges/expert.enc with a key derived from a secret Expert Access Key that lives only in the operator's private vault โ€” never in the repo. Cloning the repo yields ciphertext only; the specific scenarios stay secret until you earn them. To unlock, a player must (1) finish all Core + Advanced labs and (2) enter the key, which the operator (CyberSunil) hands out manually after the player shares their completion card. Wrong key โ†’ authenticated decryption fails โ†’ nothing is revealed.

Discovering what's inside is part of the challenge. ๐Ÿ”’


๐Ÿš€ Run it

pip install -r requirements.txt
python app.py
# open http://127.0.0.1:5000

No API key needed โ€” the vulnerable assistants are deterministic/scripted, so flags reproduce reliably and the whole range runs fully offline.


๐Ÿณ Run with Docker

# build + run
docker compose up --build          # then open http://127.0.0.1:5000
# or plain docker:
docker build -t llmvault .
docker run -p 5000:5000 llmvault

Served by gunicorn (single worker, so the in-memory scoreboard stays consistent). Do not expose this to the public internet โ€” it's intentionally vulnerable. To bind to localhost only, use "127.0.0.1:5000:5000" in docker-compose.yml.

๐Ÿ’พ Persistence (self-host friendly)

Progress and the scoreboard are saved to data/progress.json โ€” no database needed โ€” so they survive page refresh and a server/container restart. In Docker the ./data volume keeps them across docker compose down/up. Delete the file to reset everyone.

๐Ÿ™‹ Player experience

  • First-run name gate (locked once set) and a one-time guided tutorial on your first lab.
  • After you solve a lab, a ๐Ÿ“˜ Learn โ€” the fix panel reveals the defensive lesson for that OWASP category.
  • Responsive layout โ€” works on phones (the sidebar collapses, panels stack).

๐Ÿ•น๏ธ How to play

  1. On first launch you set a player name (locked once chosen โ€” it can't be changed after).
  2. Work the core labs; make each assistant leak its flag using that category's technique.
  3. Clear all 10 core labs to unlock the advanced tier; clear all advanced to unlock the expert tier.
  4. Reveal hints if stuck (โˆ’5 pts each). Submit flags (LLMVAULT{...}, configurable in config.py).
  5. Cards float on hover and turn green when solved; track everything on the Scoreboard.

Scoring: core 100โ€“300 pts, advanced 400, expert 500; hints cost 10 / 25 / 50 (escalating).


๐ŸŽ“ Completion card & sharing

Two milestone cards unlock automatically as a pop-up the moment you finish a tier: a green Beginner card (all 10 Core labs) and a blue Master card (all 20 Core + Advanced). Both are also at /completion. Each has a Download card (PNG/SVG) button, a pre-written caption (Copy), and LinkedIn/X openers.

Sharing an image: social sites can't auto-attach an image from a share link, so the flow is: Download the card โ†’ open LinkedIn/X โ†’ paste the caption โ†’ attach the image. Players post it and tag CyberSunil to receive the Expert Access Key. The card renders server-side as a themed SVG (/card.svg) and exports to PNG in-browser โ€” no external deps.

๐Ÿงฑ Architecture

app.py                      # Flask: labs, chat, hint, submit, scoreboard, name-gate, unlock gating
config.py                   # APP_NAME, AUTHOR/COPYRIGHT, flag prefix, scoring
challenges/
  __init__.py               # Challenge base (tier), registry, core_labs()/advanced_labs()
  llm01_..llm10_*.py         # core labs
  advanced/a01_..a10_*.py    # advanced multi-turn labs
  expert.enc                 # ENCRYPTED expert tier (ciphertext, shipped)
  expert_meta.json           # public KDF salt/params
  expert_vault.py            # runtime decryptor + declarative challenge engine
templates/  static/          # dark violet UI + completion card + expert key gate
Dockerfile  docker-compose.yml  # containerised deploy
LICENSE                     # MIT + security notice

Each challenge is a Challenge subclass with a respond(message, state) that encodes the vuln; advanced labs use the persistent state dict for multi-turn logic. Add your own by dropping a module in challenges/ (or challenges/advanced/) and registering it.


๐Ÿ‘ค Credit & license

Made by CyberSunil. Copyright ยฉ 2026 Sunil Tripathy.. Released under the MIT License (see LICENSE), with a security notice that the project is deliberately vulnerable and for authorised training only. Forks and derivative works must comply with the MIT License. Use of the LLMVault branding remains subject to the trademark policy.


โš–๏ธ Intellectual Property

  • ๐Ÿ“„ Source Code: MIT License
  • โ„ข๏ธ Trademark & Branding: See TRADEMARKS.md

The LLMVaultโ„ข name, logo, branding, artwork, banners, screenshots, documentation, and other visual assets are not licensed under the MIT License and may not be used without prior written permission.


Break it here so you can defend it everywhere.


Contributions welcome โ€” see CONTRIBUTING.md. Security policy: SECURITY.md.