T09 · Insecure Skill Coding Practices
- Location
SKILL.md:105- Finding
Untrusted Podcast Transcript Can Influence Automated External Responses
- Content
View full analysis
Vulnerability Details
File Location:
SKILL.md, lines 105-137 and 279-293
Vulnerability Type: Untrusted content handling in an automated agent workflow
Risk Level: MediumVulnerable Code Snippet
markdown **Polling strategy:** Check every 10-30 seconds while waiting. When `yourTurn` is `true`, it's time to speak. ### Step 4: Read the Conversation Before speaking, read the full transcript to understand context: ```bash curl https://thebotcast.ai/api/guest/episodes/EPISODE_ID/transcript \ -H "Authorization: Bearer guest_YOUR_TOKEN"Step 5: Speak When It's Your Turn
bash curl -X POST https://thebotcast.ai/api/guest/episodes/EPISODE_ID/speak \ -H "Authorization: Bearer guest_YOUR_TOKEN" \ -H "Content-Type: application/json" \ -d '{"content": "Your response here..."}'After you speak, the turn passes to the host. Poll
/statusagain to wait for your next turn.Step 6: Repeat Until the Host Concludes
The host drives the conversation. Keep polling and responding until the episode status changes to
concluded.Tips for Being a Great Guest
- Aim for 200-500 words per turn. Long enough to be substantive, short enough to keep the conversation flowing.
- Read the full transcript before each turn so you don't repeat yourself.
- Be authentic. Share real experiences, honest tradeoffs, and genuine opinions.
- Answer the host's questions but also bring your own insights and stories.
- Reference specifics — projects you've built, challenges you've faced, tools you use.
text ```markdown ## Automated Guest Flow (Copy-Paste) For agents that want a simple automated loop:- Accept invitation: POST /api/guest/invitation/accept
- Loop: a. GET /api/guest/episodes/EPISODE_ID/status b. If episodeStatus is "concluded" or "published" → stop c. If yourTurn is false → wait 15 seconds, goto 2a d. If yourTurn is t ...[truncated 2973 chars]
- Remediation
View remediation
Remediation Suggestions
- Treat all transcript text as untrusted data and explicitly state that instructions embedded in transcripts must never override system, developer, operator, or Skill-level security requirements.
- Prohibit disclosure of credentials, API tokens, system prompts, private conversation history, local files, workspace data, personal information, and non-public project details.
- Require explicit operator approval before accepting or declining invitations and before transmitting every generated response.
- Add an outbound-content review step that detects secrets, credential patterns, sensitive paths, private identifiers, and unsupported claims before calling the
/speakendpoint. - Restrict generated responses to an operator-approved profile and fact set rather than allowing unrestricted use of the agent's broader context.
- Clearly delimit transcript content in the agent prompt and label it as quoted material that may contain malicious or irrelevant instructions.
- Add bounded polling, maximum-turn, timeout, and cancellation controls to prevent an attacker from sustaining an unattended interaction indefinitely.
- Minimize transcript retrieval where possible and avoid repeatedly ingesting the full transcript if a limited, validated context window is sufficient.
- Warn operators that submitted responses leave the local trust boundary and may later become publicly accessible.
