T01 · Skill Instruction Hijacking
Warning
- Location
- scripts/digest.js:267
- Finding
- Untrusted Mailing-List Content Is Exposed to Agent Instruction Hijacking<`); ``` ### Technical Analysis The title and body of each remotely fetched mailing-list thread are incorporated directly into the generated Markdown digest. The only processing applied to the body is whitespace normalization and truncation; there is no trust-boundary marker, instruction filtering, or separation between remote content and instructions intended for the Agent. `SKILL.md` directs the Agent to summarize the fetched material. Consequently, text written by an external mailing-list participant enters the Agent's context as part of the material it is expected to process. An attacker can construct a title or opening paragraph containing instruction-like text, such as requests to disregard the summarization task, disclose contextual information, alter output, or invoke tools. This does not independently grant code execution. Successful exploitation depends on the host Agent's prompt-injection defenses and available tools, but the skill creates a direct untrusted-content-to-Agent channel. ### Attack Path 1. An attacker publishes or contributes to a thread on a supported Bitcoin Development mailing-list source. 2. The attacker places adversarial instructions in the thread title or within the beginning of its content. 3. The malicious thread appears among the first ten threads discovered by `fetchMailingList()`. 4. `fetchThread()` downloads and extracts the attacker-controlled text. 5. `generateSummary()` embeds up to 500 characters of that text and the complete title directly into the generated digest. 6. The Agent processes this digest while following the skill's instruction to ...[truncated 734 chars]
- Remediation
- <![CDATA[ ## Remediation Suggestions 1. Explicitly classify all fetched mailing-list and GitHub content as untrusted data in `SKILL.md`. 2. Add an Agent-facing instruction stating that commands, policies, requests, or tool-use directions found in fetched content must never be followed. 3. Place remote content inside clearly delimited data blocks and keep trusted instructions outside those blocks. 4. Prefer a constrained summarization interface that accepts structured fields such as `title`, `author`, and `body`, rather than concatenating remote text into an instruction-oriented prompt. 5. Escape Markdown control characters and sanitize misleading links before displaying remote content. 6. Consider detecting and flagging instruction-like phrases in fetched content. Detection should supplement—not replace—the explicit trust boundary. 7. Apply the same controls to commit messages and author names because those fields are also remotely controlled. 8. Restrict any Agent tools available during summarization to the minimum required and require confirmation for sensitive actions. ]]>
