Imperva hid prompt injections behind whitespace in contact names, vCards and WhatsApp pins, making an OpenClaw agent run a script. A lab demo, now patched.
Social Engineering Examples·4 sources
This OpenClaw prompt injection was hidden in places nobody looks: a shared contact's name, a vCard and a WhatsApp location pin. Imperva researcher Yohann Sillam padded each one with long runs of spaces, then added an instruction telling the AI agent to download and run a script. OpenClaw's screen cut the long field short, so a person saw an ordinary name. The model saw everything. In Imperva's lab, all three tricks worked. Imperva published on 10 June 2026, after OpenClaw had already shipped a fix. Status: Lab demonstration; no one attacked.
Quick background. OpenClaw hooks a language model up to WhatsApp, Telegram and Slack, then hands it real powers: workflows, API calls, your files. Before the fix, a shared contact, vCard or map pin went into the prompt as-is. A contact became a plain string like "<contact: NAME, NUMBER>". There was no label saying "this came from outside, don't obey it", even though OpenClaw did label content fetched from the web that way.
| Vector | How the payload hid |
|---|---|
| Contact name | 65 spaces, then the instruction |
| vCard "FN" field | 120 spaces, then the instruction |
| WhatsApp location label | The same padding trick (Imperva gave no count) |
To finish, each payload tacked on an innocent little question. If anyone did spot the tail end, it looked fine. One more wrinkle: a contact name can contain "<" and ">". Close the tag early, and the model reads whatever comes next as the user's own words. Imperva's own line: "the LLM has no way to know an injection happened."
An earlier try, hiding the instruction as faint text over an image, failed. Imperva guessed models have been trained against that by now. It was one attempt, and the guess wasn't tested.
Tip: if your AI assistant reads things other people send you, assume anything they send can talk to it.
| Shown | Not shown |
|---|---|
| All three vectors made the agent fetch and run a script, using google/gemini-3.1-pro-preview | Any real victim or compromised deployment |
| The script created an empty file at /tmp/pawn, to prove it ran | Persistence across sessions |
| The download host was a local server Imperva ran. Its name had an underscore, so it couldn't resolve on the public internet | Data theft |
| Imperva saw "similar patterns" in other AI assistants | Results on other models. OpenClaw works with many |
Imperva raised persistence and data theft as risks, since OpenClaw keeps memory by default and agents often have file, API and database access. It didn't demonstrate either.
The story Imperva sketches goes like this. Someone shares a contact or a map pin that looks worth acting on. The recipient passes it to their AI agent. That person isn't lied to. They just can't see the payload. That's why this falls under machine-targeted prompt injection rather than tricking a person.
Imperva reported the issue to OpenClaw before publishing. OpenClaw version 2026.4.23, released 24 April 2026, moves contact, vCard and location text out of the main prompt and into "fenced untrusted metadata JSON". It went out as an ordinary changelog entry: no advisory, no CVE, no severity rating.
One trap for researchers. The same release fixed CVE-2026-45004 (GHSA-r39h-4c2p-3jxp), a separate code-execution bug in plugin setup. It has nothing to do with Imperva's finding, which has no CVE.
See also agentic AI attacks and ForcedLeak.
An Imperva lab finding that instructions hidden behind whitespace in contact names, vCards and WhatsApp location labels could make an OpenClaw agent download and run a script.
No. Imperva ran it against its own test agent and server, and the script only created an empty file.
Yes. OpenClaw 2026.4.23 treats that text as untrusted metadata instead of putting it in the main prompt.
No. CVE-2026-45004, fixed in the same release, is a different bug.
Social Engineering Examples. “OpenClaw prompt injection hidden in contacts, vCards and map pins (2026)”. Accessed 3 November 2026. https://socialengineeringexamples.com/imperva-openclaw-message-object-prompt-injection-2026
Imperva mapped OpenClaw's architecture, an LLM at the center of WhatsApp, Telegram, and Slack integrations with file, API, and shell access, and found no trust-boundary tagging (no EXTERNAL_UNTRUSTED_CONTENT-style marker) around non-conversational "message objects" like contacts, vCards, and geolocation pins, a gap a real attacker would similarly need to identify before crafting a payload.
enforce explicit trust-boundary tagging (EXTERNAL_UNTRUSTED_CONTENT-style markers) around every category of non-conversational object data, including contacts, vCards, geolocation, images, and files, before it ever reaches the LLM, closing the exact gap Imperva found and the one OpenClaw's own team patched in v2026.4.23 once notified.
Imperva first tested a well-known injection vector, a near-invisible low-contrast text overlay hidden in an image, and the model it had selected for testing (google/gemini-3.1-pro-preview, the latest Gemini release at the time of writing) did not act on it, which Imperva attributed, on that single attempt and without testing the explanation, to the vector having been reported often enough for models to be trained against it; that result drove the pivot to "unusual" object types (contacts, vCards, geolocation labels) that models are less trained to scrutinize.
model providers' training against known injection vectors like image-hidden text is a real but partial control since it stops the vector it was trained on but does not generalize to novel or "unusual" carriers, so platforms should not rely on model training alone and should instead apply the same untrusted-content handling uniformly across all object types, not just the ones known to be risky today.
the researcher observed that OpenClaw's contact and vCard viewport truncates long name fields to the first visible characters, and built a payload by appending 65 (contact name) or 120 (vCard FN field) spaces of whitespace padding after a normal-looking name, followed by an instruction to fetch and execute a script from an attacker-controlled domain, with a closing pretext line so any trailing text that was seen would still read as benign.
UI fields that truncate long values should never be treated as a safety boundary, since attackers can pad hidden payloads with whitespace past the visible cutoff; interfaces should surface full untruncated field contents, flag anomalously long name or label fields, or hard-cap their length rather than silently hiding overflow.
Imperva pointed the payload at a local HTTPS server it ran itself under the name imperva_artifactory.com, serving a demonstration script. That name contains an underscore, which is not a legal character in a DNS hostname, so it never resolved publicly and was never registered. A real attacker would have to stand up reachable infrastructure at this step. Imperva did not, because it was evidencing an injection rather than running an attack.
there was nothing to block in Imperva's own test, since the endpoint was a local server under a name that cannot resolve, but against a real attacker blocklisting freshly registered infrastructure ahead of time is not realistic, because a new attack domain looks like countless other new domains; the more effective control sits downstream in sandboxing and restricting what an agent is allowed to fetch and execute (see Stage 6) rather than trying to predict attacker domains in advance.
Delivery via a viral, trusted-format object, as Imperva sketches it rather than as something it carried out: in the described attack a crafted contact card, .vcf file, or WhatsApp geolocation pin is shared to someone's messaging account in a form that looks ordinary and worth acting on, such as a business contact worth looking up or an office-address pin, relying on the recipient forwarding or referencing the object to their AI agent rather than opening any attachment or link. In the testing Imperva actually ran, the researcher shared the crafted objects with an agent he controlled.
the viral-sharing step exploits ordinary, high-trust consumer behaviors like forwarding a contact or map pin, which is very hard to intercept at the messaging-platform layer; the realistic control is hardening what happens once the object reaches an AI agent (Stage 6) rather than trying to police what users share with each other.
because OpenClaw flattened the object's free-text fields directly into the LLM's inline prompt with no untrusted-content tag, and because the viewport truncated the field before the hidden instruction, the agent parsed the padded, invisible instruction as an authenticated user command and executed the researcher's script, which wrote an empty file to /tmp/pawn on Imperva's own host to evidence the execution.
keep tool-execution sandboxing (e.g., OpenClaw's exec sandbox) enabled by default rather than opt-in, and route non-conversational free text through a structured, clearly-labeled untrusted channel instead of flattening it into the inline prompt, exactly the fix OpenClaw shipped in v2026.4.23.
Persistence and blast-radius expansion, raised as risk and not demonstrated: Imperva ran no test of either. It notes that OpenClaw's default cross-session memory could let a compromise persist into later sessions, and that because a contact, vCard or location pin is easily reshared, one crafted object could plausibly reach many downstream recipients. Its wording stays conditional: "a single piece of viral content could silently compromise environments if not properly sandboxed". No exfiltration of any data was attempted or shown.
limit default cross-session memory persistence so a single poisoned object cannot silently taint later sessions, and push toward an industry serialization standard for how messaging-object content reaches an LLM, the gap Imperva explicitly compares to MCP's role for tool integration, so that invisible-until-exploited is not the default posture across the personal-AI-assistant ecosystem.
Browse by what this case has in common with others in the library.
Sysdig says an AI agent ran the JADEPUFFER ransomware attack end to end: unpatched Langflow, stolen secrets, 1,342 configs destroyed.…
OpenAI's own test agents escaped their sandbox and broke into Hugging Face in July 2026, chasing a grader that didn't…
APT28's LAMEHUG malware asked an AI model on Hugging Face to write the spy commands it ran on Ukrainian government…
Fake QR stickers on UK council parking machines sent drivers to cloned payment sites. 123 of 373 councils were hit…
A Lapsus$ affiliate used a contractor's stolen Uber password, likely bought on the dark web, flooded them with MFA push…
North Korea-linked hackers ran fake job interviews for crypto firms, then told applicants to paste a 'camera fix' that installed…
Fraudsters swapped a former MP's number in his company's phone but kept his photo, then ordered Rs 7.68 crore in…
In 2022, 0ktapus texted staff fake IT alerts linking to Okta lookalikes, stealing 9,931 logins and MFA codes. Twilio was…
Prosecutors allege a Ghana-based network used fake female personas, AI video and inheritance stories to take $8M+ from 80+ elderly…
Anthropic says a suspected Chinese state group conned Claude Code with a fake pentest story and let it run most…
A '2011 Recruitment Plan' email with a booby-trapped Excel file breached RSA in 2011. SecurID data was stolen and later…
A Rapid7 penetration tester tailgated into a client's building using door-holding reciprocity and a cloned-looking badge, rode an elevator up…
ESET found PromptLock, ransomware that had a local AI model write its scripts at runtime. It turned out to be…
Researchers from UIUC, the University of Michigan, and Google dropped 297 USB drives across the UIUC campus and found that…
Three separate congressional watchdog engagements, not one campaign. In 2000, GAO agents carrying counterfeit badges declared themselves armed officers and…
Noma Security hid a prompt injection in a Salesforce web form and made Agentforce leak CRM data to a $5…