GenAI Prompt Contains Leaked Credential

Last updated a day ago on 2026-11-06
Created 3 months ago on 2026-08-19

About

Detects known credential formats — AWS access key IDs, LLM vendor API keys, GitHub personal access tokens, SSH/PEM private key headers, JWTs, and similar — appearing in GenAI prompt or completion text, or in strings flagged by the security_ai ML model as encoded payloads. Credentials in the model input mean an application or user is sending secrets to the model, exposing them to invocation logging, the model provider, and prompt history. Credentials in the model output or in ML-extracted encoded blobs indicate either training-data leakage, a poisoned context window, or a prompt-injection-driven exfiltration attempt. Either case warrants immediate credential rotation.
Tags
Domain: GenAIUse Case: Security for AITactic: Credential AccessMitre Atlas: AML.T0055Data Source: AWS BedrockData Source: OpenAI ChatGPT EnterprisePlatform: AWSPlatform: OpenAIService: AWS BedrockService: OpenAI ChatGPT EnterpriseRule Type: ES|QLLanguage: esql
Severity
high
Risk Score
73
MITRE ATT&CK™

Credential Access (TA0006)(external, opens in a new tab or window)

False Positive Examples
Prompts or completions that reference example or documentation keys (for example the AWS sample access key ending in EXAMPLE) match the access-key pattern. Review the matched value in gen_ai.input.messages, gen_ai.output.messages, or security_ai.*.strings and confirm whether it is a live credential before responding. JWTs used as legitimate authentication tokens passed to the model for parsing, validation, or debugging. Inspect the prompt context to confirm whether the token was intentionally shared for a benign purpose.
License
Elastic License v2(external, opens in a new tab or window)

Definition

Integration Pack
Prebuilt Security Detection Rules
Related Integrations

security_ai(external, opens in a new tab or window)

aws_bedrock(external, opens in a new tab or window)

openai_chatgpt_enterprise(external, opens in a new tab or window)

Query
text code block:
FROM logs-aws_bedrock.invocation-*, logs-openai_chatgpt_enterprise.codex_log-*, logs-openai_chatgpt_enterprise.conversation_message-*, logs-openai_chatgpt_enterprise.custom_agents_log-* METADATA _id, _version, _index // gen_ai.*.messages are mapped as flattened, which RLIKE cannot read; TO_STRING returns their JSON text. | EVAL Esql_priv.all_text = CONCAT( COALESCE(MV_CONCAT(TO_STRING(gen_ai.input.messages), "\n"), ""), "\n", COALESCE(MV_CONCAT(TO_STRING(gen_ai.output.messages), "\n"), ""), "\n", COALESCE(MV_CONCAT(security_ai.encoding.input_messages.strings, "\n"), ""), "\n", COALESCE(MV_CONCAT(security_ai.encoding.output_messages.strings, "\n"), ""), "\n", COALESCE(MV_CONCAT(security_ai.hash_string.input_messages.strings, "\n"), ""), "\n", COALESCE(MV_CONCAT(security_ai.hash_string.output_messages.strings, "\n"), "")) // Credential formats are split across two RLIKEs because a single pattern with every format exceeds // ES|QL's regex determinization limit. A key must not be glued to a preceding key character (or be // preceded by a JSON-escaped \n, \r or \t); that also keeps the automaton small. // Not lowercased: credential prefixes (AKIA, sk-, ghp_, etc.) are case-significant. | WHERE Esql_priv.all_text RLIKE """(.*([^A-Za-z0-9_\-]|\\[nrt]))?((AKIA|ASIA|ABIA|ACCA)[A-Z0-9]{16}|ABSK[A-Za-z0-9+/=]{20}|AIza[0-9A-Za-z_\-]{35}|gh[pousr]_[A-Za-z0-9]{36}|github_pat_[A-Za-z0-9_]{22,}|glpat-[A-Za-z0-9_\-]{20,}|sk-ant-api03-[A-Za-z0-9_\-]{80,}|sk-proj-[A-Za-z0-9_\-]{20,}).*""" OR Esql_priv.all_text RLIKE """(.*([^A-Za-z0-9_\-]|\\[nrt]))?(sk-[A-Za-z0-9]{48}|sk_live_[A-Za-z0-9]{24}|hf_[A-Za-z0-9]{34}|xox[baprs]-[A-Za-z0-9\-]{10,}|eyJ[A-Za-z0-9_\-]{10,}\.eyJ[A-Za-z0-9_\-]{10,}\..*|-----BEGIN [A-Z ]*PRIVATE KEY-----).*""" | KEEP _id, _version, _index, @timestamp, gen_ai.*, security_ai.*, aws_bedrock.*, user.*, cloud.*, event.*, openai_chatgpt_enterprise.*

Install detection rules in Elastic Security

Detect GenAI Prompt Contains Leaked Credential in the Elastic Security detection engine by installing this rule into your Elastic Stack.

To setup this rule, check out the installation guide for Prebuilt Security Detection Rules(external, opens in a new tab or window).