OWASP LLM07:2026 Misinformation is the risk that an LLM produces plausible but incorrect, incomplete or unsupported output that a person or system then trusts and acts on. It is renumbered from LLM09:2025 in the 2026 edition. Contain it by grounding answers in authoritative sources and showing citations a reader can check, verifying that each cited source actually supports the claim, and separating generation from execution so claims are checked before any action (a claim-check-act pattern). Require human approval for consequential decisions, design the interface to show sources and uncertainty, and evaluate factuality on your own domain rather than trusting the model's confident tone.
- Misinformation is a system failure, not just a wrong answer: model output drives tool calls, code, state inference and agent actions, so a false claim becomes a bad action.
- Overreliance is the amplifier: people and downstream systems treat fluent, confident, well-structured output as authoritative.
- Grounding is necessary but not sufficient; verify that the cited source actually contains the claim, because models cite sources that don't support what they say.
- Separate generation from execution: generate a claim, check it against authoritative data and preconditions, then act (claim-check-act).
- Confidence is not a verification signal; use groundedness and consistency checks and evaluate on your own domain.
- Hallucinated package names are a real supply-chain vector: in one 2025 study, at least 5.2% of the packages commercial models suggested, and 21.7% for open-source models, did not exist.
| Setting | Value | Note | Source |
|---|---|---|---|
| Answers that inform a decision | Grounded in retrieved, current sources with checkable citations | OWASP LLM07 prevention 1: require outputs to be grounded in authoritative and current sources. | OWASP Top 10 for LLM Applications 2026, LLM07:2026 |
| Citations | Verified: the cited source must actually contain the quoted span or claim | A citation the model invents or misattributes is itself misinformation (forged or misattributed evidence). | OWASP LLM07:2026 Common Examples of Risk |
| Generation and action | Separated: claim-check-act, with tool arguments and preconditions validated | OWASP LLM07 preventions 2 and 3: verify claims before acting; check arguments, authorization, preconditions and state. | OWASP Top 10 for LLM Applications 2026, LLM07:2026 |
| Consequential actions | A human approves, with the evidence shown | Runtime verification and approval workflows for high-impact actions. | OWASP LLM07:2026 Prevention and Mitigation |
| Trust signal | Groundedness and consistency checks, not model confidence | Confident, fluent output is not evidence of correctness. | OWASP LLM07:2026 Prevention and Mitigation |
| Generated code and packages | Verify a package exists and has history before adding it | Treat a suggested dependency as a claim; see the AI-assisted development guide on slopsquatting. | Spracklen et al., USENIX Security 2025 |
| Evaluation | A factuality and groundedness suite on your own domain, run in CI | Include adversarial and omission scenarios, not just happy-path questions. | OWASP LLM07:2026 Prevention and Mitigation |
- For a sample of real queries, check that every factual answer carries citations and that each cited source, when opened, actually states the claim; count unsupported or misattributed citations as failures.
- Feed the system questions whose answer is 'not in the sources' and confirm it abstains or says it does not know, rather than inventing an answer.
- Submit a question whose retrieved context omits a key constraint (a contraindication, an exception, an expiry) and confirm the answer does not present the incomplete picture as complete.
- Seed a retrieval source with a false 'fact' and confirm an agent does not repeat it as authoritative or act on it without a second check.
- For each consequential action an agent can take, confirm it validates arguments, authorization and preconditions against authoritative state before acting, and requires human approval where the default says so.
- Run the factuality and groundedness eval on every model or prompt change, and alert when the grounded-answer rate drops.
- Applies to
- OWASP Top 10 for LLM Applications 2026 edition (LLM07:2026, renumbered from LLM09:2025)
- Python 3.14 tested for the verifier and eval snippets
LLM features whose output informs people or drives workflows and agents: assistants, summarizers, RAG question answering, coding assistants and tool-using agents.
- Part of
- Workflow: Secure a feature
Learning goals and prerequisites
What you will learn
- Treat fluent output as a claim to verify, not a fact.
- Ground answers in sources and verify that every citation actually supports its claim.
- Separate generation from action with a claim-check-act pattern and human gates.
- Measure factuality and groundedness on your own domain instead of trusting confidence.
Before you start
Engineers building LLM features whose output people or systems act on, and reviewers of AI-assisted workflows.
- Call a hosted or local LLM and read its structured output.
- Know what retrieval-augmented generation (RAG) is.
Refresh first: Keep generated output out of executable contexts
Go to the guided practiceOWASP defines LLM07:2026 Misinformation (/owasp-llm-top-10/2026/llm07/) as output that is incorrect, incomplete, unsupported or misleading, yet credible enough to influence a human decision, an automated workflow or an agent action. The 2026 edition renumbered it from LLM09:2025. The core risk is not that the model is sometimes wrong; it is that the wrong output is trusted and acted upon. In modern systems, model output drives tool calls, generates code, infers system state and coordinates across agents, so a false representation becomes a bad action with financial, safety or security consequences.
Misinformation arises from hallucination, stale or incomplete context, weak grounding, ambiguous prompts, corrupted data, misleading summaries or unvalidated tool output, and attackers can induce it deliberately. OWASP keeps the root causes with injected or poisoned content separate: where the cause is prompt injection or data poisoning, those are their own categories; where the harm is unsafe execution of generated code, that is LLM10:2026 Improper Output Handling; and where a hallucinated package name is registered by an attacker, that is LLM04:2026 Supply Chain. This guide is about the resulting failure mode: a false claim that drives a harmful decision.
OWASP calls overreliance a key factor: people and systems treat fluent, confident, well-structured output as authoritative, and in agent architectures that overreliance is often baked into the design, where one component simply consumes another's output as fact. The controls in this guide exist to break that assumption, in the model's output, in the interface and in the wiring between components.
- Unsupported decision support: wrong information shapes a business, legal, healthcare, financial or operational decision.
- Incorrect state inference: the model concludes a condition is met when it is not, and a workflow acts on it.
- Fabricated code and dependencies: the model recommends wrong code or a non-existent package.
- Misleading summaries: a summary drops a constraint, exception, timestamp or risk.
- Cross-agent propagation: one agent's wrong output becomes another agent's trusted input.
- Forged or misattributed evidence: fabricated content is presented as an authoritative citation.
OWASP's first prevention is to require outputs to be grounded in authoritative and current sources. Retrieval-augmented generation that pulls the relevant policy, document or record into context, and a prompt that instructs the model to answer only from that context and to say when the answer is not present, cuts the rate of free-floating invention. Pair it with retrieval you trust: keep stale documents out, and isolate each tenant's sources so one customer's answer can't be grounded in another's data (see /domains/ai-emerging/llm-security/rag-tenant-isolation/).
Grounding reduces hallucination but does not prove a specific answer is supported. The model can still summarize the retrieved text wrongly, or cite a source that does not actually say what the claim says. That is why the next step verifies citations rather than trusting that grounding happened.
Ask the model to return claims with the source id and the exact quoted span it relies on, then check, in code, that the source exists and literally contains that span. A claim whose quote is not in its cited source is unsupported and should be withheld or flagged, which also catches the forged or misattributed evidence case. This tested verifier rejected a claim whose quote was absent and one that cited an unknown source.
from dataclasses import dataclass
@dataclass(frozen=True)
class Source:
id: str
text: str
@dataclass(frozen=True)
class Claim:
text: str
source_id: str
quote: str # the span the model says supports the claim
class UngroundedClaim(Exception):
pass
def verify_answer(claims, sources):
"""Every claim must cite a source that exists and contains its quoted span."""
by_id = {s.id: s for s in sources}
for c in claims:
src = by_id.get(c.source_id)
if src is None:
raise UngroundedClaim(f"claim cites unknown source {c.source_id!r}")
if c.quote not in src.text:
raise UngroundedClaim(f"quote not found in {c.source_id}: {c.quote!r}")
return TrueOWASP's second and third preventions are to separate generation from execution and to validate tool calls before running them. Don't let the model's assertion be the action. Treat what the model produces as a proposed claim or a proposed tool call, check it against authoritative data and the current system state, and only then act. For a refund agent, the claim is 'this order qualifies for a refund'; the check queries the order service for the real purchase date and policy; the act issues the refund only if the check passes. This structure directly answers OWASP's incorrect-state-inference and cross-agent-trust scenarios, where one component trusts another's say-so.
def handle_refund(agent_claim, orders, policy):
# 1. Claim: the model proposes an action with its reasoning.
order_id = agent_claim["order_id"]
# 2. Check: verify against authoritative state, not the model's assertion.
order = orders.get(order_id)
if order is None:
return {"status": "rejected", "reason": "unknown order"}
if not policy.refund_allowed(order): # real dates, amounts, prior refunds
return {"status": "rejected", "reason": "policy does not allow a refund"}
# 3. Act: only after the check, and only within verified bounds.
return orders.issue_refund(order_id, amount=order.amount)OWASP's fifth prevention is runtime verification for high-impact actions through approval workflows. Decide which actions are consequential (moving money, changing access, publishing, deleting, anything safety-relevant) and require a person to approve them with the evidence shown: the claim, the sources, and what the system will do. The agent-tool-authorization guide at /domains/ai-emerging/agent-security/tool-authorization/ covers enforcing these gates outside the model, where the model cannot talk its way past them. Keep humans effective by not flooding them with low-stakes approvals, so the consequential ones get real attention.
A frequent misinformation failure is a confident but wrong code suggestion, including a reference to a package that does not exist. Spracklen et al., in the USENIX Security 2025 paper 'We Have a Package for You!', generated 576,000 code samples from 16 models and found that on average at least 5.2% of the packages commercial models referenced, and 21.7% for open-source models, did not exist, with 205,474 unique hallucinated names; 43% of hallucinated packages reappeared in all ten repeats of the prompt that produced them, which is what makes them predictable enough to pre-register (slopsquatting). Treat a suggested dependency as a claim: check it exists in the registry, has a plausible history and is the package you meant, before adding it. The AI-assisted development guide at /domains/ai-emerging/agent-security/ai-assisted-development/ covers the slopsquatting gate in a build pipeline; the execution of unsafe generated code is LLM10:2026.
OWASP is explicit that confidence is not a verification signal and that you should test for misinformation with adversarial scenarios. Build an evaluation set from your own domain: real questions with known-good answers, questions whose answer is deliberately absent from the sources (to test abstention), and questions whose context omits a critical constraint (to test the misleading-summary case). Score groundedness, the rate of unsupported citations, and abstention when appropriate, and run it on every model or prompt change. The AI security evaluation guide at /domains/ai-emerging/assurance/ai-security-evaluation/ covers building and gating on these suites.
A simple groundedness metric reuses the citation verifier: the fraction of answers whose every claim passes.
def groundedness(records, verify):
"""Fraction of answers whose every claim is grounded (verify raises on failure)."""
passed = 0
for r in records:
try:
verify(r["claims"], r["sources"])
passed += 1
except Exception:
pass
return passed / len(records)The last line of defense is the human reading the output, so design for a skeptical reader. Show the sources next to the claims so they can be checked, surface uncertainty and abstention plainly instead of always answering, and distinguish verified facts from the model's assumptions (OWASP's calibrate-trust prevention). For agent output that other components consume, carry the provenance and verification status along with the data so a downstream component can refuse to act on an unverified claim rather than treating it as fact.
| Case | What the model got wrong | Missing control |
|---|---|---|
| Moffatt v. Air Canada, 2024 BCCRT 149 (case study: /domains/ai-emerging/llm-security/case-study-air-canada-chatbot/) | A support chatbot stated bereavement fares could be claimed retroactively, which was false; the tribunal found negligent misrepresentation and rejected the argument that the airline was not responsible for its chatbot. The decision does not say how the chatbot worked | Grounding customer answers in the actual policy; not letting the model state policy it cannot support |
| Mata v. Avianca, S.D.N.Y., June 2023 (678 F. Supp. 3d 443) | A legal brief cited non-existent cases with fake quotations produced by ChatGPT; on 22 June 2023 the court imposed a $5,000 penalty on the two lawyers and their firm for the filing and for standing by it | Verifying every citation against an authoritative source before relying on it |
| Spracklen et al., USENIX Security 2025 | At least 5.2% (commercial) and 21.7% (open-source) of the packages code-generating models referenced did not exist, a slopsquatting vector | Verifying a suggested package exists and is the intended one before installing it |
Guided practice
A company is shipping an internal 'policy assistant' that answers employee questions from an HR and benefits document store, and an agent that can file approved expense reimbursements. Review the design decisions below and decide which invite misinformation harm and how to fix each.
Supplied scenario material
D1 The assistant answers from the retrieved documents and appends "Sources: [doc ids]".
Reviewers noticed answers that cite a document which does not actually state the claim.
D2 When a question has no answer in the documents, the assistant still produces a confident answer.
D3 The reimbursement agent reads the assistant's statement "this expense is within policy"
and files the reimbursement automatically.
D4 A benefits summary dropped the sentence "dental is excluded for the first 90 days."
D5 The team evaluates quality by asking the model to rate its own confidence, 1-5.
D6 A developer pasted a fix the assistant suggested, including `pip install fastjsonschema-validators`.1. Fix the unsupported citations
Explain the problem in D1 and what to add.
Expected result and reasoning
Appending document ids proves retrieval ran, not that the cited document supports the claim; a misattributed citation is itself misinformation. Have the model return each claim with the exact quoted span, and verify in code that the span is present in the cited source before showing the answer; withhold or flag claims that fail.
2. Require abstention
Describe the risk in D2 and the fix.
Expected result and reasoning
Answering when the documents don't cover the question is the unsupported-decision-support case. Prompt and gate for abstention: when no source grounds the answer, say so and route to a human, rather than inventing one. Test it with questions whose answer is deliberately absent.
3. Insert a claim-check-act boundary
Explain why D3 is dangerous and redesign it.
Expected result and reasoning
The agent trusts the assistant's say-so (incorrect-state-inference and cross-agent trust). Separate generation from execution: treat 'within policy' as a claim, independently check the expense against the real policy and the employee's limits, and require human approval for the payment, with the evidence shown.
4. Catch the omission
Explain the harm in D4 and how to detect it.
Expected result and reasoning
A summary that drops the 90-day dental exclusion is the misleading-summary/critical-omission case and leads an employee to act on an incomplete picture. Require structured outputs with mandatory fields (exclusions, effective dates, exceptions) and test summaries for omission of known constraints.
5. Replace self-confidence with real evaluation and package checks
Explain what is wrong with D5 and D6 and the fixes.
Expected result and reasoning
D5: model self-confidence is not a verification signal; build a domain factuality/groundedness eval with known answers, abstention cases and omission cases, and gate on it. D6: the suggested package may be hallucinated (slopsquatting); verify it exists in the registry, has history and is the intended package before installing, and route dependency additions through the slopsquatting gate.
The exercise reasons about a design on paper. It does not measure the assistant's real factuality, prove the retrieval corpus is complete or current, or test the agent against adversarial inputs; a real rollout needs the evaluation suite, red-teaming and monitoring the OWASP entry calls for.
Save a draft on this device to resume later. Automatic saving begins after you choose Save. Drafts are never sent by this application; use synthetic data.
No draft saved on this device yet.
Sources & further reading
The standards, specifications and documentation behind the guidance above. Each is the evidence for a claim on this page; consult it for detail beyond the defaults and versions listed here.
- OWASP Top 10 for LLM Applications 2026 (LLM07 Misinformation; LLM10 Improper Output Handling). 2026 edition (3 August 2026).
- OWASP: LLM09:2025 Misinformation (the 2025 entry, renumbered to LLM07:2026). 2025 edition.
- CWE-1426: Improper Validation of Generative AI Output. CWE 4.20.
- Spracklen et al., 'We Have a Package for You!' USENIX Security 2025. USENIX Security 2025.
- Spracklen et al., package hallucination analysis (arXiv 2406.10279). arXiv, June 2024.
- Moffatt v. Air Canada, 2024 BCCRT 149 (Civil Resolution Tribunal of British Columbia). Decision of 14 February 2024.
- Mata v. Avianca, Inc., No. 22-cv-1461 (PKC) (S.D.N.Y.), opinion and order on sanctions, 678 F. Supp. 3d 443. 22 June 2023.
- NIST AI Risk Management Framework (AI RMF 1.0). AI RMF 1.0 (January 2023).
Reference information
- SDLC phase
- DesignDevelopmentTestingSecurity program
- Role
- AppSec engineers