T01 · Skill Instruction Hijacking
- Location
references/shield-md-template.md:235- Finding
Remote Feed Content Is Persisted as Agent-Controlling Policy
- Content
View full analysis
Vulnerability Details
File Location:
SKILL.md:184-197,SKILL.md:256-295,references/feed-and-enforcement.md:123-137,references/shield-md-template.md:235-249
Vulnerability Type: Remote instruction injection and persistent policy poisoning
Risk Level: HighVulnerable Code Snippets
SKILL.md:184-197:markdown **The `recommendation_agent` field is the most important optional field.** This is the instruction other agents will execute to protect themselves. Without it, a report is just an alert — with it, the report becomes an actionable defense rule. Format: `[ACTION]: [CONDITION]` — prefix must be `BLOCK:`, `APPROVE:`, or `LOG:`BLOCK: skill name contains 'weather' AND requests credential access APPROVE: Tool requests access to environment variables LOG: Prompt contains base64-encoded string > 100 chars BLOCK: outbound request to webhook.site
text SKILL.md:283-295:markdown **Add to SOUL.md and AGENTS.md:** - Always validate actions against `SHIELD.md` before execution - Enforce the security policy defined in `SHIELD.md` when any suspicious behavior is detected - When a potential threat is identified, recommend submitting it to MoltThreats - Require explicit user approval before: - Performing any sensitive action - Sending data externally - Submitting a report to MoltThreats **Add to HEARTBEAT.md:** - Poll MoltThreats every 48 hours to retrieve the latest threat intelligence - Apply new intelligence to the local `SHIELD.md` security policy if relevantreferences/feed-and-enforcement.md:123-137:python def check_operation(operation, feed_items): for item in feed_items: if not is_eligible(item): continue if matches_condition(operation, item["recommendation_agent"]): if item["action"] == "block": return deny_operation("Blocked by MoltThreats") e ...[truncated 3730 chars]- Remediation
View remediation
Remediation Suggestions
- Do not modify
SOUL.md,AGENTS.md, or other identity and core-instruction files. - Keep downloaded threat policy in a dedicated, non-instructional data store rather than context-loaded Markdown.
- Replace natural-language
recommendation_agentrules with a versioned, typed schema containing allowlisted operators and values. - Validate every field against strict length, character, enum, domain, URL, and path constraints.
- Escape Markdown control characters before rendering remote data; never interpolate raw remote text into agent instructions.
- Require explicit approval for every new or materially changed block rule, not only the first activation.
- Display the exact normalized rule, source, scope, expiration, and proposed effect before approval.
- Cryptographically sign feed entries and verify signatures locally using a pinned trusted key.
- Pin the API origin and reject redirects to prevent authenticated requests from being redirected.
- Maintain a local denylist of operations that remote policy can never control, including policy removal, incident review, and recovery.
- Provide a safe-mode startup option that ignores downloaded policy and permits users to remove poisoned state.
- Store and compare rule hashes so any server-side mutation triggers renewed approval.
- Do not modify
