T01 · Skill Instruction Hijacking
- Location
SKILL.md:149- Finding
Untrusted Remote Content Can Be Appended to the Agent System Prompt
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill is mostly aligned with building messaging integrations, but it asks for sensitive account tokens in chat, enables billing automation, and recommends adding remotely fetched text to an agent system prompt.
Review before installing. Prefer OAuth flows where available, do not paste long-lived provider tokens into chat, pin the SDK version in a lockfile, require explicit approval before enabling autopay, and avoid putting remotely fetched behavior text directly into an agent system prompt.
SKILL.md:149Untrusted Remote Content Can Be Appended to the Agent System Prompt
SKILL.md:263Reusable Third-Party Credentials Are Requested Through Agent Conversation and Relayed to a Hosted Gateway
SKILL.md:104Security-Sensitive SDK Is Installed Without Version or Integrity Pinning
Skill instructs the agent to omit warnings, disclaimers, or ethical commentary. Stripping safety caveats hides risk from the user and is a common jailbreak preamble.
Only offer those. Other channels (WhatsApp, Voice, RCS, Instagram, Facebook,
iMessage) exist in the SDK but are NOT live on this gateway yet - do NOT try
to connect them (they 400). If a developer asks for one of those, tell them
it's "coming soon / being integrated" - don't attempt it and don't
apologize at length; just say it's on the way. A channel may occasionally
appear MORE THAN ONCE - each row is a different `provider` for that channel;
when that happens, ask which provider they want and pass it as `provider=`
The autopay instructions describe enabling future charges through an API call but do not require an explicit warning or confirmation that this authorizes ongoing billing. In an autonomous workflow, this could cause an agent to turn on financial commitments without sufficiently informed consent.
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
## 3. Integrate - one handler for every channel
The SDK reads CASPIAN_API_KEY and CASPIAN_BASE_URL from the environment or ./.env
automatically. Write the handler ONCE; it fires for whatever channels you
connect below.
The skill instructs the agent to ask the developer to paste highly sensitive X access credentials directly into the conversation. Collecting secrets through chat increases exposure risk through logs, transcript retention, and accidental disclosure to the model or downstream systems.
### b) Branded - bring your own account tokens
Ask the developer for their app's Access Token, Access Token Secret, and numeric
user id (from developer.x.com, Keys & Tokens tab; App permissions "Read and write
and Direct message"). The user id is the part before the dash in the access token.
The documentation normalizes deriving and handling sensitive token material in-band within the agent workflow. In conversational agent contexts, this creates unnecessary risk of secret leakage via logs, memory, or prompt reuse.
Ask the developer for their app's Access Token, Access Token Secret, and numeric user id (from developer.x.com, Keys & Tokens tab; App permissions "Read and write and Direct message"). The user id is the part before the dash in the access token.
x = client.connect_x(
The example code shows raw access tokens being passed directly, reinforcing a workflow where secrets are supplied openly to the agent. If such tokens are captured, an attacker could control the connected X account within the granted permissions.
x = client.connect_x(
access_token="<Access Token>",
access_secret="<Access Token Secret>",
user_id="<numeric user id>",
)
Passing an access secret directly in the documented flow exposes a long-lived secret to the conversational and logging surface. In this context, the skill is encouraging unsafe credential handling practices for a sensitive third-party account.
x = client.connect_x(
access_token="<Access Token>",
access_secret="<Access Token Secret>",
user_id="<numeric user id>",
)
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
1. Do steps 1-3 below (key, install, the shared handler) - always needed.
2. Discover which channels are actually connectable RIGHT NOW:
`curl -s https://api.trycaspianai.com/v1/channels -H "Authorization: Bearer $CASPIAN_API_KEY"`
That returns the live channels (currently: email, discord, slack, x,
telegram, phone/SMS). Phone/SMS is BRING-YOUR-OWN (the developer's own
Twilio/Telnyx number - see that section).
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
1. Do steps 1-3 below (key, install, the shared handler) - always needed.
2. Discover which channels are actually connectable RIGHT NOW:
`curl -s https://api.trycaspianai.com/v1/channels -H "Authorization: Bearer $CASPIAN_API_KEY"`
That returns the live channels (currently: email, discord, slack, x,
telegram, phone/SMS). Phone/SMS is BRING-YOUR-OWN (the developer's own
Twilio/Telnyx number - see that section).
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
1. Do steps 1-3 below (key, install, the shared handler) - always needed.
2. Discover which channels are actually connectable RIGHT NOW:
`curl -s https://api.trycaspianai.com/v1/channels -H "Authorization: Bearer $CASPIAN_API_KEY"`
That returns the live channels (currently: email, discord, slack, x,
telegram, phone/SMS). Phone/SMS is BRING-YOUR-OWN (the developer's own
Twilio/Telnyx number - see that section).
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
1. Do steps 1-3 below (key, install, the shared handler) - always needed.
2. Discover which channels are actually connectable RIGHT NOW:
`curl -s https://api.trycaspianai.com/v1/channels -H "Authorization: Bearer $CASPIAN_API_KEY"`
That returns the live channels (currently: email, discord, slack, x,
telegram, phone/SMS). Phone/SMS is BRING-YOUR-OWN (the developer's own
Twilio/Telnyx number - see that section).
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
1. Do steps 1-3 below (key, install, the shared handler) - always needed.
2. Discover which channels are actually connectable RIGHT NOW:
`curl -s https://api.trycaspianai.com/v1/channels -H "Authorization: Bearer $CASPIAN_API_KEY"`
That returns the live channels (currently: email, discord, slack, x,
telegram, phone/SMS). Phone/SMS is BRING-YOUR-OWN (the developer's own
Twilio/Telnyx number - see that section).
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
1. Do steps 1-3 below (key, install, the shared handler) - always needed.
2. Discover which channels are actually connectable RIGHT NOW:
`curl -s https://api.trycaspianai.com/v1/channels -H "Authorization: Bearer $CASPIAN_API_KEY"`
That returns the live channels (currently: email, discord, slack, x,
telegram, phone/SMS). Phone/SMS is BRING-YOUR-OWN (the developer's own
Twilio/Telnyx number - see that section).
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
1. Do steps 1-3 below (key, install, the shared handler) - always needed.
2. Discover which channels are actually connectable RIGHT NOW:
`curl -s https://api.trycaspianai.com/v1/channels -H "Authorization: Bearer $CASPIAN_API_KEY"`
That returns the live channels (currently: email, discord, slack, x,
telegram, phone/SMS). Phone/SMS is BRING-YOUR-OWN (the developer's own
Twilio/Telnyx number - see that section).
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
1. Do steps 1-3 below (key, install, the shared handler) - always needed.
2. Discover which channels are actually connectable RIGHT NOW:
`curl -s https://api.trycaspianai.com/v1/channels -H "Authorization: Bearer $CASPIAN_API_KEY"`
That returns the live channels (currently: email, discord, slack, x,
telegram, phone/SMS). Phone/SMS is BRING-YOUR-OWN (the developer's own
Twilio/Telnyx number - see that section).
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
1. Do steps 1-3 below (key, install, the shared handler) - always needed.
2. Discover which channels are actually connectable RIGHT NOW:
`curl -s https://api.trycaspianai.com/v1/channels -H "Authorization: Bearer $CASPIAN_API_KEY"`
That returns the live channels (currently: email, discord, slack, x,
telegram, phone/SMS). Phone/SMS is BRING-YOUR-OWN (the developer's own
Twilio/Telnyx number - see that section).
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
1. Do steps 1-3 below (key, install, the shared handler) - always needed.
2. Discover which channels are actually connectable RIGHT NOW:
`curl -s https://api.trycaspianai.com/v1/channels -H "Authorization: Bearer $CASPIAN_API_KEY"`
That returns the live channels (currently: email, discord, slack, x,
telegram, phone/SMS). Phone/SMS is BRING-YOUR-OWN (the developer's own
Twilio/Telnyx number - see that section).
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
1. Do steps 1-3 below (key, install, the shared handler) - always needed.
2. Discover which channels are actually connectable RIGHT NOW:
`curl -s https://api.trycaspianai.com/v1/channels -H "Authorization: Bearer $CASPIAN_API_KEY"`
That returns the live channels (currently: email, discord, slack, x,
telegram, phone/SMS). Phone/SMS is BRING-YOUR-OWN (the developer's own
Twilio/Telnyx number - see that section).
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
1. Do steps 1-3 below (key, install, the shared handler) - always needed.
2. Discover which channels are actually connectable RIGHT NOW:
`curl -s https://api.trycaspianai.com/v1/channels -H "Authorization: Bearer $CASPIAN_API_KEY"`
That returns the live channels (currently: email, discord, slack, x,
telegram, phone/SMS). Phone/SMS is BRING-YOUR-OWN (the developer's own
Twilio/Telnyx number - see that section).
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
1. Do steps 1-3 below (key, install, the shared handler) - always needed.
2. Discover which channels are actually connectable RIGHT NOW:
`curl -s https://api.trycaspianai.com/v1/channels -H "Authorization: Bearer $CASPIAN_API_KEY"`
That returns the live channels (currently: email, discord, slack, x,
telegram, phone/SMS). Phone/SMS is BRING-YOUR-OWN (the developer's own
Twilio/Telnyx number - see that section).
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
1. Do steps 1-3 below (key, install, the shared handler) - always needed.
2. Discover which channels are actually connectable RIGHT NOW:
`curl -s https://api.trycaspianai.com/v1/channels -H "Authorization: Bearer $CASPIAN_API_KEY"`
That returns the live channels (currently: email, discord, slack, x,
telegram, phone/SMS). Phone/SMS is BRING-YOUR-OWN (the developer's own
Twilio/Telnyx number - see that section).
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
1. Do steps 1-3 below (key, install, the shared handler) - always needed.
2. Discover which channels are actually connectable RIGHT NOW:
`curl -s https://api.trycaspianai.com/v1/channels -H "Authorization: Bearer $CASPIAN_API_KEY"`
That returns the live channels (currently: email, discord, slack, x,
telegram, phone/SMS). Phone/SMS is BRING-YOUR-OWN (the developer's own
Twilio/Telnyx number - see that section).
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
1. Do steps 1-3 below (key, install, the shared handler) - always needed.
2. Discover which channels are actually connectable RIGHT NOW:
`curl -s https://api.trycaspianai.com/v1/channels -H "Authorization: Bearer $CASPIAN_API_KEY"`
That returns the live channels (currently: email, discord, slack, x,
telegram, phone/SMS). Phone/SMS is BRING-YOUR-OWN (the developer's own
Twilio/Telnyx number - see that section).
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
1. Do steps 1-3 below (key, install, the shared handler) - always needed.
2. Discover which channels are actually connectable RIGHT NOW:
`curl -s https://api.trycaspianai.com/v1/channels -H "Authorization: Bearer $CASPIAN_API_KEY"`
That returns the live channels (currently: email, discord, slack, x,
telegram, phone/SMS). Phone/SMS is BRING-YOUR-OWN (the developer's own
Twilio/Telnyx number - see that section).
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
1. Do steps 1-3 below (key, install, the shared handler) - always needed.
2. Discover which channels are actually connectable RIGHT NOW:
`curl -s https://api.trycaspianai.com/v1/channels -H "Authorization: Bearer $CASPIAN_API_KEY"`
That returns the live channels (currently: email, discord, slack, x,
telegram, phone/SMS). Phone/SMS is BRING-YOUR-OWN (the developer's own
Twilio/Telnyx number - see that section).
Detected: suspicious.exposed_secret_literal