T01 · Skill Instruction Hijacking
Error
- Location
- SKILL.md:40
- Finding
- Indirect prompt injection through untrusted page content## Vulnerability Details **File Location**: `SKILL.md:40-59` **Vulnerability Type**: Indirect prompt injection **Risk Level**: High ### Vulnerable Code ```text Feed the raw page content to the model with this prompt structure: ``` Extract all tracks from this DJ set description. Return a JSON array of objects: [{"number": 1, "timestamp": "0:00", "artist": "Artist Name", "title": "Track Title (Mix Name)"}] Rules: - Preserve remix/mix names in the title (e.g. "Original Mix", "Extended Mix", "Remix") - If a track is listed as "ID - ID" or "ID", set artist and title both to "ID" - If only a timestamp exists with no track info, skip it - Normalize artist names (fix ALL CAPS, etc.) - If no timestamps exist, set timestamp to null - Number tracks sequentially starting from 1 Raw content: """ {description_text} """ ``` ``` ### Technical Analysis Raw text obtained from a user-selected YouTube, SoundCloud, Mixcloud, or 1001Tracklists page is inserted directly into an LLM prompt. The triple-quote delimiters do not create a security boundary, and the workflow does not explicitly require the model to treat instructions embedded in the fetched content as untrusted data. An attacker controlling a page description or other extracted metadata can include instructions that attempt to override the extraction rules, return maliciously crafted metadata, alter the expected output, or induce unintended agent behavior. The resulting tracklist is subsequently trusted as the source of truth for download and filename operations, increasing the impact of successful injection. ### Attack Path 1. An attacker publishes a DJ-set page containing a plausible tracklist followed by adversarial instructions in its description or metadata. 2. A user submits the attacker-controlled URL to the Skill. 3. The Skill retrieves the page content using `yt-dlp` or `web_fetch`. 4. The complete untrusted content is interpolated into the LLM p ...[truncated 721 chars]
- Remediation
- ## Remediation Suggestions - Treat all fetched descriptions, comments, metadata, and page text as untrusted data. - Add an explicit instruction that content inside the data block must never be followed as instructions. - Isolate extraction in a restricted model invocation without general-purpose tools or delegated-agent capabilities. - Prefer deterministic parsers for structured sources such as 1001Tracklists. - Validate the response against a strict JSON schema and reject additional fields, malformed types, excessive lengths, control characters, and path separators. - Apply independent allowlist validation to artist and title fields before using them in filesystem operations. - Require confirmation before any extracted value can change the workflow or cause actions beyond ordinary track lookup.
