Introduction
Every team building on an LLM eventually runs into a security problem the old web checklist didn't cover. The untrusted input is no longer a form field — it's every document the model reads, every tool result handed back to it, and the model's own confident-sounding output. That's exactly why the OWASP Top 10 for Large Language Model Applications exists: it's the de-facto industry list of the most dangerous things that can go wrong when you ship AI.
In this guide I'll walk through the 2026 edition of the OWASP LLM Top 10 — what changed from 2023, why prompt injection still sits at number one, and what a practical mitigation looks like for each risk. This is the checklist I'd hand to any team before they ship an LLM feature.
Key Takeaways
- The 2026 list isn't pure expert opinion anymore: 75% of the ranking came from a practitioner survey and 25% from 6,639 real incidents pulled from public vulnerability and AI-harm databases.
- Prompt injection stays at number one — but the biggest mover is Excessive Agency, which jumped from LLM06 to LLM03.
- "Hidden context exposure" replaces "system prompt leakage," widening exactly what you need to protect.
- Treat prompts as code: version them, review them, and test them like any other input.
What Is the OWASP Top 10 for LLM Applications?
The OWASP Top 10 for LLM Applications is a security community list, maintained by OWASP's GenAI Security Project, that ranks the ten most common security risks in production LLM applications. Think of it as the AI version of the famous OWASP Top 10 for web applications, but tailored to the things that are weird about generative AI.
Why it matters: if your app calls OpenAI, Anthropic, Google, or an open-weight model, your attack surface is bigger and stranger than a normal web app. The untrusted input isn't just text — it's images, documents, tool outputs, and the model's own generations. The OWASP list gives teams a shared vocabulary and a release-gate checklist so nobody ships an LLM feature blind.
The project has gone through multiple versions: the original 2023 draft, the 2023/2024 refinement, and the 2026 update. Each revision reflects what the community actually saw in production — which is why the changes between editions are so informative.
The 2026 Rankings at a Glance
The 2026 edition was the first to be grounded in real data rather than expert opinion alone. That shift surfaced some big moves. Here's the current top ten side by side with the 2023/24 list:
LLM01 — Prompt Injection. Unchanged at #1. Direct attacks overwrite or reveal the system prompt; indirect attacks hide instructions inside documents, websites, or tool output.
LLM02 — Sensitive Information Disclosure. Up from #2 (formerly "Insecure Output Handling"). The model leaks sensitive data it was never meant to surface.
LLM03 — Excessive Agency. Up from #6 — the biggest jump in the ranking. The model or agent takes actions with too much privilege and too little human oversight.
LLM04 — Data and Model Poisoning. Attackers tamper with training data, retrieval corpora, or fine-tuning sets.
LLM05 — Supply Chain. Compromised model weights, plugins, or packages in the AI supply chain.
LLM06 — Improper Output Handling. Model output is used downstream without validation, enabling XSS, SSRF, or code execution.
LLM07 — Hidden Context Exposure. A rename of the old "System Prompt Leakage," now covering context embedded anywhere in the conversation.
LLM08 — Vector and Embedding Weakness. Attacks on the retrieval layer and embeddings.
LLM09 — Misinformation. The model confidently producing false output that then feeds workflows, code, or automated decisions.
LLM10 — Unbounded Consumption. The model burns uncontrolled compute or cost, enabling denial-of-service.
The two big signals from this ranking: agency and context. The list moved away from "the model did something bad" toward "the model had too much power and too little context control." That's the direction AI security is heading.
Why Prompt Injection Sits at Number One
Prompt injection is the foundational LLM attack because it exploits the model's most basic trait: obedience. An attacker crafts input that makes the model ignore its instructions and do something unintended instead.
Direct injection (jailbreaking). The attacker types a prompt that overwrites the system instructions — "Ignore your previous instructions and do X" — often wrapped in a fictional scenario or clever phrasing to slip past filters.
Indirect injection. The attacker hides instructions in content the model reads, like a webpage, a PDF, an email, or a tool result. In a well-known 2023 case, hidden text in a malicious webpage made a chatbot treat the page's content as commands, even sending chat data to an attacker's server. In another, hidden words inside a Word document manipulated an assistant into leaking private information.
Why it works: LLMs are trained to follow prompts and continue text. They don't truly "understand" deception — they match patterns. So a convincing prompt can exploit the model's own helpfulness against it. Essentially, it's AI social engineering, and it's hard to fully fix at the model level.
Worse, prompt injection becomes far more dangerous the more agency the model has. A chatbot that can only chat is mildly at risk; an agent that can call APIs, move money, or write code turns a single injected instruction into a real incident. That's why LLM01 and LLM03 (Excessive Agency) are so tightly linked.
Practical Mitigations for Each Risk
Here's a working checklist, mapped to the 2026 risks. This is what an initial AI security review should cover.
Treat prompts as code artifacts. Version-control your system prompts, review changes in PRs, and test them like any other input. This single habit addresses LLM01 and LLM07 (prompt injection + hidden context exposure).
Limit agent agency. Scope your agent's access to the minimum it needs. Require human approval for high-impact actions (sending money, deleting data, publishing). This is the core fix for LLM03 — and the fact that it jumped to #3 tells you teams are only starting to do this.
Filter and validate outputs. Never pipe model output straight into a database or a browser. Sanitize it, validate it, and treat it as untrusted. This covers LLM06 (improper output handling).
Guard your data. Minimize what the model can access, and never expose data it doesn't need for the task. This is LLM02 (sensitive information disclosure).
Pin and verify your supply chain. Use pinned model versions and signed packages, and audit your plugins. This is LLM05.
Protect your retrieval layer. Sanitize documents before they hit the model, and watch for poisoned content in your vector store. This is LLM08 and LLM04.
Set hard limits on consumption. Cap tokens, requests, and cost per user. This is LLM10 (unbounded consumption).
Add a verification layer for outputs. For high-stakes uses, cross-check the model's claims before they drive code or decisions. This is LLM09 (misinformation).
Concretely, many teams map these to a release gate and to compliance controls like SOC 2, HIPAA, and SOX. The exact owner varies, but the principle is the same: an LLM feature shouldn't ship without these checked.
How to Build Your Own LLM Security Checklist
Adapt the OWASP list to a checklist you actually run before every release.
1. Threat-model the feature. Write down where untrusted input enters and what the model can touch. This is the highest-leverage step.
2. Scope the agent. List every tool the model can call and remove any it doesn't strictly need.
3. Protect the context. Assume documents and tool output are adversarial, not authoritative.
4. Test with injection suites. Run automated prompt-injection and safety evaluation suites before shipping, not after.
5. Review outputs. Decide what happens to model output before it reaches users or systems, and validate it there.
6. Plan for incidents. Know what you'd do if the model leaked data or took an unintended action.
You don't need a huge team to start. Begin with threat modeling and agency scoping — they give you the most risk reduction for the least effort.
Frequently Asked Questions
What is the most dangerous LLM vulnerability?
Prompt injection (LLM01) is ranked first because it's the most common and the hardest to fully prevent. Its impact grows when combined with excessive agency — a model that can call APIs or take actions turns an injection into a real incident.
Is the OWASP LLM Top 10 based on real data?
Yes, in the 2026 edition. 75% of the ranking came from a practitioner survey and 25% from 6,639 real incidents drawn from public vulnerability and AI-harm databases. Earlier versions relied more on expert opinion.
What is the difference between direct and indirect prompt injection?
Direct injection ("jailbreaking") comes from the user's own prompt trying to override the system instructions. Indirect injection hides instructions in external content — a webpage, document, email, or tool result — that the model reads, which is often more dangerous because the user may not know it's there.
Can prompt injection be fully prevented?
Not reliably at the model level alone. The realistic defenses are layered: treat prompts as code, scope agent agency tightly, sanitize external content, and validate outputs. Assume some injection will succeed and design so the damage is limited.
Who should use the OWASP LLM Top 10?
Any team shipping an LLM feature — developers, security engineers, and product owners. It works as a shared checklist and as a release gate before going live.
Conclusion: Ship LLM Features That Don't Blow Up
The OWASP Top 10 for LLM Applications is the closest thing AI security has to a shared baseline, and the 2026 update is the most data-grounded yet. The headline shifts — prompt injection holding the top spot, excessive agency jumping to #3, and context exposure widening — all point the same way: the danger isn't just what the model says, it's how much power it has and how little control you keep over its context.
Start small but start now. Treat your prompts as code, scope your agents to the minimum, protect the context as if it's hostile, and validate every output. Use the checklist above as a release gate, and revisit it every time your model gets a new tool or a bigger context. AI moves fast, and so does its attack surface — but with a solid baseline, you can ship with confidence instead of hoping.

