Home/ Blog/ Security news/ Article
Blog · Security news

Encrypted page instructions make Grok leak your chat history

Adversa AI showed encrypted web-page instructions can make xAI's Grok leak your chat history and session data. Why plaintext filters miss it, and how to defend.

A sealed capsule passing through a fine mesh screen and splitting open beyond it

A safety filter cannot block an instruction it cannot read. That is the whole trick behind the latest attack on xAI's Grok, and it is why a better content filter will not stop it. Researchers at Adversa AI showed that a booby-trapped web page can make Grok hand over a user's ongoing chat history, plus their name, rough location, and subscription tier, to a server they control, all after the victim does nothing more sinister than ask the chatbot to summarize the page.

This is the same failure we have written about three times this year under different names. The wrapper changes; the hole does not. What is new here is how cleanly the technique defeats the one defense most teams are counting on.

The filter never sees the instruction

Adversa AI researcher Rony Utevsky calls the method Cryptographic Context Injection. The attacker plants an encrypted blob on a web page along with the key material and a note telling the model to decrypt it. A content classifier scanning that page sees ciphertext and nothing else. There is no malicious sentence to catch, because the malicious sentence does not exist yet in readable form.

When a user asks Grok to summarize the page, Grok runs the decryption itself, using PBKDF2 and AES-256-GCM in its own code runtime. The plaintext instructions then arrive inside the model's context as the output of trusted code execution rather than as untrusted text pulled off the internet. Grok follows them: it assembles a string that folds in the user's session details, then calls its own browsing tool to load an attacker URL carrying that data in the query parameters. No confirmation, no visible warning, nothing the user can veto.

Adversa AI reported the issue to xAI on June 3, 2026 and followed up in August. As of the August 20 public disclosure there was no patch, no CVE, and no user-facing workaround. The demonstration ran on Grok 4.5 Fast at grok.com and succeeded in about 40% of 20 attempts; the failures came from Grok mangling its own decryption, not from any filter catching the payload.

It is not quite a drive-by

Reports have split on whether to call this zero-click, so be precise about it. The victim has to take one action: ask Grok to summarize the attacker's page. Everything after that request runs on its own. No second click, no consent gate, no warning banner before the session data leaves. So it is not a drive-by that fires from a page you merely open, but it is also not something the user meaningfully agrees to. A routine summarize request is all it takes.

Two chatbots leaked, two did not

Adversa AI ran the same class of payload past four assistants, and the split is the most useful part of the research for anyone building on top of these models.

ChatbotWhat it did with the encrypted pageResult
xAI Grok 4.5 FastDecrypted the payload in its Python runtime, then called its browsing toolLeaked session data (~40% of attempts)
Google Gemini 3 FlashRan a variant hiding instructions in fake Python errorsBypassed safety rules; success rate fell after June
OpenAI GPT-5Could not parse the decryption instructionsResisted
Anthropic Claude Sonnet 4.5Decrypted, then flagged the text as a prompt injectionResisted
How four chatbots handled the same encrypted-payload test (Adversa AI, June to August 2026).

Two of the four leaked, two held. On Google's Gemini 3 Flash the researchers used a variant that hid instructions inside fake Python error messages and got the model to produce prohibited content, though that success rate dropped after June. OpenAI's GPT-5 simply could not parse the decryption steps. The one that matters most is Anthropic's Claude Sonnet 4.5: it decrypted the payload and then recognized the result as a prompt injection and refused.

That last case points at where the inspection has to live. GPT-5 got lucky by being bad at the crypto. Claude did the right thing on purpose: it treated the decrypted output as untrusted and screened it after the transform, not before. Any defense that only reads the page at ingest is blind to a payload that becomes malicious only after the model runs code on it. The checkpoint belongs after the decode step, at the moment the model is about to act, not at the door.

The encryption is a red herring

Strip away the cryptography and this is the same architecture bug that has been leaking data out of assistant products all year. We saw it when a single click could pull data out of Microsoft 365 Copilot, when Atlassian's Rovo assistant could be steered into leaking internal content, and when instructions hidden in a PNG hijacked AI coding agents. The constant across all of them is a three-part chain: the agent ingests untrusted content, it can resolve private context into a tool call, and there is no boundary or consent gate on what that tool reaches. Encryption is just the strongest way yet to smuggle step one past a filter.

The practical lesson is that adding a prompt-injection filter is not a fix for this class of bug. A classifier reads what it is shown, and strong encryption guarantees it is shown nothing useful. Chasing a smarter filter is chasing the wrong layer. The exposure is the outbound path, so the control has to sit on the outbound path.

Detect it on the way out

If you build or operate assistants that browse or summarize, the detectable moment is egress. The signal is an outbound request to a domain you never allowlisted, carrying session-shaped values in its query parameters, arriving right after the agent fetched an external page. That sequence in your proxy, DNS, or SIEM logs is worth an alert on any host running a browsing agent, and it is exactly the kind of anomalous outbound traffic a monitored log pipeline is meant to surface. You will not see the injection; you will see the exfiltration.

This connects to a broader point we made about guardrail bypasses in AI coding agents: the model is not the right place to enforce trust boundaries, and it never will be reliably. Treat every model as a component that can be talked into anything, and put the limits where you can actually enforce them.

Put the boundary around the agent, not in the model

Adversa AI's own conclusion is the right one: you do not fix this at the model layer. Bound the agent instead. Restrict which domains its tools are allowed to reach, so a call to an unknown host fails by default. Require confirmation for any cross-site tool action that carries user data. Log every outbound request the agent makes so you can replay what happened after the fact. And keep the identity the agent runs under as narrow as the job allows, so a hijacked summarize request cannot reach anything worth stealing. None of that depends on the model behaving. That is the point.

Topics

Frequently asked questions

What is Cryptographic Context Injection?

Cryptographic Context Injection hides an attacker's instructions inside AES-encrypted text on a web page. A safety filter cannot read the ciphertext, so when a chatbot decrypts it in its own runtime, the instructions arrive as trusted output and the model acts on them. Adversa AI disclosed the technique in August 2026.

Is Grok chat data being stolen in the wild?

There is no report of criminal exploitation yet. Adversa AI demonstrated the attack against Grok 4.5 Fast, leaking a user's chat history, name, rough location, and subscription tier to a test server in about 40% of attempts. xAI had not shipped a patch as of August 20, 2026.

Which AI chatbots are affected?

Adversa AI reproduced data theft on xAI's Grok and bypassed safety rules on Google's Gemini 3 Flash. OpenAI's GPT-5 and Anthropic's Claude Sonnet 4.5 resisted the same test. GPT-5 could not parse the instructions, and Claude flagged the decrypted text as a prompt injection and refused.

Is this a zero-click attack?

Almost. The victim has to ask the chatbot to summarize the attacker's web page. After that single request nothing else is required: no click, no consent prompt, and no visible warning before the session data leaves for the attacker's server. Reports differ on whether that counts as zero-click.

How do you defend against Cryptographic Context Injection?

You cannot fix it with a better content filter, because encryption defeats any scanner by design. Bound the agent instead: restrict which domains its tools can reach, require confirmation for cross-site tool calls, and log every outbound request so session data leaving to an unknown host stands out.

How would a defender detect this attack?

Watch egress. The signal is an outbound request to a domain you never allowlisted, carrying session-shaped data in its query parameters, right after the agent fetched a page. That pattern in your proxy, DNS, or SIEM logs is worth an alert on any host running browsing agents.

See what Suriq finds on your own servers.

Agentless checks for uptime and your cloud, a lightweight agent for detection on each server, and one console that ranks and explains what it finds.