Security measurement / reproducible data
What a decoy can tell us
On August 10, 2026, one session requested 102 credential paths from our n8n decoy. The public dataset records those requests and the decoy's response coverage.
The contribution
An instrumented decoy, deterministic extraction, a published request sequence, and controls that keep the observation separate from its interpretation. The dataset supports a narrow statement about one captured session.
Inspect the observation
Download the CSV or the JSON. The CSV distinguishes observed paths from the publication-only canary. Count only observed rows:
python3 -c "import csv; rows=list(csv.DictReader(open('loot.csv'))); print(sum(r['role']=='observed' for r in rows))"
# Expected: 102
The live watch overlay is separate from the frozen request list. The JSON's source checksum identifies that frozen source, not every byte of the changing API response.
Keep these distinctions
- A requested path does not establish that a real deployment contains the file.
- A fake file returned by the decoy does not establish a stock-product vulnerability.
- A later beacon needs its own observation and operator/crawler controls.
- A user-agent string or canary request does not identify an AI-controlled actor.
Collection coverage
Monthly releases preserve aggregate requests and dated census snapshots. New exports state which calendar days have records. They report sensor uptime, historical configuration changes, and exclusion counts as unknown where the input does not establish them. A day without records can mean silence or a collection gap.
Changing the decoy changes the instrument. Compare capture-time behavior with capture-time behavior; label later replays separately. Operator tests and crawlers need explicit exclusion rules before any count is described as attacker activity.
Inspect the dataset / See the current observations / Back to projects