Status: Draft for community review. This is not an OWASP release. Cite LLMSVS v2.0 until this draft is accepted.
Publication target: next edition after 2.0.
This draft is kept in step with catalog/llmsvs-draft.json. Update the catalog and the sections below the preface together.
Version 2.0 kept the February 2024 requirement numbers and tightened wording. This draft makes the catalog assessable and lines it up with the OWASP Top 10 for LLM Applications 2026 (published 4 August 2026) and the OWASP Top 10 for Agentic Applications 2026.
Requirement identifiers from 2.0 still mean the same control where the row is active. Where the level or the obligation changed, the verification note under the chapter says so.
| Level | Use it for | What “pass” means |
|---|---|---|
| Level 1 | Any LLM-backed system | The baseline controls for the features that system actually has |
| Level 2 | Sensitive data, customer data, or internal business data | Level 1 plus the Level 2 rows for those features |
| Level 3 | High-value transactions, regulated data, or systems whose failure stops the business | Level 2 plus the Level 3 rows for those features |
Pick the level before testing. Do not drop a Level 1 row because it is inconvenient. Do mark a row Not Applicable when the feature is absent.
Tags used in this draft:
| Tag | The system has this feature when |
|---|---|
api |
An application sends prompts to a model, hosted or local |
self-host |
The organization runs inference or loads weight files |
retrieval |
Documents or embeddings are added to the prompt |
memory |
Conversation or long-term memory is stored across turns or sessions |
training |
The organization trains or fine-tunes a model |
online |
Production weights are updated from live user data |
agent |
The model can call tools, plugins, or remote tool servers |
Rules for the report:
LLMSVS is the pass/fail catalog for controls that exist because the system uses a model. The OWASP Top 10 for LLM Applications and the OWASP Top 10 for Agentic Applications are awareness lists. Cheat sheets describe implementation techniques. The OWASP Application Security Verification Standard covers the rest of the application, including ordinary authentication, session management, and web-service security. A mapping from this draft to the 2026 lists is in mappings/crosswalk.md. The ASVS citations below are the illustrative ones already published in LLMSVS 2.0; they are not a new clause-by-clause audit of ASVS 5.0.0.
Profiles for a chat assistant, a retrieval system, an agent, and a fine-tune pipeline are in profiles/. A sample assessment with pass, fail, and not applicable is in examples/worked-assessment.md.
OWASP does not certify LLMSVS assessments. An open-book review is the expected method: access to architects, source, configuration, and one account per role that the level claims to cover. The report lists the chosen level, the features in scope, every requirement as pass, fail, or not applicable, and enough evidence for a second person to repeat the conclusion.
The Large Language Model Security Verification Standard is a list of AI and LLM security requirements that architects, developers, testers, security professionals, tool vendors, and consumers can use to define, build, test, and verify LLM-backed applications.
Copyright © 2024–2026 The OWASP Foundation. This draft is released under the Creative Commons Attribution-ShareAlike 4.0 International License.
The 0.1 credit list is preserved here so the draft does not drop it. Names missing from that list should be added through a GitHub issue.
| Name | Organization |
|---|---|
| Eric Allen | Lakera |
| Frawa Vetterli | Lakera |
| Rory McNamara | Snyk |
| Raul Onitza-Klugman | Snyk |
| Moshe Ben-Nehemia | Snyk |
| Sam Watts | Lakera |
The standard is built on research performed by the Snyk Security Labs team in 2023. Structure and assessment practice are adapted from the OWASP ASVS project.
Snyk supported the original requirements work. Lakera reviewed an early draft of the 0.1 text. See SUPPORTERS.md.
Deployed LLM systems are known, their credentials are protected, self-hosted runtimes are isolated and patched, and changes to prompts, models, tools, and corpora follow the application change process.
| # | Requirement | Applies | L1 | L2 | L3 |
|---|---|---|---|---|---|
| 1.1 | Verify that credentials for model providers, vector stores, and other LLM-system dependencies are stored in the organization’s secret-management control and are not embedded in source, prompts, or client-side code. | api, self-host, retrieval, agent |
✓ | ✓ | ✓ |
| 1.2 | Verify that self-hosted model services are not reachable from untrusted networks except through an explicitly approved path. | self-host |
✓ | ✓ | |
| 1.3 | Verify that a current inventory lists every deployed model, prompt template, tool, and retrieval corpus, each with an owner and a version. | api, self-host, retrieval, memory, training, agent |
✓ | ✓ | ✓ |
| 1.4 | Verify that the configuration of the LLM system is reviewed on a defined schedule and that each review is recorded. | api, self-host, retrieval, agent |
✓ | ||
| 1.5 | Verify that self-hosted model runtimes and their serving software are patched on the organization’s defined cycle. | self-host |
✓ | ✓ | |
| 1.6 | Verify that changes to deployed prompt templates, model versions, tool definitions, and retrieval corpora are reviewed, versioned, and reversible under the same change process as application code. | api, self-host, retrieval, training, agent |
✓ | ✓ |
Organizations that train or fine-tune models control the data, the weights, and the decision to deploy. If the organization does not train or fine-tune, this chapter is Not Applicable except for 2.9, 2.10, 2.18, and 2.19 when it loads weights itself (those rows also carry the self-host tag).
| # | Requirement | Applies | L1 | L2 | L3 |
|---|---|---|---|---|---|
| 2.1 | Verify that training and fine-tuning follow a documented secure development process with an owner for each stage from data collection through deployment. | training |
✓ | ✓ | |
| 2.2 | Verify that the task, the users, and the data sources of a model are recorded before training or fine-tuning starts. | training |
✓ | ✓ | |
| 2.3 | Verify that each training or fine-tuning dataset has a recorded source and is checked for untrusted or malicious content before use. | training |
✓ | ✓ | ✓ |
| 2.4 | Verify that training datasets cannot be modified by parties who are not authorized to change them after acquisition. | training |
✓ | ✓ | |
| 2.5 | Verify that the origin of each training dataset and base model is recorded and retained with the model. | training |
✓ | ✓ | |
| 2.6 | Verify that cleaning and other modifications to training data are recorded with the author, the change, and the time. | training |
✓ | ✓ | |
| 2.7 | Withdrawn from the verification catalog. | — | |||
| 2.8 | Verify that training and fine-tuning data are scanned for sensitive data, and that data which must not be memorized is removed before training. | training |
✓ | ✓ | ✓ |
| 2.9 | Verify that foundation and pre-trained weights are obtained from an approved source and stored so that unauthorized parties cannot replace them. | training, self-host |
✓ | ✓ | ✓ |
| 2.10 | Verify that weights are loaded from a format that cannot deserialize arbitrary code, or that any exception is pinned to a digest, scanned, and recorded before load. | training, self-host |
✓ | ✓ | ✓ |
| 2.11 | Withdrawn from the verification catalog. | — | |||
| 2.12 | Verify that the regulations which apply to the training data are identified in a record, and that the training environment matches that record. | training |
✓ | ✓ | |
| 2.13 | Verify that each trained or fine-tuned model has a machine-learning bill of materials covering the base model, datasets, and training code. | training |
✓ | ✓ | |
| 2.14 | Withdrawn from the verification catalog. | — | |||
| 2.15 | Withdrawn from the verification catalog. | — | |||
| 2.16 | Verify that recorded tests cover prompt injection and sensitive-data extraction for a trained or fine-tuned model’s intended use before that model is approved for deployment. | training |
✓ | ✓ | |
| 2.17 | Verify that a recorded security assessment, including the risks the owner has accepted, is completed before a trained or fine-tuned model is deployed. | training |
✓ | ✓ | |
| 2.18 | Verify that retired models have their weights and unneeded training data removed or access-revoked so they cannot be loaded or queried. | training, self-host |
✓ | ✓ | |
| 2.19 | Verify that base models, adapters, and datasets used for training or for self-hosted inference are pinned to a digest, and that the digest is checked before use. | training, self-host |
✓ | ✓ | |
| 2.20 | Verify that fine-tunes and adapters are covered by the same source, scan, and digest controls as the base model they modify. | training |
✓ | ✓ |
Production weights do not change from live user data unless that path is approved and controlled. If weights are not updated from live traffic, every requirement in this chapter is Not Applicable. Conversation memory and retrieval are chapters V4 and V5, not this chapter.
| # | Requirement | Applies | L1 | L2 | L3 |
|---|---|---|---|---|---|
| 3.1 | Verify that online weight updates from live user interactions are explicitly approved and documented before they are enabled. | online |
✓ | ✓ | ✓ |
| 3.2 | Verify that samples retained from online learning are redacted of secrets and are readable only by the team that operates the learning process. | online |
✓ | ✓ | |
| 3.3 | Verify that operators can stop online learning and stop serving the updated model without a new release of the surrounding application. | online |
✓ | ✓ | |
| 3.4 | Verify that interactions used for online learning are reviewed on a defined schedule for attempts to steer the model. | online |
✓ | ✓ | |
| 3.5 | Verify that an online weight update does not serve production traffic until a person approves that update. | online |
✓ | ✓ |
Memory and retrieved documents stay inside the caller’s authority. Untrusted retrieved text is data, not an instruction. If the system has neither memory nor retrieval, this chapter is Not Applicable.
| # | Requirement | Applies | L1 | L2 | L3 |
|---|---|---|---|---|---|
| 4.1 | Verify that conversational memory returned to the model belongs to the current user and the current session boundary, and not to another user. | memory |
✓ | ✓ | ✓ |
| 4.2 | Verify that long-term memory is stored and read so that one user cannot retrieve or overwrite another user’s records. | memory |
✓ | ✓ | ✓ |
| 4.3 | Verify that every document placed into the model context is one the current caller is authorized to read. | retrieval |
✓ | ✓ | ✓ |
| 4.4 | Verify that vector stores, embedding caches, and similar retrieval components require authentication for every consumer. | retrieval |
✓ | ✓ | ✓ |
| 4.5 | Verify that production retrieval components grant each consumer only the operations that consumer needs. | retrieval |
✓ | ✓ | |
| 4.6 | Verify that only authorized processes can add or replace documents and embeddings in a knowledge base. | retrieval |
✓ | ✓ | ✓ |
| 4.7 | Verify that retrieved text and other untrusted content inserted into a prompt are delimited and identified to the application as data rather than as instructions. | retrieval, memory, agent |
✓ | ✓ | ✓ |
| 4.8 | Verify that each addition or replacement of a document or embedding records the actor and the time. | retrieval |
✓ | ✓ | |
| 4.9 | Verify that prompt caches and embedding caches cannot return one tenant’s entries to another tenant. | api, retrieval, memory |
✓ | ✓ |
The application, not the end user and not the model, decides what is trusted. Prompts are built server-side, output is validated and untrusted, hidden context is not a security boundary, and consumption is limited.
| # | Requirement | Applies | L1 | L2 | L3 |
|---|---|---|---|---|---|
| 5.1 | Verify that model requests are sent by a server-side component the organization controls, not by the end-user client directly to the model provider. | api |
✓ | ✓ | ✓ |
| 5.2 | Verify that the client cannot supply the system instructions or the full prompt that the provider receives. | api |
✓ | ✓ | ✓ |
| 5.3 | Withdrawn from the verification catalog. | — | |||
| 5.4 | Verify that model-provider credentials are covered by requirement 1.1 and are not placed in the prompt or the client. | api, agent |
✓ | ✓ | ✓ |
| 5.5 | Verify that model output which the application parses is validated against the expected schema before it is used, and that extra fields are rejected. | api |
✓ | ✓ | ✓ |
| 5.6 | Withdrawn from the verification catalog. | — | |||
| 5.7 | Withdrawn from the verification catalog. | — | |||
| 5.8 | Withdrawn from the verification catalog. | — | |||
| 5.9 | Verify that completions longer than the documented expected range raise an alert or are truncated before they are shown or acted on. | api |
✓ | ✓ | |
| 5.10 | Verify that responses shown to users do not include raw provider errors, stack traces, prompts, or credentials. | api |
✓ | ✓ | ✓ |
| 5.11 | Verify that the application documents the check it runs on prompts and completions for suspected prompt injection, and records the cases that check is known to miss. | api |
✓ | ✓ | ✓ |
| 5.12 | Verify that content from retrieval, tools, third parties, earlier model output, files, images, audio, and web pages is subject to the same controls as direct user input. | api, retrieval, memory, agent |
✓ | ✓ | ✓ |
| 5.13 | Verify that model output is treated as untrusted input at every downstream sink, including queries, markup, commands, URLs, and tool arguments. | api, agent |
✓ | ✓ | ✓ |
| 5.14 | Verify that each caller has a limit on how many model requests it can make in a defined period. | api |
✓ | ✓ | ✓ |
| 5.15 | Verify that an alert fires when model spend passes a defined threshold. | api |
✓ | ✓ | ✓ |
| 5.16 | Verify that a baseline of normal model use is defined and that departures from it generate an alert. | api |
✓ | ✓ | |
| 5.17 | Verify that unauthenticated or preview access can call only the model features intended for that access. | api |
✓ | ✓ | |
| 5.18 | Verify that authorization, tenant separation, and other security decisions are enforced in application code and still hold if the system prompt is disclosed. | api, agent |
✓ | ✓ | ✓ |
| 5.19 | Verify that each model call enforces a maximum input size and a maximum output size. | api |
✓ | ✓ | ✓ |
| 5.20 | Verify that prompts sent outside the organization’s trust boundary are redacted of secrets and of personal data the recipient is not approved to receive. | api |
✓ | ✓ | |
| 5.21 | Verify that the provider’s retention of prompts and its use of those prompts for training are documented, and that the configuration matches that decision. | api |
✓ | ✓ | |
| 5.22 | Verify that model output presented as fact is either limited to supplied sources or labeled as unverified before a person or another system acts on it. | api, retrieval |
✓ | ✓ | |
| 5.23 | Verify that release tests for the LLM feature include direct injection, indirect injection, sensitive-data extraction, and, where tools exist, unapproved tool use, and that the results are recorded. | api, retrieval, agent, training |
✓ | ✓ |
Tools run with the least authority that the current task needs, their definitions cannot change unnoticed, sensitive actions are approved as concrete calls, and a run cannot loop without a limit. If the model cannot call tools, this chapter is Not Applicable.
| # | Requirement | Applies | L1 | L2 | L3 |
|---|---|---|---|---|---|
| 6.1 | Verify that a task can call only the tools required for that task, and cannot call tools registered for a different task. | agent |
✓ | ✓ | ✓ |
| 6.2 | Verify that custom tools are built under the same secure development process as the rest of the application. | agent |
✓ | ✓ | |
| 6.3 | Verify that third-party tools and toolkits are approved through the organization’s third-party risk process before use. | agent |
✓ | ✓ | |
| 6.4 | Verify that tool arguments are validated for type and for allowed values before the tool runs. | agent |
✓ | ✓ | ✓ |
| 6.5 | Verify that credentials used by tools are covered by requirement 1.1. | agent |
✓ | ✓ | ✓ |
| 6.6 | Verify that the agent runtime can hand raw prompts, tool calls, and tool results to the organization’s monitoring and injection checks. | agent |
✓ | ✓ | |
| 6.7 | Verify that a tool cannot read or change data the current user is not allowed to read or change. | agent |
✓ | ✓ | ✓ |
| 6.8 | Verify that the host which runs tools cannot reach internal services that the tools do not need. | agent |
✓ | ✓ | |
| 6.9 | Verify that the host which runs tools can open outbound connections only to approved destinations. | agent |
✓ | ✓ | |
| 6.10 | Verify that each tool credential is scoped to the minimum operations that tool performs. | agent |
✓ | ✓ | ✓ |
| 6.11 | Verify that a person approves the tool name and arguments of each sensitive or irreversible action before that action runs. | agent |
✓ | ✓ | |
| 6.12 | Verify that tools which execute code or shell commands run in an environment that does not share the application filesystem or the application credentials. | agent |
✓ | ✓ | |
| 6.13 | Verify that tool definitions and remote tool servers, including Model Context Protocol servers, are pinned, and that a change to the description, endpoint, or schema is reviewed before use. | agent |
✓ | ✓ | ✓ |
| 6.14 | Verify that credentials the agent uses on its own behalf are distinct from the end user’s credentials, and that the agent cannot exercise the user’s authority beyond the current approved task. | agent |
✓ | ✓ | |
| 6.15 | Verify that messages accepted from another agent are authenticated and checked for integrity. | agent |
✓ | ✓ | |
| 6.16 | Verify that a run stops when it reaches a documented limit on tool-call count or on fan-out to other agents or tools. | agent |
✓ | ✓ | ✓ |
| 6.17 | Verify that operators can stop an agent and block further actions when its tool use leaves the approved baseline. | agent |
✓ | ✓ |
Models, adapters, and libraries that implement LLM features come from approved sources, are pinned, and are patched. This chapter covers the supply chain of components. Dataset and weight provenance for training also sits in V2.
| # | Requirement | Applies | L1 | L2 | L3 |
|---|---|---|---|---|---|
| 7.1 | Verify that software composition analysis runs against third-party components used by the LLM feature, and that known vulnerable versions in use have a recorded remediation decision. | api, self-host, training, agent |
✓ | ✓ | |
| 7.2 | Verify that models, adapters, and libraries that implement LLM features are obtained only from sources on an approved list. | self-host, training, agent |
✓ | ✓ | ✓ |
| 7.3 | Verify that a documented patch process covers third-party components used by the LLM feature. | api, self-host, training, agent |
✓ | ✓ | |
| 7.4 | Verify that a software bill of materials lists the third-party components, licenses, and versions used by the LLM feature. | api, self-host, training, agent |
✓ | ✓ | |
| 7.5 | Verify that any model artifact capable of deserializing arbitrary code is scanned before load and the scan result is recorded. | self-host, training |
✓ | ✓ | ✓ |
| 7.6 | Verify that private package registries used for LLM components are configured so a public package of the same name cannot be substituted. | self-host, training, agent |
✓ | ✓ | |
| 7.7 | Verify that model files are rejected at load time when their digest does not match the recorded value. | self-host, training |
✓ | ✓ |
Operators can see which model, prompt version, caller, tools, and documents were involved, without collecting secrets, and they have a response path when that activity is abused.
| # | Requirement | Applies | L1 | L2 | L3 |
|---|---|---|---|---|---|
| 8.1 | Verify that usage of the LLM feature is monitored for departures from the expected volume and output pattern, and that those departures alert. | api |
✓ | ✓ | |
| 8.2 | Verify that alerts exist for suspected prompt leakage, unexpected tool use, and model cost above the defined threshold. | api, agent |
✓ | ✓ | |
| 8.3 | Verify that security logs for each model call record the model identity, prompt-template version, caller, tool names, and retrieval-document identifiers, and omit secrets and raw sensitive prompt or completion text. | api |
✓ | ✓ | ✓ |
| 8.4 | Verify that LLM security logs are retained for a documented period and cannot be changed by the application role that writes them. | api |
✓ | ✓ | |
| 8.5 | Verify that the incident process describes the response to a prompt-injection campaign, poisoning of retrieved or training data, tool abuse, and unplanned model cost. | api, retrieval, training, agent |
✓ | ✓ |
New identifiers: 1.5, 1.6, 2.19, 2.20, 4.7, 4.8, 4.9, 5.18, 5.19, 5.20, 5.21, 5.22, 5.23, 6.13, 6.14, 6.15, 6.16, 6.17, 7.7, 8.3, 8.4, 8.5.
Withdrawn identifiers, which must not be reused: 2.7, 2.11, 2.14, 2.15, 5.3, 5.6, 5.7, 5.8.
Active identifiers keep their v2.0 numbers. Verification notes record where the level or the obligation changed. The full crosswalk to the 2026 Top 10 lists is in mappings/crosswalk.md.
These items were requirements or “consider” rows in v2.0. They are not pass/fail rows in this draft.
Terms used by the requirements. Textbook machine-learning definitions are left to other references.
api, self-host, retrieval, memory, training, online, agent). Requirements carry one or more tags. Absent features are Not Applicable.