Teams still put API keys, database names, role rules and transaction limits into system prompts, then assume the model will keep them private, and it will not. LLM07:2025 System Prompt Leakage was added to the OWASP Top 10 for LLM Applications in the 2025 edition to address this. The OWASP text is blunt: the system prompt "should not be considered a secret, nor should it be used as a security control". This guide explains what that means in design terms: what may and may not live in a prompt, where secrets and authorisation logic should go instead, how to test that leakage does no harm, and how to evidence it. It is for developers, AI platform engineers, security architects and assessors reviewing LLM applications and agents.
Key takeaways
- Assume the prompt is public. Attackers can extract system prompts with direct prompt injection, and even without the exact wording they can infer most guardrails by probing the application.
- Leakage is a symptom, not the harm. OWASP places the real risk in what the prompt holds or replaces: credentials, internal rules, role structures, or authorisation delegated to the model.
- Secrets belong in a secrets manager. Credentials used by tools must be held and injected by application code, never written into instructions the model can read and repeat.
- Enforce rules in deterministic code. Limits, permissions and privilege separation must be checked outside the LLM, in a way that is auditable and does not depend on the model obeying.
- Test against the leaked prompt. The right assurance question is "if this prompt were published tomorrow, what could an attacker do?", answered with tests, not hope.
What it is and who it applies to
A system prompt (also called a system message, developer message or metaprompt) is the instruction set an application gives the model before user input: persona, task, formatting rules, tool descriptions and constraints. OWASP defines LLM07 as the risk that these instructions "contain sensitive information that was not intended to be discovered" and that, once discovered, help other attacks. It applies to every LLM application and agent, whether built on a hosted API, a self-hosted model or a configurable assistant platform where the prompt is stored with the provider.
MITRE ATLAS describes the attacker side in two techniques. AML.T0056 Extract LLM System Prompt notes the prompt can be obtained through prompt injection or "extracted from a configuration file", and that prompts can be valuable intellectual property. AML.T0069 Discover LLM System Information, with sub-techniques for special character sets, system instruction keywords and the system prompt itself, describes reconnaissance used to craft later attacks. Microsoft's own guidance on system messages says they "aren't a complete safety solution" and that "adversarial prompting can bypass or degrade them".
LLM07 is closely tied to LLM01 Prompt Injection (the usual extraction method), LLM02 Sensitive Information Disclosure (when the prompt holds sensitive data) and LLM06 Excessive Agency (when the prompt is the only thing limiting what an agent does). See the OWASP Top 10 for LLM Applications Guide for the list and the Prompt Injection Guide for extraction techniques and defences.
Structure and key requirements
OWASP gives four examples of risk and four prevention strategies. The first table pairs each example with the harm and the fix.
| OWASP example | What leaks | Real harm | Where it should live instead |
|---|---|---|---|
| Exposure of sensitive functionality | API keys, database credentials, user tokens, architecture details such as the database type behind a tool | Direct use of credentials; targeted attacks such as SQL injection against the named database | Secrets manager, injected by the tool runtime; architecture details nowhere in model-visible text |
| Exposure of internal rules | Business limits, for example OWASP's banking case of a 5,000 dollar daily transaction limit and a 10,000 dollar loan cap | Attackers learn the thresholds and target the model rather than the control | Server-side business logic that rejects out-of-limit transactions regardless of model output |
| Revealing of filtering criteria | Content rules such as refusing requests about other users | Attackers learn exactly what to rephrase around | External guardrails and authorisation checks on the data itself |
| Disclosure of permissions and user roles | Role structures such as "Admin user role grants full access to modify user records" | Guides privilege escalation attempts | Identity provider and authorisation service; the model receives only the outcome |
The four OWASP mitigations
- Separate sensitive data from system prompts: no API keys, auth keys, database names, user roles or permission structures in prompts; externalise them to systems the model does not directly access.
- Avoid reliance on system prompts for strict behaviour control: prompt injection can alter the effective instructions, so harmful content detection and similar checks belong in external systems.
- Implement guardrails outside the LLM: training the model not to reveal its prompt is not a guarantee; an independent system that inspects output is preferable to prompt instructions.
- Enforce security controls independently from the LLM: privilege separation and authorisation bounds checks must be deterministic and auditable. Where tasks need different levels of access, OWASP recommends multiple agents, each with the least privilege for its task.
What can and cannot go in a prompt
| Content | In the prompt? | Reason |
|---|---|---|
| Persona, tone, task description, output format | Yes | Harmless if disclosed |
| Tool names and descriptions the model must use | Yes, minimal | Needed for function calling; describe purpose, not backend internals |
| Behavioural guidance (be concise, decline off-topic requests) | Yes, as a usability layer | Shapes quality; never the only control |
| API keys, passwords, tokens, connection strings | Never | Directly usable on disclosure |
| Internal hostnames, database types, schema details | No | Reconnaissance value with no benefit to the model |
| Role definitions, approval thresholds, transaction limits | No, as enforcement | Must be enforced in code; the model may be told the outcome of a check |
| Other users' or customers' data | Never | Disclosure becomes an LLM02 incident |
Identity and NHI requirements
LLM07 is at heart a non-human identity problem. OWASP's first attack scenario is a system prompt containing credentials for a tool; once leaked, the attacker uses them "for other purposes". That is an unmanaged secret, matching ATLAS AML.T0055 Unsecured Credentials and ATT&CK T1552.001 Credentials In Files.
- Tool credentials: the tool runtime, not the model, authenticates to downstream systems. Store keys in a vault or use workload identity federation so that no static secret exists to leak. See the Secrets Management Guide.
- One identity per agent role: follow OWASP's advice to split tasks that need different access across agents, each with its own scoped identity, rather than one agent whose prompt says "only use admin functions for admins". See the AI Agent Authorisation Guide.
- User context from the identity provider: the application decides what the user may do from validated token claims and passes the model only what is needed. The model should never decide whether a user is an administrator.
- Prompt stores are configuration: assistant and agent platforms keep prompts provider-side (OpenAI documents that objects such as assistants and agents are stored until deleted). Anyone holding the platform API key can read them, so protect those keys like any other privileged credential. See the LLMjacking Guide.
- Rotate on exposure: if a credential was ever in a prompt, prompt template, repository or trace, treat it as leaked and rotate it. See the Leaked Credential Response Playbook.
Implementation steps
- Collect every prompt. Inventory system prompts, prompt templates, tool descriptions and agent configurations across code repositories, prompt management tools and provider consoles. Many teams find prompts in more places than expected.
- Scan for secrets and sensitive content. Run secret scanning over prompt files and template repositories, and review each prompt manually for internal hostnames, roles, limits and personal data. See the Git Secret Scanning Guide.
- Move secrets out and rotate them. Replace embedded credentials with runtime retrieval by the tool layer, then rotate every credential that was found. Do the rotation even if no leak is known.
- Move enforcement into code. For each rule in the prompt, ask whether breaking it would cause harm. If yes, implement it as a server-side check (authorisation, limit, allowlist) and keep the prompt wording only as guidance.
- Add external guardrails. Inspect inputs and outputs with a separate classifier or rules engine, including a check for verbatim prompt fragments or canary strings in output. The OWASP Prompt Injection Prevention Cheat Sheet notes output keyword filtering is not sufficient on its own, so treat this as detection, not prevention. See the AI Guardrails and AI Firewalls Guide.
- Test assuming disclosure. Give testers the full prompt and ask them to break every rule in it. Any rule that holds only because the model complies is a finding.
- Pilot and roll back safely. Ship refactored prompts behind a feature flag to an internal ring first, compare task quality with the old version, and keep the previous prompt version under change control for quick rollback (which must not reintroduce removed secrets).
Decision guidance
- Prompt confidentiality as a commercial concern: if the prompt is valuable intellectual property, hide it from the client side and avoid echoing it, but accept that this raises effort for copying, not security. Never let security depend on it.
- Single agent versus multiple agents: one agent is acceptable when every user has the same rights; split agents by privilege when actions differ by role.
- Small teams: the minimum is no secrets in prompts, server-side authorisation and a canary test. Larger organisations add prompt inventory in change management, a gateway that logs and inspects prompts, and periodic red-team exercises. See the AI Gateway and LLM Gateway Guide.
Evidence and assessment
Assessors should be able to answer three questions from evidence: does any prompt contain a secret, does any security rule depend on the model, and would we know if the prompt were extracted.
- Prompt inventory and scan results: list of prompts with owner, location and latest secret scan result.
- Rule-to-control matrix: each rule stated in a prompt mapped to the code-level control that enforces it, or marked as guidance only.
- Disclosure-assumed test report: testers given the prompt attempt to exceed limits, reach other users' data and invoke privileged tools. See the AI Red Teaming Guide.
- Canary tests: the OWASP cheat sheet suggests a dummy marker in the system prompt to detect leakage in output, while warning that its absence does not rule out other leaks and that real secrets must never be used in test prompts.
- Rotation records: evidence that credentials found in prompts were rotated.
Detection and metrics
Log prompt versions, guardrail decisions and output matches against prompt fragments or canaries (NIST SP 800-53 AU-2, SI-4). Repeated extraction-style requests from one account are worth alerting on, though they are weak signals because extraction attempts are cheap and common. See the LLM Observability Guide.
- Prompts containing secrets: target zero, measured by scheduled scanning.
- Prompt rules without code enforcement: count of security-relevant rules enforced only by the model, trending to zero.
- Disclosure-assumed test pass rate: share of rules that hold when testers know the prompt.
- Prompt inventory coverage: percentage of production LLM features with a registered, owned prompt.
- Canary detections: count of prompt fragments seen in outputs, each triaged.
Mapping to other frameworks
| Framework | Reference | Relevance to LLM07 |
|---|---|---|
| MITRE ATLAS | AML.T0056 Extract LLM System Prompt | Extraction via prompt injection or configuration files |
| MITRE ATLAS | AML.T0069 Discover LLM System Information (AML.T0069.000, .001, .002) | Discovery of delimiters, instruction keywords and the system prompt to plan attacks |
| MITRE ATLAS | AML.T0051.000 Direct (LLM Prompt Injection) | Referenced by OWASP for meta prompt extraction |
| MITRE ATLAS and ATT&CK | AML.T0055 Unsecured Credentials; T1552.001 Credentials In Files | Credentials embedded in prompts and prompt files |
| NIST SP 800-53 Rev. 5 | IA-5, AC-3, AC-6, SC-28, SI-15, SA-8, SA-11, CA-8 | Authenticator management, access enforcement outside the model, least privilege, data at rest, output filtering, engineering principles, developer testing, penetration testing |
| NIST CSF 2.0 | PR.AA-05, PR.DS-01, DE.CM-09 | Least privilege permissions, protection of stored configuration, runtime monitoring |
| ISO/IEC 27001:2022 Annex A | 5.17, 8.2, 8.9, 8.28 | Authentication information, privileged access rights, configuration management, secure coding |
| CIS Controls v8.1 | Control 6 Access Control Management, Control 16 Application Software Security | Role enforcement outside the application model, secure development and testing |
Common pitfalls
- Treating "never reveal these instructions" as protection. Microsoft and OWASP both state that prompt-level instructions can be bypassed. The line costs nothing to include, but it protects nothing.
- Credentials in tool descriptions. Developers paste an API key into a function description or a prompt template "for testing", and it reaches production and the template repository.
- Limits enforced only in words. A prompt says refunds above a threshold need approval, but the refund API accepts any amount from the agent's service account.
- Role checks performed by the model. The prompt tells the model to act differently for administrators, and the model decides from conversation content who is an administrator.
- Allowlists the model is told about but nothing enforces. In ForcedLeak the effective fix was platform enforcement of Trusted URLs for agent output, a control outside the model.
- Forgetting provider-side prompts. Prompts configured in hosted assistant consoles are missed by repository scans and change control.
Practitioner checklist
- Inventory every system prompt, template, tool description and agent configuration, including provider consoles.
- Scan all prompts for secrets on every change and on a schedule.
- Remove credentials from prompts, move them to a secrets manager or workload identity, and rotate them.
- Remove internal hostnames, database types, role structures and business limits from model-visible text.
- Map every security-relevant prompt rule to a deterministic server-side control.
- Split agents by privilege where tasks need different access, each with a least-privilege identity.
- Run an external guardrail and a canary check on outputs, and log the results.
- Test with the full prompt disclosed to testers and fix any rule that holds only through model compliance.
- Keep prompts under version control and change management, with rollback that cannot reintroduce secrets.
Standards and references
- OWASP: LLM07:2025 System Prompt Leakage
- OWASP: Top 10 for LLM Applications 2025
- MITRE ATLAS: Extract LLM System Prompt
- MITRE ATLAS: Discover LLM System Information
- OWASP: LLM Prompt Injection Prevention Cheat Sheet
- Microsoft Learn: System message design
- NIST: SP 800-53 Rev. 5
- MITRE ATT&CK: Credentials In Files
Related NHI Mgmt Group resources: OWASP Top 10 for LLM Applications Guide · OWASP LLM Top 10 LLM02 Sensitive Information Disclosure Guide · Prompt Injection Guide · LLM Security Guide · Secrets Management Guide