Back to skill

Security audit

Claude Connect

Security checks across malware telemetry and agentic risk

Overview

This legacy OAuth refresher is not clearly malicious, but it needs review because it copies Claude tokens, modifies credential stores and auth files, installs a persistent macOS job, and auto-detects messaging targets.

Install only if you specifically need this legacy refresher and understand that it will handle live Claude OAuth tokens. Prefer Clawdbot's native Claude OAuth setup if available. Before running install.sh, review the launchd service, disable or manually configure notifications, protect auth-profiles.json, and be aware that the skill copies refresh credentials out of Keychain and keeps a background refresher running.

SkillSpector

By NVIDIA
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (56)

Lp3

Medium
Category
MCP Least Privilege
Confidence
93% confidence
Finding
The skill documentation describes shell execution and file writes, including installing launchd jobs and modifying auth-profiles.json, but the skill declares no permissions. This creates a trust and consent gap: users and any permission framework are not given an explicit warning that the skill can alter local configuration and persistence mechanisms.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding
The advertised purpose sounds like a simple connection helper, but the described behavior includes extracting credentials from Keychain, rewriting OAuth material, installing a persistent launchd service, restarting services, and sending notifications. That mismatch materially increases risk because users may approve the skill without realizing it performs sensitive credential handling and persistence operations.

Description-Behavior Mismatch

Medium
Confidence
88% confidence
Finding
The file documents behavior centered on auto-detecting messaging configuration and generating a notification config, which does not align with the skill's stated purpose of linking a Claude subscription and refreshing tokens. That mismatch is dangerous because it can hide unexpected data access and configuration changes behind a misleading description, reducing informed user consent and review scrutiny.

Context-Inappropriate Capability

Medium
Confidence
90% confidence
Finding
The documented logic enumerates and extracts user or target identifiers across multiple messaging platforms from ~/.clawdbot/clawdbot.json, but that access is not clearly justified by the advertised Claude-connection purpose. This broad inspection increases privacy risk and could be repurposed for collection of communication endpoints unrelated to the user's expected workflow.

Description-Behavior Mismatch

Medium
Confidence
96% confidence
Finding
The file describes a different skill/component ('CLAUDE-OAUTH-REFRESHER' under a separate location/name) than the provided skill metadata ('claude-connect'), which indicates identity drift between the manifest and delivered contents. In a security-sensitive OAuth/token-management skill, this mismatch is dangerous because users or downstream agents may install or trust functionality different from what they intended, reducing review accuracy and increasing the chance of hidden credential-handling behavior going unnoticed.

Intent-Code Divergence

Low
Confidence
88% confidence
Finding
The document asserts that all scripts and documentation were updated, yet it still references a different skill/location naming scheme elsewhere, showing incomplete or misleading update status. While not an exploit by itself, inaccurate upgrade/install documentation in a token refresher can cause users to run the wrong scripts, validate the wrong directory, or trust stale files that handle OAuth credentials.

Description-Behavior Mismatch

Medium
Confidence
95% confidence
Finding
The installer creates and loads a LaunchAgent plist that causes refresh-token.sh to run automatically in the background on a recurring schedule. That is OS-level persistence, and in the context of a skill that maintains access tokens, it meaningfully extends the lifetime of authenticated access beyond a one-time setup action.

Context-Inappropriate Capability

Medium
Confidence
95% confidence
Finding
The script restarts the Clawdbot gateway after refreshing tokens, which exceeds the minimum privileges needed for a token-refresh utility. Service-control behavior broadens the blast radius: a modified or misconfigured script could disrupt availability or be repurposed to manipulate the running bot lifecycle.

Context-Inappropriate Capability

Low
Confidence
83% confidence
Finding
The notification helper enables the script to send outbound Clawdbot messages unrelated to the core act of refreshing a token. While not inherently malicious, it creates an unnecessary exfiltration-capable side channel and couples credential handling with messaging functionality.

Intent-Code Divergence

Medium
Confidence
95% confidence
Finding
The header comments identify the script as belonging to 'claude-oauth-refresher' while the manifested skill is 'claude-connect'. This mismatch is a supply-chain red flag because it can mislead users and reviewers about the script's provenance and purpose, especially in a skill that handles authentication material.

Missing User Warnings

Medium
Confidence
86% confidence
Finding
The documentation describes automatically reading local notification settings and writing a derived config.json, but it provides no clear privacy notice, consent flow, or warning that messaging identifiers will be inspected and persisted. This is risky because users may unknowingly expose or duplicate sensitive contact/channel identifiers into another file or workflow.

Vague Triggers

Medium
Confidence
81% confidence
Finding
The listed control phrases are broad natural-language commands without clear trigger boundaries, authorization requirements, or exclusion conditions. In an agent-integrated skill that can edit configuration for token refresh behavior, ambiguous invocation increases the risk of accidental activation or prompt-based manipulation that changes operational settings without clear user intent.

Missing User Warnings

Medium
Confidence
84% confidence
Finding
The fallback behavior reads message-history metadata via a CLI search command in order to infer a Telegram chat ID, which extends data collection beyond static config inspection and is not clearly disclosed as access to message-derived metadata. In the context of a skill advertised as keeping a third-party connection alive '24/7' with automatic refresh, this undocumented inspection of messaging history increases privacy risk and could normalize broader local data access than users expect.

Missing User Warnings

Low
Confidence
81% confidence
Finding
The quickstart presents installation as a simple one-command setup without an upfront warning that it installs a persistent launchd service and writes config/log files. This weakens informed consent and can lead users to authorize background persistence and local data creation without realizing the security and privacy implications.

