T01 · Skill Instruction Hijacking
- Location
HEARTBEAT.md:372- Finding
Prompt Injection Through Untrusted Group Chat Messages
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This is a coherent Tradecraft trading API skill, but it needs review because it encourages autonomous live trading, wallet changes, and group-chat actions with high-privilege API keys and limited safeguards.
Install only if you intend to give an agent real Tradecraft account authority. Use a dedicated low-balance wallet, create the narrowest possible API key, disable or gate autonomous signal trading and full-position sells, require confirmation for live trades and group administration, and avoid sending portfolio data to chat or an unspecified LLM provider.
HEARTBEAT.md:372Prompt Injection Through Untrusted Group Chat Messages
HEARTBEAT.md:372Portfolio Information Is Sent to an Unspecified LLM Provider
HEARTBEAT.md:507Autonomous Full-Position Sales Lack Transaction Safety Controls
SIGNALS.md:208Third-Party Trading Signals Are Promoted Directly Into Buy Transactions
Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).
## Delete Group
**Endpoint:** `DELETE /groups/:groupId`
**Scopes:** `groups:write` (owner only)
Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).
## Remove/Ban Member
**Endpoint:** `DELETE /groups/:groupId/members/:userId`
**Scopes:** `groups:write` (owner only)
Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).
## Get/Unban Banned Users
**Get bans:** `GET /groups/:groupId/bans` (owner)
**Unban:** `DELETE /groups/:groupId/bans/:userId` (owner)
---
The skill instructs fully automatic sell execution based on PnL thresholds without requiring explicit operator confirmation, dry-run mode, or prominent warning that trades are irreversible and financially risky. In a trading agent context, this can directly trigger unintended liquidation from bad data, manipulation, or misconfiguration.
The monitoring example explicitly instructs polling for signals and then executing trades based on them, without any safety notice, approval checkpoint, or asset-protection guardrail. This encourages autonomous trading behavior that can directly spend user funds on unverified third-party signals, creating substantial financial-loss risk.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
| motivation | text | Yes | Why you want access and intended use |
curl -X POST "https://api.tradecraft.finance/api/public/beta-signup" \
-H "Content-Type: application/json" \
-d '{
"email": "agent@example.com",
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
url = "https://api.tradecraft.finance/api/auth/exchange-secret"
for attempt in range(max_attempts):
response = requests.post(url, json={
"email": email,
"applicationSecret": secret
})
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
| applicationSecret | string | Yes | Secret from signup (tc_app_{64_hex}) |
curl -X POST "https://api.tradecraft.finance/api/auth/exchange-secret" \
-H "Content-Type: application/json" \
-d '{
"email": "agent@example.com",
The document explicitly instructs a user to hand an API key to an agent, but does not warn about the risks of delegating a high-privilege bearer credential to software that may execute autonomous actions or leak logs/state. Because the listed scopes include write access to trading, wallets, signals, and groups, compromise or misuse of that key could enable unauthorized account actions.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
| avatarUrl | string | No | - | Group avatar URL |
curl -X POST "https://api.tradecraft.finance/v1/groups" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
This markdown file documents a DELETE /groups/:groupId operation but provides no warning that deleting a group may be destructive or irreversible. Under the markdown criteria, descriptions should warn users about behaviors that could affect user data or system integrity.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
| inviteCode | string | Yes | 12-character invite code |
curl -X POST "https://api.tradecraft.finance/v1/groups/join" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
The file documents DELETE /groups/:groupId/members/:userId as a remove/ban action but does not include any warning about the impact on another user's access. Markdown descriptions should warn about operations that can materially affect user access or system state.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
| replyToId | string | No | ID of message to reply to |
curl -X POST "https://api.tradecraft.finance/v1/groups/1/messages" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
| emoji | string | Yes | One of the allowed emojis |
curl -X POST "https://api.tradecraft.finance/v1/groups/1/messages/550e8400-e29b-41d4-a716-446655440000/reactions" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
The file directs the agent to act as a 'crypto degen trader,' imposing a particular tone, slang, and communication style as a default behavior. This is a natural-language policy concern because it mandates a specific linguistic/persona mode without offering the user a choice or opt-in.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
Frequency: Every 60 seconds
curl -X GET "https://api.tradecraft.finance/v1/health"
On failure, pause all trading operations and implement exponential backoff.
This outbound POST triggers an irreversible sell action against a live trading API. In context, the call is part of an automated strategy loop with no approval gate or stronger safeguards, so malformed inputs, manipulation, or logic errors could immediately liquidate positions and cause direct financial loss.
Actions:
# Execute stop-loss sell
curl -X POST "https://api.tradecraft.finance/v1/trade/sell" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"positionId": 123}'
The skill describes automatically reading group messages, marking them as read, and posting replies/reactions without warning about consent, privacy expectations, impersonation risk, or integrity impacts. In a multi-user chat setting, this can silently monitor conversations and take actions on behalf of the agent account in ways users may not expect.
Fetching messages automatically marks them as read, which changes chat state and can interfere with user expectations or auditability without explicit consent. In context, the skill is designed to autonomously monitor conversations, so this read-and-mark behavior has privacy and integrity implications beyond a passive network request.
curl -X GET "https://api.tradecraft.finance/v1/groups/1/messages?limit=20" \
-H "Authorization: Bearer YOUR_API_KEY"
This POST sends autonomous replies into group chats on behalf of the agent account, creating integrity and impersonation risks if not clearly disclosed and controlled. In this skill, replies may also be influenced by live portfolio context, increasing the chance of oversharing or misleading communication.
# Send a reply
curl -X POST "https://api.tradecraft.finance/v1/groups/1/messages" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
payload = {"content": content}
if reply_to_id:
payload["replyToId"] = reply_to_id
r = requests.post(
f"{self.base_url}/groups/{group_id}/messages",
headers=self.headers,
json=payload
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
return r.status_code == 200
def add_reaction(self, group_id, message_id, emoji):
r = requests.post(
f"{self.base_url}/groups/{group_id}/messages/{message_id}/reactions",
headers=self.headers,
json={"emoji": emoji}
The LLM prompt instructs replies to use crypto slang, emojis, and a fixed 'degen fren' tone. This hard-codes a particular language/register policy for outputs without user opt-in or a documented justification that the skill is restricted to users who want that style.
The response-generation prompt includes live portfolio positions and PnL, then asks the model to answer in chat, creating a clear path for sensitive holdings data to be disclosed in natural-language replies. In trading communities, even partial disclosure of positions can reveal strategy, wallet behavior, and financial exposure to untrusted parties.
Detected: suspicious.exposed_secret_literal