Back to skill

Security audit

clicksend

Security checks for vulnerabilities and agentic risk

Overview

The skill is a coherent SkillBoss messaging integration, but it needs Review because it can send billable messages or calls and delete account/contact data without clear confirmation guidance, and it includes unsafe API-key troubleshooting advice.

Install only if you intend to let SkillBoss/Prelude process recipient numbers, message contents, contact records, and related account data. Require manual review before sending, calling, cancelling, or deleting anything; do not print or paste the API key; use least-privilege/test credentials where possible and monitor billing and message activity.

Vulnerability Patterns
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (1)

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:718
Finding

API Key Disclosed Through Troubleshooting Command

Content
View full analysis

Vulnerability Details

File Location: SKILL.md, lines 718–723
Vulnerability Type: API credential exposure through terminal output
Risk Level: Medium

Vulnerable Code:

markdown
1. Check that the `SKILLBOSS_API_KEY` environment variable is set:

```bash
echo $SKILLBOSS_API_KEY
text

### Technical Analysis

The troubleshooting instructions print the complete value of `SKILLBOSS_API_KEY` to standard output. The key is subsequently used as a bearer credential for authenticated requests to the SkillBoss API.

Printing a secret is unnecessary when checking whether an environment variable is configured. Terminal output can be retained in CI/CD logs, Agent tool histories, shell transcripts, screen recordings, or support diagnostics. Anyone who obtains that output may recover the credential without needing access to the original environment.

The authenticated network transmission of this key to `https://api.skillboss.com/v1/run` is consistent with the Skill's declared functionality. The vulnerability is specifically the avoidable disclosure through `echo`, not its intended use in the API authorization header.

### Attack Path

1. A user or Agent follows the documented API-key troubleshooting procedure.
2. `echo $SKILLBOSS_API_KEY` writes the complete bearer credential to standard output.
3. The output is retained in an execution log, conversation history, terminal transcript, recording, or support attachment.
4. An unauthorized person gains access to that retained output and extracts the key.
5. The person submits authenticated requests to the SkillBoss API using the exposed credential.
6. The person can perform operations permitted by the key until it is revoked, rotated, or otherwise invalidated.

### Impact Assessment

Successful exploitation grants the attacker the API privileges assigned to the compromised key; it does not directly provide local system privileges. Depending on account configura
...[truncated 422 chars]
Remediation
View remediation

Remediation Suggestions

Replace the secret-printing command with a non-disclosing presence check:

bash
if [ -n "${SKILLBOSS_API_KEY:-}" ]; then
  echo "SKILLBOSS_API_KEY is set"
else
  echo "SKILLBOSS_API_KEY is not set"
fi

Additional hardening measures:

  1. Explicitly warn users never to print, paste, or record the API key.
  2. Redact bearer tokens from application, CI/CD, Agent, proxy, and debugging logs.
  3. Rotate any key that has appeared in persistent or shared output.
  4. Assign the key only the minimum API permissions required for messaging tasks.
  5. Apply usage limits, monitoring, and alerts for unusual messaging activity or unexpected costs.
  6. Store the key in an approved secret manager rather than plaintext configuration or command history.
  7. Ensure error handling never includes authorization headers or environment-variable values.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Memory PoisoningPersistent Context Injection, Context Window Stuffing, Memory Manipulation
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
Findings (22)

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
80% confidence
Finding

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).

Content

Scanner excerpt · SKILL.md (reported line 272)May include surrounding context.

Delete Template

bash
DELETE /clicksend/v3/sms/templates/{template_id}

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
80% confidence
Finding

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).

Content

Scanner excerpt · SKILL.md (reported line 448)May include surrounding context.

Delete List

bash
DELETE /clicksend/v3/lists/{list_id}

Remove Duplicates

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
80% confidence
Finding

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).

Content

Scanner excerpt · SKILL.md (reported line 548)May include surrounding context.

Delete Contact

bash
DELETE /clicksend/v3/lists/{list_id}/contacts/{contact_id}

Copy Contact to Another List

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
80% confidence
Finding

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).

Content

Scanner excerpt · SKILL.md (reported line 587)May include surrounding context.

Delete Email Address