Missing User Warnings

Medium
Confidence
91% confidence
Finding
The skill explicitly handles OAuth access and refresh tokens and moves them between Keychain and another application's auth store, yet it does not present a strong warning about credential sensitivity, storage implications, or possible account compromise if those tokens are exposed. Users may not understand that these are bearer credentials whose disclosure could allow unauthorized access.

Missing User Warnings

Medium
Confidence
84% confidence
Finding
The documented auto-detection reads `~/.clawdbot/clawdbot.json` and extracts identifiers such as chat IDs, user IDs, or phone numbers without any explicit privacy warning or consent language. Even if used locally, silently harvesting communication identifiers expands data access beyond token refresh and can surprise users or expose sensitive metadata if mishandled or logged.

Credential Access

High
Category
Privilege Escalation
Content
**Connect your Claude subscription to Clawdbot in one step.**

Automatically:
- ✅ Reads Claude OAuth tokens from Keychain
- ✅ Writes them to Clawdbot in proper OAuth format
- ✅ Auto-refreshes every 2 hours (before expiry)
- ✅ Notifies you on success/failure
Confidence
97% confidence
Finding
Keychain

Credential Access

High
Category
Privilege Escalation
Content
### Refresh Process

1. **Read from Keychain:** Gets OAuth tokens from `Claude Code-credentials`
2. **Check Expiry:** Only refreshes if < 30 minutes left (or `--force`)
3. **Call OAuth API:** Gets new access + refresh tokens
4. **Update auth-profiles.json:** Writes proper OAuth format
Confidence
96% confidence
Finding
Keychain

Credential Access

High
Category
Privilege Escalation
Content
2. **Check Expiry:** Only refreshes if < 30 minutes left (or `--force`)
3. **Call OAuth API:** Gets new access + refresh tokens
4. **Update auth-profiles.json:** Writes proper OAuth format
5. **Update Keychain:** Syncs new tokens back
6. **Restart Gateway:** Picks up new tokens
7. **Notify:** Sends success/failure message (optional)
Confidence
96% confidence
Finding
Keychain

Credential Access

High
Category
Privilege Escalation
Content
**Simplified, Claude-only:**
- No multi-provider complexity
- Reads from `~/.config/claude/auth-profiles.json`
- Retrieves refresh token from Keychain (`claude-cli-auth` service)
- Calculates expiry with buffer (default: 30 min)
- Makes OAuth request to `auth.anthropic.com`
- Updates `auth-profiles.json` atomically
Confidence
88% confidence
Finding
Keychain

Credential Access

High
Category
Privilege Escalation
Content
- Calculates expiry with buffer (default: 30 min)
- Makes OAuth request to `auth.anthropic.com`
- Updates `auth-profiles.json` atomically
- Updates Keychain if refresh token rotates
- Sends notifications via Clawdbot
- Comprehensive error handling with actionable messages
Confidence
89% confidence
Finding
Keychain

Credential Access

High
Category
Privilege Escalation
Content
# Apply defaults if not set
KEYCHAIN_SERVICE="${KEYCHAIN_SERVICE:-$DEFAULT_KEYCHAIN_SERVICE}"
KEYCHAIN_FIELD="${KEYCHAIN_FIELD:-$DEFAULT_KEYCHAIN_FIELD}"
AUTH_FILE="${AUTH_FILE:-$DEFAULT_AUTH_FILE}"
PROFILE_NAME="${PROFILE_NAME:-$DEFAULT_PROFILE_NAME}"
CLIENT_ID="${CLIENT_ID:-$DEFAULT_CLIENT_ID}"
Confidence
90% confidence
Finding
KEYCHAIN

Credential Access

High
Category
Privilege Escalation
Content
# Apply defaults if not set
KEYCHAIN_SERVICE="${KEYCHAIN_SERVICE:-$DEFAULT_KEYCHAIN_SERVICE}"
KEYCHAIN_FIELD="${KEYCHAIN_FIELD:-$DEFAULT_KEYCHAIN_FIELD}"
AUTH_FILE="${AUTH_FILE:-$DEFAULT_AUTH_FILE}"
PROFILE_NAME="${PROFILE_NAME:-$DEFAULT_PROFILE_NAME}"
CLIENT_ID="${CLIENT_ID:-$DEFAULT_CLIENT_ID}"
Confidence
90% confidence
Finding
KEYCHAIN

Credential Access

High
Category
Privilege Escalation
Content
# Apply defaults if not set
KEYCHAIN_SERVICE="${KEYCHAIN_SERVICE:-$DEFAULT_KEYCHAIN_SERVICE}"
KEYCHAIN_FIELD="${KEYCHAIN_FIELD:-$DEFAULT_KEYCHAIN_FIELD}"
AUTH_FILE="${AUTH_FILE:-$DEFAULT_AUTH_FILE}"
PROFILE_NAME="${PROFILE_NAME:-$DEFAULT_PROFILE_NAME}"
CLIENT_ID="${CLIENT_ID:-$DEFAULT_CLIENT_ID}"
Confidence
90% confidence
Finding
KEYCHAIN

Credential Access

High
Category
Privilege Escalation
Content
}

# Get ALL account names for this service
log "Scanning for all '$KEYCHAIN_SERVICE' entries..."
ALL_ACCOUNTS=$(security dump-keychain 2>/dev/null | \
    awk '/^class: "genp"/,/^keychain:/ {
        if (/"acct"<blob>=/) {
Confidence
93% confidence
Finding
KEYCHAIN

VirusTotal

66/66 vendors flagged this skill as clean.

View on VirusTotal

Static analysis

No suspicious patterns detected.