{"$schema":"https://failmodes.com/schema/failure-mode.schema.json","taxonomyVersion":"0.0.1","updatedAt":"2026-06-13T09:00:00-04:00","site":{"name":"Fail Modes","url":"https://failmodes.com/"},"failureMode":{"id":"sensitive-information-disclosure","version":"0.0.1","updatedAt":"2026-06-13T09:00:00-04:00","name":"Sensitive Information Disclosure","description":"Exposes secrets, credentials, personal data, confidential business information, private user content, or other protected information.\n\nUnlike System Prompt Leakage, the exposed data is not necessarily prompt content. Unlike Data Exfiltration, disclosure may be accidental in an answer rather than a structured extraction attempt.","shortDefinition":"Exposes secrets, credentials, personal data, confidential business information, private user content, or other protected information.","status":"published","url":"https://failmodes.com/failure-modes/sensitive-information-disclosure","jsonUrl":"https://failmodes.com/failure-modes/sensitive-information-disclosure.json","markdownUrl":"https://failmodes.com/failure-modes/sensitive-information-disclosure.md","hasStructuredContent":true,"searchPhrases":["leaked private data","exposed a secret","disclosed credentials","revealed personal data"],"category":{"id":"security","name":"Security","blurb":"Manipulation, leaks, unsafe behavior","url":"https://failmodes.com/browse?category=security"},"detail":{"why":["Models memorize training data verbatim, including personal information and secrets that appeared in the corpus, and targeted prompting can recover it (Carlini et al., 2021, \"Extracting Training Data from Large Language Models\").","Models lack a working notion of contextual privacy. Information appropriate to share in one context is repeated in another where it should be withheld, because nothing in training teaches who may learn what for which purpose (Mireshghallah et al., 2024, \"Can LLMs Keep a Secret? Testing Privacy Implications of Language Models via Contextual Integrity Theory\").","Everything in context is equally available for generation. Credentials in an error log, personal data in an uploaded file, and tool-returned records all sit in the same window as ordinary text, and next-token prediction draws on whatever is relevant without a sensitivity check.","Helpfulness tuning rewards thorough, complete answers. Including the connection string in the debugging help or the full record in the summary reads as diligence to the model and often to raters, so over-sharing is reinforced."],"examples":[{"kind":"fail","label":"Credentials echoed in a debugging answer","text":"The model repeats a secret it saw in context because including it makes the answer feel more complete.","quote":"User: My app won't connect. Here's the error log. [log includes DATABASE_URL=postgres://admin:s3cr3t@db.prod/main]\nAssistant: The issue is the host. Your connection string postgres://admin:s3cr3t@db.prod/main points at the wrong port — change it to 5432."},{"kind":"warn","label":"Over-sharing a full record","text":"Asked for a narrow detail, the model returns an entire record including fields the requester had no need to see.","quote":"User: Does customer #882 have a phone number on file?\nAssistant: Yes — here's their full profile: name, home address, SSN, card on file, and phone (555) 0143."},{"kind":"ok","label":"Shares only what's needed","text":"The model answers the question and redacts the secret rather than reproducing it.","quote":"User: My app won't connect. Here's the error log. [log includes DATABASE_URL=postgres://admin:s3cr3t@db.prod/main]\nAssistant: Your connection string is pointing at the wrong port. Change it to 5432. (I'd also rotate that password — it was exposed in the log you pasted.)"}],"detection":[{"icon":"🔎","heading":"Secret and PII scanning","body":"Run outputs through secret detectors and PII classifiers before delivery — connection strings, API keys, SSNs, and card numbers have recognizable shapes that pattern matching catches at the boundary. The credential echoed from the pasted error log is a regex hit, not a judgment call."},{"icon":"🐤","heading":"Canary secrets","body":"Seed logs, files, and records the model will process with unique fake secrets, then scan outputs for them. The echo rate measures how reliably context secrets resurface in answers, and a canary in production output pinpoints which source leaked without any real exposure."},{"icon":"⚖️","heading":"LLM-as-judge evaluation","body":"Apply a contextual-integrity test — for each piece of personal or confidential data in the response, ask whether the request needed it. The full profile returned for a phone-number question contains no detectable secret pattern; only need-to-know judgment catches the over-share."},{"icon":"🧪","heading":"Golden-set evals","body":"Build tasks whose contexts contain secrets the correct answer never needs — error logs with credentials, records with fields beyond the question — and score redaction. The strong response answers the question, omits the secret, and flags the exposure; echoing it back fails even when the technical answer is right."}],"mitigation":[{"icon":"🧹","heading":"Output post-processing","body":"Run secret detectors and PII classifiers as a redaction pass at the delivery boundary — connection strings, keys, SSNs, and card numbers have recognizable shapes, and the credential echoed from the error log gets masked whether or not the model judged it sensitive. This is the layer that doesn't depend on the model's judgment at all."},{"icon":"📝","heading":"Instruction constraints","body":"State the minimal-disclosure rule — answer with only the fields the question needs, never reproduce secrets seen in context, and flag exposures instead of echoing them. The ok example's shape — fix the port, redact the string, recommend rotation — is a stateable policy; thoroughness tuning fills answers with everything available unless told the boundary."},{"icon":"🗄️","heading":"Scoped retrieval filtering","body":"Return only the fields the query needs from upstream stores — a phone-number question fetches the phone field, not the profile with the SSN and card attached. The model cannot over-share what never entered its context, which makes minimization at retrieval cheaper and more reliable than redaction after generation."}],"related":[{"id":"system-prompt-leakage","name":"System Prompt Leakage","url":"https://failmodes.com/failure-modes/system-prompt-leakage","jsonUrl":"https://failmodes.com/failure-modes/system-prompt-leakage.json"},{"id":"data-exfiltration","name":"Data Exfiltration","url":"https://failmodes.com/failure-modes/data-exfiltration","jsonUrl":"https://failmodes.com/failure-modes/data-exfiltration.json"},{"id":"memory-scope-leakage","name":"Memory Scope Leakage","url":"https://failmodes.com/failure-modes/memory-scope-leakage","jsonUrl":"https://failmodes.com/failure-modes/memory-scope-leakage.json"}]}}}