bash
DELETE /clicksend/v3/email/addresses/{email_address_id}

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The invocation guidance is broad enough to match many ordinary messaging requests without requiring explicit user intent to send sensitive contact data to an external provider. In an agent setting, overly broad routing increases the chance of accidental activation and unauthorized outbound transmission or account actions.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The documentation brands the capability as ClickSend while describing a different API/model interface in examples. This inconsistency can cause operators to approve or invoke the skill under false assumptions about data handling, permissions, and vendor controls.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The skill handles phone numbers, contact records, message bodies, and possibly email addresses, yet it provides no user-facing warning that this information is sent to an external service. Lack of disclosure is dangerous in agent workflows because users may unknowingly expose personal or regulated data to third parties.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The skill is presented as a ClickSend integration, but the runnable examples actually send data to SkillBoss using Prelude models. This mismatch can mislead users and downstream agents about which service receives message content, recipient phone numbers, and templates, creating hidden third-party data flow and trust-boundary confusion.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
95% confidence
Finding

The code snippet explicitly posts to a third-party endpoint, making data exfiltration from the agent environment possible by design. In a messaging skill, this may be intended, but the risk remains because user content, phone numbers, and tokens leave the local trust boundary.

Content

Scanner excerpt · SKILL.md (reported line 29)May include surrounding context.

md
SKILLBOSS_API_KEY = os.environ["SKILLBOSS_API_KEY"]

