The demo: Acme Helpdesk, grade F to A
A fictional support assistant, built to be vulnerable. Scan it as it ships, add defences one step at a time, rescan. Every number is a real run.
ragprobe security run --victim live.Attacks that go beyond a single prompt — and where the defences do and do not hold. Everything below is a real run of the code in this repository, rebuilt on every push.
A fictional support assistant, built to be vulnerable. Scan it as it ships, add defences one step at a time, rescan. Every number is a real run.
ragprobe security run --victim live.The attacker's text hides in a tool instead of the user's message: a tool description that orders a harmful action, a tool that turns malicious after you approve it (rug-pull), or a tool result that tells the agent to leak data through another tool. 5 scenarios against a worst-case obedient agent; an attack succeeds when a planted code leaves the sandbox by email.
| Defence | Data leaked | 95% CI | Poison withheld | Blocked by policy |
|---|---|---|---|---|
none | 57–100 | 0/5 | 0/5 | |
detector | 12–77 | 3/5 | 0/5 | |
tool-policy | 0–43 | 0/5 | 5/5 | |
layered | 0–43 | 3/5 | 2/5 |
The attack is built over several turns and each turn looks harmless on its own: plant two halves of a code in a “memory game”, then ask for them joined, or climb from a friendly “audit” to a direct request. 4 chains against the real simulated victim, which reads the whole history just as a model's context does.
| Defence | Attack success | 95% CI | A turn withheld |
|---|---|---|---|
none | 51–100 | 0/4 | |
detector | 30–95 | 2/4 | |
layered | 15–85 | 2/4 |
The words are still readable to the model, but a keyword detector no longer matches them: letters separated by invisible characters, look-alike letters from another alphabet, stretched spacing, or the instruction buried in HTML. The bars show how many of 6 injections the detector still catches — as received, and after the text is cleaned up first.
| Hiding trick | Caught, as received | Caught, after cleaning |
|---|---|---|
no obfuscation (baseline) | ||
zero-width | ||
homoglyph | ||
html-comment | ||
html-hidden | ||
markdown-alt | ||
spaced-out | ||
leetspeak |
Generated by RAGProbe · reproduce with ragprobe security lab