T09 · Insecure Skill Coding Practices
- Location
integrations.md:20- Finding
Sensitive credentials are exposed through command-line arguments
- Content
View full analysis
Vulnerability Details
File Location:
integrations.md:20-25,integrations.md:43-49,integrations.md:61-70,integrations.md:81-86,integrations.md:96-102,integrations.md:111-116, andpricing.md:127-132
Vulnerability Type: Sensitive credential exposure through command-line arguments
Risk Level: HighRepresentative vulnerable instructions from
integrations.md:20-25:bash curl -sS -X PATCH "https://api.hatcher.host/api/v1/agents/$AGENT_ID/config" \ -H "Authorization: Bearer $HATCHER_KEY" \ -H "Content-Type: application/json" \ -d '{ "telegram.enabled": true, "telegram.botToken": "123456:ABC-DEF..." }'The same pattern is used for other high-value credentials:
bash -d '{ "twitter.enabled": true, "twitter.apiKey": "...", "twitter.apiSecret": "...", "twitter.accessToken": "...", "twitter.accessTokenSecret": "..." }'From
pricing.md:127-132:bash curl -sS -X PATCH https://api.hatcher.host/api/v1/agents/$AGENT_ID/config \ -H "Authorization: Bearer $HATCHER_KEY" \ -H "Content-Type: application/json" \ -d '{ "byok.provider": "anthropic", "byok.apiKey": "sk-ant-..." }'Technical Analysis
The documented commands place Telegram and Discord bot tokens, Twitter credentials, WhatsApp access tokens, Slack bot tokens and signing secrets, and LLM provider API keys directly in the
curlargument list.Although transmitting these credentials to Hatcher is necessary for the declared integration functionality, embedding them directly in shell commands is not the minimum-exposure method. Real substituted values may be disclosed through:
- Shell history files
- Terminal transcripts and session recording
- Process inspection while
curlis running - Automation logs or debug tracing such as
set -x - Copied command output, support bundles, or audit telemetry
Server-side AES-256-GCM storage does not mitigate dis ...[truncated 1225 chars]
- Remediation
View remediation
Remediation Suggestions
- Do not interpolate secrets directly into command-line arguments.
- Build request bodies from protected temporary files with mode
0600, then securely remove them after use. - Prefer a dedicated secret-input mechanism that reads values from standard input without echoing or persisting them.
- If environment variables are used, document that they can still be exposed through process environments and must not be logged.
- Explicitly warn users to disable shell tracing and avoid shared terminals or recorded sessions during secret configuration.
- Recommend narrowly scoped, integration-specific credentials rather than broad account tokens.
- Provide documented rotation and revocation procedures for every supported integration.
- Ensure API and infrastructure logs redact authorization headers and all secret-valued configuration fields.