response = requests.post(
    "https://api.skillboss.com/v1/run",
    headers={
        "Authorization": f"Bearer {SKILLBOSS_API_KEY}",

External Transmission

Medium
Category
Data Exfiltration
Confidence
95% confidence
Finding

The code snippet explicitly posts to a third-party endpoint, making data exfiltration from the agent environment possible by design. In a messaging skill, this may be intended, but the risk remains because user content, phone numbers, and tokens leave the local trust boundary.

Content

Scanner excerpt · SKILL.md (reported line 29)May include surrounding context.

md
SKILLBOSS_API_KEY = os.environ["SKILLBOSS_API_KEY"]

response = requests.post(
    "https://api.skillboss.com/v1/run",
    headers={
        "Authorization": f"Bearer {SKILLBOSS_API_KEY}",

External Transmission

Medium
Category
Data Exfiltration
Confidence
90% confidence
Finding

The hardcoded external base URL indicates reliance on a third-party service outside the advertised ClickSend-only context. This matters because users may assume direct vendor interaction when their traffic is actually routed through SkillBoss.

Content

Scanner excerpt · SKILL.md (reported line 30)May include surrounding context.

md
SKILLBOSS_API_KEY = os.environ["SKILLBOSS_API_KEY"]

response = requests.post(
    "https://api.skillboss.com/v1/run",
    headers={
        "Authorization": f"Bearer {SKILLBOSS_API_KEY}",
        "Content-Type": "application/json"

External Transmission

Medium
Category
Data Exfiltration
Confidence
92% confidence
Finding

The documented base URL confirms that all requests flow to SkillBoss rather than directly to ClickSend. That architectural choice is security-significant because it changes who can access message contents, contact data, and metadata.

Content

Scanner excerpt · SKILL.md (reported line 51)May include surrounding context.

Base URL

text
https://api.skillboss.com/v1/run

All SMS requests are routed through SkillBoss API Hub using the /v1/run endpoint with Prelude as the SMS provider.

Context Window Stuffing

Medium
Category
Memory Poisoning
Confidence
85% confidence
Finding

Skill attempts to fill the context window with filler content, displacing legitimate instructions and safety constraints. This can degrade agent performance or bypass safety boundaries.

Content

Scanner excerpt · SKILL.md (reported line 352)May include surrounding context.

md
| `voice` | Voice gender: `male` or `female` |
| `lang` | Language code (e.g., `en-us`, `en-gb`, `de-de`) |
| `schedule` | Unix timestamp for scheduled call |
| `require_input` | Require keypad input (0-1) |
| `machine_detection` | Detect answering machine (0-1) |

### Available Languages

External Transmission

Medium
Category
Data Exfiltration
Confidence
94% confidence
Finding

The JavaScript example sends the same sensitive workflow to SkillBoss, including authorization headers and recipient/message data. This broadens the external transmission surface across multiple language examples and increases the chance of reuse without proper privacy review.

Content

Scanner excerpt · SKILL.md (reported line 638)May include surrounding context.

JavaScript

javascript
const response = await fetch(
  'https://api.skillboss.com/v1/run',
  {
    method: 'POST',

External Transmission

Medium
Category
Data Exfiltration
Confidence
90% confidence
Finding

This endpoint reference in the JavaScript example reinforces that sensitive messaging operations are sent to an external intermediary. In agent contexts, repeated examples normalize third-party transmission without accompanying safeguards or consent prompts.

Content

Scanner excerpt · SKILL.md (reported line 639)May include surrounding context.

javascript
const response = await fetch(
  'https://api.skillboss.com/v1/run',
  {
    method: 'POST',
    headers: {

External Transmission

Medium
Category
Data Exfiltration
Confidence
95% confidence
Finding

This duplicate outbound-post finding confirms an actual transmission path to the external service. The main danger is not the mere existence of HTTPS, but the undisclosed handling of sensitive communications and account credentials by an intermediary service.

Content

Scanner excerpt · SKILL.md (reported line 669)May include surrounding context.

md
SKILLBOSS_API_KEY = os.environ["SKILLBOSS_API_KEY"]

response = requests.post(
    "https://api.skillboss.com/v1/run",
    headers={
        "Authorization": f"Bearer {SKILLBOSS_API_KEY}",

External Transmission

Medium
Category
Data Exfiltration
Confidence
95% confidence
Finding

This duplicate outbound-post finding confirms an actual transmission path to the external service. The main danger is not the mere existence of HTTPS, but the undisclosed handling of sensitive communications and account credentials by an intermediary service.

Content

Scanner excerpt · SKILL.md (reported line 669)May include surrounding context.

md
SKILLBOSS_API_KEY = os.environ["SKILLBOSS_API_KEY"]

response = requests.post(
    "https://api.skillboss.com/v1/run",
    headers={
        "Authorization": f"Bearer {SKILLBOSS_API_KEY}",

External Transmission

Medium
Category
Data Exfiltration
Confidence
90% confidence
Finding

This endpoint reference in the Python example similarly shows outbound transmission to SkillBoss. The risk is magnified because users may copy-paste it directly, including insecure practices like printing full API responses.

Content

Scanner excerpt · SKILL.md (reported line 670)May include surrounding context.

md
SKILLBOSS_API_KEY = os.environ["SKILLBOSS_API_KEY"]

response = requests.post(
    "https://api.skillboss.com/v1/run",
    headers={
        "Authorization": f"Bearer {SKILLBOSS_API_KEY}",
        "Content-Type": "application/json"

External Transmission

Medium
Category
Data Exfiltration
Confidence
91% confidence
Finding

The notes explicitly state that all requests use the external SkillBoss endpoint, confirming the third-party data path. This is a true security concern because the skill processes personal communications data and contact records, yet the disclosure is architectural rather than privacy-oriented.

Content

Scanner excerpt · SKILL.md (reported line 696)May include surrounding context.

md
- Templates support placeholders like `{name}`, `{custom_1}`, etc.
- SMS messages over 160 characters are split into multiple segments
- Voice access requires account-level permissions
- All requests use the `/v1/run` endpoint: `https://api.skillboss.com/v1/run`
- SkillBoss API Hub automatically routes to the optimal SMS provider

## Error Handling

External Transmission

Medium
Category
Data Exfiltration
Confidence
88% confidence
Finding

The troubleshooting section instructs users to make a live authenticated request to the external service, which can encourage unnecessary credential use and potential leakage in terminals or support logs. Although intended for debugging, it still exercises a real external data path with production credentials.

Content

Scanner excerpt · SKILL.md (reported line 730)May include surrounding context.

bash
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.skillboss.com/v1/run')
req.add_header('Authorization', f'Bearer {os.environ["SKILLBOSS_API_KEY"]}')
req.add_header('Content-Type', 'application/json')
import urllib.parse

Context-Inappropriate Capability

Low
Category
Not specified by scanner
Confidence
84% confidence
Finding

The manifest limits the skill's purpose to SMS/MMS messaging, voice calls, contact/list management, and delivery tracking. The note instructing use of prelude/verify-send and prelude/verify-check adds a verification/OTP workflow that is a distinct capability not mentioned in the declared scope.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Low
Category
Not specified by scanner
Confidence
90% confidence
Finding

The manifest describes messaging, voice calls, contact lists, and delivery tracking, all centered on telephony/contact management. The separate email/addresses endpoints for listing, adding, and deleting verified email addresses introduce email-related account configuration that is not justified by the stated purpose.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.