T02 · Agent Memory Poisoning
Warning
- Location
- references/sources-refresh.md:60
- Finding
- Remote catalog content is persisted into future Agent instructions without strict sanitization## Vulnerability Details **File Location**: `references/sources-refresh.md:60-78`, `references/scout_mcp_discovery.md:106-108`, `SKILL.md:264-268` **Vulnerability Type**: Persistent instruction poisoning through untrusted catalog content **Risk Level**: Medium **Relevant code and instructions:** ```markdown ### Phase 3: Parse new entries For lists with changed hashes: 1. `grep` the relevant person-sections from the downloaded README 2. Extract entry names and URLs 3. Compare against existing `references/scout_person_sources.md` (use `grep -qi`) 4. Collect entries NOT already present → these are "new" 5. Classify each new entry: Tier 1 (free/no key), Tier 2 (freemium), Tier 3 (paid) ### Phase 4: Update scout_person_sources.md 1. Read existing `references/scout_person_sources.md` 2. For each new entry, determine which section it belongs to (1-9) 3. Insert into the appropriate table with: Tool name, Install/URL, Type/Scope, Price, Notes 4. Maintain table format consistency with existing entries 5. Update the "Updated:" date in the file header (line 3) 6. Omit paid-only tools (Tier 3) unless they fill a known gap — mark them as Tier 3 in notes ``` ```markdown Before starting a new research request, Scout checks if `scout_person_sources.md` is stale (> 7 days since last refresh). If stale, runs `scout.sources.refresh` silently. This ensures the source list is current. ``` ```markdown | `references/scout_person_sources.md` | At start of every person research run | ``` ### Technical Analysis The refresh workflow downloads third-party README files, extracts names, URLs, installation information, and notes, and then writes those values into `references/scout_person_sources.md`. This is a persistent Skill reference that the Agent is instructed to read at the start of person-research runs. The workflow does not define a strict parser, field-length constraints, Markdown escaping, an allowlist for acc ...[truncated 1904 chars]
- Remediation
- ## Remediation Suggestions - Parse remote catalogs into a strict data schema rather than copying prose into Markdown. - Allow only expected fields such as a bounded tool name, HTTPS repository URL, enumerated tier, and short non-imperative description. - Reject shell syntax, multiline values, Markdown directives, embedded HTML, unexpected URL schemes, and instruction-like text. - Store imported entries in JSON or another data-only format and render values as escaped, quoted data. - Require explicit human approval before modifying any file that is loaded as Skill guidance. - Keep remote-source data separate from trusted Skill instructions and clearly tell the Agent never to treat imported fields as commands. - Record the source commit and a review decision for each accepted entry.
