Back to skill

Security audit

Clup

Security checks for vulnerabilities and agentic risk

Overview

This skill does what it claims by creating ClickUp tickets, but it gives an agent broad ticket-creation authority with weak activation and credential-handling safeguards.

Install only if you are comfortable letting the agent create real ClickUp tasks with your API token. Use a least-privileged ClickUp token if possible, prefer temporary or secret-manager based credential handling over shell rc files, avoid putting secrets or sensitive infrastructure details in ticket text, and require an explicit confirmation before the agent runs the command.

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 (2)

T09 · Insecure Skill Coding Practices

Warning
Location
clup.sh:139
Finding

Unescaped User Input Allows JSON Payload Injection

Content
View full analysis
["tag1","tag2"] if [[ -n "$TAGS" ]]; then IFS=',' read -ra TAG_ARRAY <<< "$TAGS" TAGS_JSON=$(printf ',"%s"' "${TAG_ARRAY[@]}") TAGS_JSON="[${TAGS_JSON:1}]" # Remove leading comma and wrap in brackets else TAGS_JSON="[]" fi # Build JSON payload JSON_PAYLOAD=$(cat <
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Note
Location
clup.sh:161
Finding

ClickUp API Token Is Exposed Through Curl Process Arguments

Content
View full analysis
Remediation
View remediation
"$payload_file" cat > "$curl_config" <
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Rogue AgentSelf-Modification, Session Persistence
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (12)

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

The skill description claims constrained behavior and quality enforcement, but the actual behavior implies use of shell execution and ClickUp API credentials without declaring those permissions or validating the promised 2-3 sentence minimum. This mismatch can mislead reviewers and users about what the skill actually does, causing unexpected network actions and secret use under a seemingly simple ticket-formatting skill. The skill context increases risk because it can transform vague prompts into real external side effects against a production task system.

Content

No source excerpt is available for this finding.

Sudo/Root Execution

Medium
Category
Privilege Escalation
Confidence
70% confidence
Finding

Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Content

Scanner excerpt · README.md (reported line 42)May include surrounding context.

./clup.sh --title "Test" --description "Testing the tool"

Optional: Add to PATH for system-wide access

sudo ln -s "$(pwd)/clup.sh" /usr/local/bin/clup

Then you can use: clup --title "..." --description "..."

text

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The examples explicitly include sensitive internal details such as hostnames, private IPs, ports, outage timing, and production system names, but the documentation does not warn that these descriptions are sent to a third-party service. This creates a realistic risk of oversharing confidential infrastructure and incident data through routine ticket creation.

Content

No source excerpt is available for this finding.

Session Persistence

Medium
Category
Rogue Agent
Confidence
60% confidence
Finding

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.

Content

Scanner excerpt · README.md (reported line 125)May include surrounding context.

Error:

json
{"status":"error","http_code":400,"message":"Failed to create ticket"}

Troubleshooting

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The README encourages very broad natural-language invocation such as 'Create ticket for...' and 'Just say "Create ticket for..."', which can overlap with ordinary conversation and make an agent invoke the skill without sufficiently explicit user intent. In an agent setting, this increases the chance of unintended external actions and accidental transmission of operational details into ClickUp.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
92% confidence
Finding

The skill advertises shell-based execution but does not declare any tool scope such as allowed-tools or permissions. That omission weakens containment and review because a task-creation skill can invoke local commands and potentially use sensitive environment variables without explicit authorization boundaries. In this context, the lack of scoping is more dangerous because the skill is intended to trigger from common natural-language requests and relies on API credentials.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The trigger phrases are broad enough to match generic productivity language such as reminders or task creation requests that may not be intended for ClickUp. This can cause unintended invocation and external ticket creation, especially when combined with shell execution and API-backed side effects. In a skill that creates real objects in a third-party system, accidental activation is more dangerous than in a read-only or advisory skill.

Content

No source excerpt is available for this finding.

Session Persistence

Medium
Category
Rogue Agent
Confidence
90% confidence
Finding

The script instructs users to persist the ClickUp API key in shell startup files like ~/.zshrc or ~/.bashrc. Storing long-lived secrets in plaintext config files increases exposure to local compromise, accidental disclosure via backups/dotfile sync, or inadvertent sharing.

Content

Scanner excerpt · clup.sh (reported line 106)May include surrounding context.

sh
echo -e "${YELLOW}Please set your ClickUp API key:${NC}" >&2
    echo -e "  ${GREEN}export CLICKUP_API_KEY=\"pk_your_api_key_here\"${NC}" >&2
    echo "" >&2
    echo "To make it permanent, add to ~/.zshrc or ~/.bashrc:" >&2
    echo -e "  ${GREEN}echo 'export CLICKUP_API_KEY=\"pk_xxx\"' >> ~/.zshrc${NC}" >&2
    echo "" >&2
    echo "Get your API key: ClickUp Settings → Apps → Generate API Token" >&2

Session Persistence

Medium
Category
Rogue Agent
Confidence
90% confidence
Finding

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.

Content

Scanner excerpt · clup.sh (reported line 121)May include surrounding context.

sh
echo -e "${YELLOW}Please set your ClickUp List ID:${NC}" >&2
    echo -e "  ${GREEN}export CLICKUP_DEFAULT_LIST_ID=\"123456789\"${NC}" >&2
    echo "" >&2
    echo "To make it permanent, add to ~/.zshrc or ~/.bashrc:" >&2
    echo -e "  ${GREEN}echo 'export CLICKUP_DEFAULT_LIST_ID=\"xxx\"' >> ~/.zshrc${NC}" >&2
    echo "" >&2
    echo "Find your List ID in the ClickUp URL:" >&2

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

This shell script sends the provided title, description, tags, and status to the external ClickUp API using the user's API key. While the script's purpose implies ticket creation, the code does not include a direct user-facing notice at the point of transmission that task contents are sent to a third-party service.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
70% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · clup.sh (reported line 169)May include surrounding context.

sh
fi

# Make API request
response=$(curl -s -w "\n%{http_code}" -X POST \
    "https://api.clickup.com/api/v2/list/${CLICKUP_DEFAULT_LIST_ID}/task" \
    -H "Authorization: ${CLICKUP_API_KEY}" \
    -H "Content-Type: application/json" \

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · clup.sh (reported line 170)May include surrounding context.

sh
# Make API request
response=$(curl -s -w "\n%{http_code}" -X POST \
    "https://api.clickup.com/api/v2/list/${CLICKUP_DEFAULT_LIST_ID}/task" \
    -H "Authorization: ${CLICKUP_API_KEY}" \
    -H "Content-Type: application/json" \
    -d "$JSON_PAYLOAD")