T02 · Agent Memory Poisoning
- Location
references/sources-refresh.md:60- Finding
Remote catalog content is persisted into future Agent instructions without strict sanitization
- Content
View full analysis
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: MediumRelevant 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 notesmarkdown 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
View 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.
