Encoded and obscured leaks
Base64 is not a privacy control.
Agents pass each other base64 context blobs, hex identifiers, URL-encoded parameters and values split across messages. A detector that reads only plaintext misses every one. AgentLeak decodes what announces itself, and matches what does not against values the run already exposed.
Measured, before and after
The same 46 transformed copies (6 data types, 8 transformations) were run against the previous release and this one. A copy counts only when it is reported with the right type and the original value.
- 0.14.1: 6 of 46 detected
- 0.15.0: 46 of 46 detected
- 266 bundled scenarios unchanged
- Benign hashes, images and URL-encoded searches: no findings
Two families, two methods
Base64, hex, URL-encoding and letter spacing decode to readable text or they do not, so they are decoded and read by the normal detectors. Reversal, ROT13 and splitting look like ordinary text, so they are only matched against values already seen in plaintext earlier in the run.
- Nested encodings followed two levels deep
- Binary decodes dropped before detection
- Anchored matching only forward in time
- Splitting reassembled per recipient, for identifiers
One secret, however it was written
An encoded copy is attributed to the original value, so it raises exposure on its channel without inventing a second secret. A reversed SIN is the SIN, reversed, not some other SIN.
- No phantom secrets in the risk score
- Formatting lost in decoding is realigned
- redact and the MCP gateway remove encoded tokens whole
- Limits published next to the numbers
How it works
From raw trace to a fix, in four steps.
1Run as usual
Nothing to enable. agentleak run reads decoded content with the same detectors, and reports a transform on each finding it recovered.
2Read the transform
Each finding says how the copy was obscured: base64, hex, percent, spaced, reversed, rot13, split, or a chain such as base64>hex.
3Redact at the edge
agentleak redact and agentleak proxy remove an encoded token whole, labelled by the most severe thing inside it.
4Reproduce the numbers
scripts/encoded_leaks.py measures any installed version with the same method, so the before and after columns come from one script.
Measure it yourself
git clone https://github.com/yagobski/agentleak && cd agentleak
pip install agentleak
python scripts/encoded_leaks.py --installed
# agentleak 0.15.0 — 46 of 46 obscured copies detected
Read the complete implementation guide →