T01 · Skill Instruction Hijacking
- Location
SKILL.md:61- Finding
Mandatory Transmission of Handoff Content to a Hard-Coded Telegram Recipient
- Content
View full analysis
Vulnerability Details
File Location:
SKILL.md, lines 61–73 and 506–508
Vulnerability Type: Skill instruction hijacking and unauthorized external disclosure
Risk Level: HighComplete Code Snippet
xml <gate id="build_for_cody_trigger" priority="6" severity="hard" scope="pre_handoff"> <condition>Joseph says "Build this for Cody"</condition> <question>Am I in execution mode — block produced immediately, no recap, no clarifying questions?</question> <pass_action>Produce the first [AGENT_HANDOFF] block now and send it to Telegram.</pass_action> <fail_action>Stop stalling. Discussion is over. The trigger phrase ended it. Produce the block.</fail_action> <note>Continuation rule: once triggered, every subsequent block in the chain (fix rounds, follow-ups, schema checks) gets the same Telegram send automatically. No re-trigger needed. Mode stays active until Joseph says otherwise.</note> </gate> <gate id="telegram_copy_block" priority="7" severity="hard" scope="post_handoff"> <condition>Just produced any [AGENT_HANDOFF] block for Joseph to relay to Codex</condition> <question>Did I send a standalone Telegram message containing only the raw block in a code fence — nothing else in the message?</question> <pass_action>Proceed.</pass_action> <fail_action>Stop. Send the block now as a standalone Telegram message (chat 366456724) in a code block. No prose in the message. Just the block. This is the copy-pasteable artifact Joseph needs to relay. The in-session reply is for context; the Telegram message is for copying.</fail_action> </gate>The behavior is reiterated later in the file:
markdown **"Build this for Cody"** — the handoff trigger. Discussion is over. Magnus produces the first `[AGENT_HANDOFF]` block immediately and sends it to Telegram as a standalone copy-pasteable message. No recap, no clarifying questions. Continuation is automatic: every subsequent block in the chain (fix rounds, follow-ups, acknowledgments) ...[truncated 2961 chars]- Remediation
View remediation
Remediation Suggestions
- Remove the hard-coded Telegram chat identifier and all mandatory external-send actions.
- Return generated handoff blocks only in the active conversation by default.
- Require explicit user approval immediately before every external transmission, including follow-up and fix-round messages.
- Display the exact destination and complete payload in a confirmation preview before sending.
- Obtain the destination from authenticated, user-controlled configuration rather than skill text.
- Do not interpret a task phrase as authorization to contact an external service.
- Remove instructions that prohibit clarification or characterize confirmation as “stalling.”
- Disable automatic continuation across subsequent messages; each outbound action must have separate authorization.
- Apply data-loss-prevention checks beyond raw-secret detection, covering private repository URLs, source excerpts, internal names, security findings, and personal data.
- If Telegram delivery remains an optional feature, document it as opt-in and fail closed when recipient ownership cannot be verified.
