Back to skill

Security audit

Super Clickup Mcp 1.0.0

Security checks for vulnerabilities and agentic risk

Overview

The skill is a disclosed ClickUp integration, but it asks users to copy a long-lived ClickUp access token from Claude's credential file into a plaintext environment file.

Review before installing. Prefer direct OAuth in an allowlisted client if available. If you use this workaround, treat CLICKUP_TOKEN as a sensitive long-lived secret, keep the .env file owner-only, do not commit or sync it, avoid sharing terminal output or screenshots containing the token, and revoke or rotate the token if it may have been exposed.

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:37
Finding

Long-Lived ClickUp OAuth Token Exposed and Stored in Plaintext

Content
View full analysis

Vulnerability Details

File Location: SKILL.md, lines 37-60
Vulnerability Type: Plaintext credential extraction and storage
Risk Level: Medium

Vulnerable Code

markdown
**Step 2: Extract token**
```bash
jq -r '.mcpOAuth | to_entries | .[] | select(.key | startswith("clickup")) | .value.accessToken' ~/.claude/.credentials.json

Step 3: Add to environment

bash
# Add to ~/.clawdbot/.env
CLICKUP_TOKEN=eyJhbGciOiJkaXIi...

Step 4: Configure mcporter

Add to config/mcporter.json:

json
{
  "mcpServers": {
    "clickup": {
      "baseUrl": "https://mcp.clickup.com/mcp",
      "description": "Official ClickUp MCP",
      "headers": {
        "Authorization": "Bearer ${CLICKUP_TOKEN}"
      }
    }
  }
}
text

### Technical Analysis

The setup procedure reads an OAuth access token directly from Claude's credential store and emits it as plaintext to standard output. It then instructs the user to copy the token into `~/.clawdbot/.env`, without requiring restrictive file permissions, output suppression, a dedicated secret manager, or token rotation.

The same document states that these tokens are long-lived, approximately ten years. Consequently, accidental disclosure can provide durable access. Potential exposure sources include terminal logs, command-output capture, screen sharing, clipboard history, unencrypted backups, diagnostic bundles, and local processes or users able to read the environment file.

Reading the ClickUp-specific entry is relevant to the declared integration and does not itself demonstrate access to unrelated credentials. The configured bearer token is also transmitted only to the declared official ClickUp MCP endpoint. Nevertheless, extracting an existing credential from another application's credential store and duplicating it into a plaintext file exceeds secure minimum-practice requirements.

### Attack Path

1. A user follows t
...[truncated 1657 chars]
Remediation
View remediation

Remediation Suggestions

  1. Prefer direct OAuth integration with secure token lifecycle management instead of extracting credentials from ~/.claude/.credentials.json.
  2. Store access and refresh tokens in an operating-system keychain, encrypted credential store, or dedicated secret manager rather than a plaintext .env file.
  3. If an environment file is unavoidable, create it with owner-only permissions, such as mode 0600, and verify that its parent directory is not accessible to other users.
  4. Avoid printing the token to standard output. Use a mechanism that transfers the value directly into protected storage without exposing it in terminal logs or clipboard history.
  5. Ensure credential files are excluded from source control, backups, support bundles, telemetry, and diagnostic output.
  6. Document explicit token revocation and rotation procedures. Users should revoke the Claude-derived token after suspected exposure.
  7. Prefer short-lived and narrowly scoped credentials where ClickUp supports them, and authorize only the minimum workspace permissions required.
  8. Warn users not to paste real tokens into command history, chat messages, issue reports, screenshots, or configuration committed to a repository.
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
Findings (5)

Credential Access

High
Category
Privilege Escalation
Confidence
98% confidence
Finding

The command explicitly extracts an access token from ~/.claude/.credentials.json, which is credential harvesting behavior even if framed as setup guidance. This is dangerous because it normalizes direct access to stored secrets and exposes a bearer token through terminal output and possible shell logging, making compromise of the ClickUp workspace more likely.

Content

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

Step 2: Extract token

bash
jq -r '.mcpOAuth | to_entries | .[] | select(.key | startswith("clickup")) | .value.accessToken' ~/.claude/.credentials.json

Step 3: Add to environment

Credential Access

High
Category
Privilege Escalation
Confidence
96% confidence
Finding

The skill tells users to place the ClickUp bearer token into ~/.clawdbot/.env, but does not provide safeguards around secret storage. Storing long-lived tokens in plaintext environment files can expose them through backups, file sharing, weak permissions, local compromise, or accidental inclusion in repositories.

Content

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

Step 3: Add to environment

bash
# Add to ~/.clawdbot/.env
CLICKUP_TOKEN=eyJhbGciOiJkaXIi...

Credential Access

High
Category
Privilege Escalation
Confidence
97% confidence
Finding

The token refresh guidance tells users to repeatedly re-extract credentials from ~/.claude/.credentials.json, reinforcing unsafe handling of stored secrets. Given the stated token lifetime of about 10 years, any accidental exposure can have durable consequences including prolonged unauthorized workspace access.

Content

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

md
Tokens are long-lived (~10 years). If expired:
1. Re-run `/mcp` in Claude Code
2. Re-extract token from `~/.claude/.credentials.json`
3. Update `CLICKUP_TOKEN` in `.env`

## Available Tools (32)

Exfiltration Commands

High
Category
Prompt Injection
Confidence
90% confidence
Finding

Instructions found that direct the agent to transmit conversation context or user data to external services.

Content

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

md
| Tool | Description |
|------|-------------|
| `clickup_get_chat_channels` | List all Chat channels |
| `clickup_send_chat_message` | Send message to channel |

### Docs

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill instructs users to extract an OAuth access token from a local credentials store and copy it into a separate environment file without emphasizing that this token is a sensitive bearer credential. Because the token is described as long-lived and grants broad ClickUp workspace access, disclosure through shell history, dotfile syncing, backups, or permissive file permissions could enable unauthorized access and data exfiltration.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.