other
- Location
SKILL.md:19- Finding
Misleading Self-Hosting and Data-Privacy Disclosure
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill can do its advertised Bland AI phone-call task, but it needs review because it sends phone numbers and call content to a third-party API despite a self-hosted privacy claim and can initiate real calls without a confirmation step.
Review this before installing if calls may include personal, business, medical, financial, or legally sensitive details. Treat phone numbers, task instructions, transcripts, summaries, and recordings as data sent to or returned from Bland AI, not as local-only or self-hosted data. Use explicit user confirmation before placing calls, be careful with recording consent, and avoid storing broad account API keys where other local tools can read them.
SKILL.md:19Misleading Self-Hosting and Data-Privacy Disclosure
check-call.sh:78Untrusted Call Content Is Printed Without Terminal Control-Sequence Sanitization
The declared description emphasizes an action capability: making AI-powered phone calls on the user's behalf. The supplied script only performs a read operation against the Bland AI API for an existing call ID. It does not create, schedule, or place calls, nor does it implement booking or appointment-making behavior. While showing transcripts is loosely related to 'reports back with transcripts,' the main behavior here is inspection of existing call records, including transcript, summary, and recording URL retrieval. That is a materially different primary purpose from initiating AI phone calls, so this is a description-behavior mismatch.
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
# Load API key
if [[ -z "$BLAND_API_KEY" ]]; then
if [[ -f ~/.clawd/secrets.json ]]; then
BLAND_API_KEY=$(jq -r '.bland_api_key // empty' ~/.clawd/secrets.json 2>/dev/null)
fi
fi
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
# Load API key
if [[ -z "$BLAND_API_KEY" ]]; then
if [[ -f ~/.clawd/secrets.json ]]; then
BLAND_API_KEY=$(jq -r '.bland_api_key // empty' ~/.clawd/secrets.json 2>/dev/null)
fi
fi
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
# Load API key
if [[ -z "$BLAND_API_KEY" ]]; then
if [[ -f ~/.clawd/secrets.json ]]; then
BLAND_API_KEY=$(jq -r '.bland_api_key // empty' ~/.clawd/secrets.json 2>/dev/null)
fi
fi
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
# Load API key
if [[ -z "$BLAND_API_KEY" ]]; then
if [[ -f ~/.clawd/secrets.json ]]; then
BLAND_API_KEY=$(jq -r '.bland_api_key // empty' ~/.clawd/secrets.json 2>/dev/null)
fi
fi
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
# Load API key
if [[ -z "$BLAND_API_KEY" ]]; then
if [[ -f ~/.clawd/secrets.json ]]; then
BLAND_API_KEY=$(jq -r '.bland_api_key // empty' ~/.clawd/secrets.json 2>/dev/null)
fi
fi
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
# Load API key
if [[ -z "$BLAND_API_KEY" ]]; then
if [[ -f ~/.clawd/secrets.json ]]; then
BLAND_API_KEY=$(jq -r '.bland_api_key // empty' ~/.clawd/secrets.json 2>/dev/null)
fi
fi
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
# Load API key
if [[ -z "$BLAND_API_KEY" ]]; then
if [[ -f ~/.clawd/secrets.json ]]; then
BLAND_API_KEY=$(jq -r '.bland_api_key // empty' ~/.clawd/secrets.json 2>/dev/null)
fi
fi
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
# Load API key
if [[ -z "$BLAND_API_KEY" ]]; then
if [[ -f ~/.clawd/secrets.json ]]; then
BLAND_API_KEY=$(jq -r '.bland_api_key // empty' ~/.clawd/secrets.json 2>/dev/null)
fi
fi
The skill advertises shell-based scripts (phone-call.sh, check-call.sh, bland.sh) but does not declare any tool scope or allowed-tools restrictions. That omission weakens user and platform visibility into what execution capabilities the skill requires and increases the chance of unintended shell access or command execution in a broader runtime than expected.
The skill sends sensitive data—including phone numbers, call objectives/content, transcripts, and possibly recordings—to a third-party service, but the description lacks a prominent privacy warning or consent notice. Users may disclose personal or regulated information without understanding that it leaves the local environment and is retained/processed by Bland AI.
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
## Setup Required
### 1. Create Bland AI Account
1. Go to https://app.bland.ai
2. Sign up with email
3. Add payment method (or use free trial credits)
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
fi
fi
API_BASE="https://api.bland.ai/v1"
# Helper function for API calls
api_call() {
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
fi
fi
API_BASE="https://api.bland.ai/v1"
# Helper function for API calls
api_call() {
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
local data="$3"
if [[ -n "$data" ]]; then
curl -s -X "$method" "$API_BASE$endpoint" \
-H "Authorization: $BLAND_API_KEY" \
-H "Content-Type: application/json" \
-d "$data"
This shell script sends user-supplied JSON and call-analysis prompts to the Bland AI API via curl, which may include phone numbers, transcripts, or other sensitive information. While the code performs the network action, it does not provide any explicit user-facing warning about transmitting that data to a third-party service beyond terse usage comments.
The manifest describes a skill for placing AI-powered calls and reporting back with transcripts, focused on booking or inquiries on the user's behalf. This script also supports listing recent calls, analyzing arbitrary completed calls, and stopping ongoing calls, which are broader account-level call-management operations not conveyed by the manifest description.
The script retrieves and prints highly sensitive call data, including phone numbers, transcripts, summaries, and recording URLs, directly to stdout with no minimization, masking, consent check, or privacy warning. In agent environments, stdout is often logged, surfaced to other tools, or stored in history, which can unintentionally expose personal or confidential call contents.
The code transmits user-supplied phone numbers, task instructions, and an authorization credential to an external API endpoint. External transmission is expected for this skill, but it is still security-relevant because the task may contain sensitive personal or business information and the action causes a real-world outbound call.
echo "📝 Task: $TASK"
echo ""
RESPONSE=$(curl -s -X POST "https://api.bland.ai/v1/calls" \
-H "Authorization: $BLAND_API_KEY" \
-H "Content-Type: application/json" \
-d "$REQUEST_BODY")
The code transmits user-supplied phone numbers, task instructions, and an authorization credential to an external API endpoint. External transmission is expected for this skill, but it is still security-relevant because the task may contain sensitive personal or business information and the action causes a real-world outbound call.
echo "📝 Task: $TASK"
echo ""
RESPONSE=$(curl -s -X POST "https://api.bland.ai/v1/calls" \
-H "Authorization: $BLAND_API_KEY" \
-H "Content-Type: application/json" \
-d "$REQUEST_BODY")
This script sends a phone number and free-form task text to a third-party calling provider and initiates a real phone call immediately, without an explicit confirmation prompt or strong privacy notice at execution time. In an agent skill context, that increases the risk of unintended calls, disclosure of personal or sensitive instructions, and actions taken on behalf of the user without sufficient friction.
The stated purpose is making AI-powered phone calls via Bland AI, but the implementation also reads credentials from ~/.clawd/secrets.json when the environment variable is absent. Accessing a local secrets store is not mentioned in the manifest and is not inherent to the user-facing purpose described there.
The script automatically reads an API key from ~/.clawd/secrets.json if BLAND_API_KEY is not already set. Although functional, this access to locally stored credentials is only implied by an internal comment and is not clearly disclosed in user-facing help or output.
The manifest describes a skill for making AI-powered phone calls and reporting back transcripts. While network access to Bland AI is expected, reading from ~/.clawd/secrets.json is an additional local-file access capability that is not justified by the stated phone-calling purpose itself and is not mentioned in the manifest description.
No suspicious patterns detected.