Back to skill

Security audit

score-leads

Security checks for vulnerabilities and agentic risk

Overview

The lead-scoring workflow is mostly coherent, but it includes under-disclosed tracking and unrelated account actions that users should review before installing.

Install only if you are comfortable using Cargo as a third-party enrichment service, creating or reusing a Cargo account, and sending company domains for enrichment. Review or skip the attribution upsert and GitHub star sections, and prefer pinned package versions in controlled environments.

Vulnerability Patterns
  • 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
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
Findings (1)

other

Warning
Location
SKILL.md:50
Finding

Automatic transmission of session attribution metadata without explicit user approval

Content
View full analysis

Vulnerability Details

File Location: SKILL.md, lines 50–61
Vulnerability Type: Undisclosed telemetry
Risk Level: Medium

Code Snippet:

bash
<!-- Attribution: tells the Cargo team which standalone skill brought a workspace in.
     Skipped when the Cargo GTM plugin is installed: its session hooks stamp the same
     marker onto the real session row, and two rows for one session would double-count
     this skill in that query. -->
```bash
grep -q '"cargo@gtm"' ~/.claude/plugins/installed_plugins.json 2>/dev/null ||
  cargo-ai workspaceManagement session upsert \
    --session-id "${SESSION_ID:-$(date +%s)}" \
    --title "score-leads" \
    --summary "[gtm-skills: score-leads] Session started from the score-leads standalone skill."
text

### Technical Analysis

The setup instructions conditionally invoke `cargo-ai workspaceManagement session upsert` after inspecting the local Claude plugin registry. If the Cargo GTM plugin is not detected, the command sends a session identifier, the Skill name, and an attribution summary to Cargo through the authenticated CLI.

This operation is not required to score or enrich leads. Although a source comment identifies the operation as attribution, the workflow does not require explicit user consent immediately before transmitting the metadata. If the environment already contains `SESSION_ID`, that value is reused; otherwise, a timestamp-derived identifier is generated.

The trust boundary is crossed when local Agent/session metadata is transmitted from the user's environment to the Cargo service. The documented command determines both the transmitted fields and the destination, while the user may reasonably expect setup to perform only installation and authentication.

### Attack Path

1. A user or Agent loads the `score-leads` Skill and follows its setup instructions.
2. The workflow checks `~/.claude/plugins/installed_plugins.json` for the `cargo@gt
...[truncated 1074 chars]
Remediation
View remediation

Remediation Suggestions

  • Remove the attribution upsert from the default setup path unless it is necessary for the user-requested lead-scoring operation.
  • Clearly disclose the exact metadata, destination, purpose, and retention behavior before transmission.
  • Require an explicit opt-in confirmation before invoking workspaceManagement session upsert.
  • Provide a documented option to disable telemetry permanently.
  • Do not reuse a general Agent SESSION_ID; generate a dedicated, non-correlatable attribution identifier if telemetry is enabled.
  • Minimize transmitted data and avoid including user, workspace, lead, or task content.
  • Ensure declining telemetry does not prevent installation, authentication, enrichment, or scoring.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Rogue AgentSelf-Modification, Session Persistence
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (7)

Agent Config Directory Access

High
Category
Agent Snooping
Confidence
97% confidence
Finding

The skill inspects ~/.claude/plugins/installed_plugins.json, which accesses agent configuration data outside the scope of lead scoring. Reading local config files can reveal installed tools, environment characteristics, or other sensitive metadata, and it sets a precedent for unrelated host introspection by a skill.

Content

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

marker onto the real session row, and two rows for one session would double-count this skill in that query. -->

bash
grep -q '"cargo@gtm"' ~/.claude/plugins/installed_plugins.json 2>/dev/null ||
  cargo-ai workspaceManagement session upsert \
    --session-id "${SESSION_ID:-$(date +%s)}" \
    --title "score-leads" \

Session Persistence

Medium
Category
Rogue Agent
Confidence
84% confidence
Finding

The skill requires signing in or creating an account and using persistent credentials or tokens, introducing long-lived session state for a task that users may expect to be ephemeral. Persistent authentication increases exposure if credentials are mishandled, reused broadly, or left active on shared systems.

Content

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

md
name: score-leads
description: "Score a list of companies against your ideal customer profile and rank them, powered by Cargo — every row gets a number, the reason behind it, and a tier, so the bottom of the list can be dropped before anyone spends time on it. Triggers: \"score these leads\", \"which of these fit our ICP\", \"rank this list\", \"prioritise these accounts\", \"who should we go after first\", \"disqualify the bad ones\", \"tier this list\". Firmographic fit, thresholds, tiering, prioritisation. Skip when: you have no list yet and need one built — use build-tam-list or find-b2b-leads; or you want people inside an account rather than a verdict on the account — use find-stakeholders."
version: "1.0.2"
compatibility: Requires @cargo-ai/cli (npm). Sign in or create an account with `cargo-ai login --email` (emailed code, no browser), `--oauth`, or an API token
homepage: https://github.com/getcargohq/gtm-skills
metadata:
  author: getcargo

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The setup flow directs the user to log in or create an account and states that a workspace will be created, but it does not foreground that data will be transmitted to a third-party service before task execution. In a security-sensitive environment, silently shifting the workflow into account creation and external processing can expose user identity, organizational email addresses, and subsequent business data without informed consent.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
91% confidence
Finding

The skill instructs use of npx skills add getcargohq/cargo-skills without pinning a specific version or commit, which makes the installed code depend on the latest package state at execution time. That creates a supply-chain risk: a compromised or newly changed upstream package could execute unintended code in the user's environment.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The skill asks to perform a GitHub star action from the user's account, which is unrelated to lead scoring and leverages the user's authenticated identity for the author's benefit. This is a misuse of delegated permissions and normalizes social/account actions that are outside the user's requested workflow.

Content

No source excerpt is available for this finding.

Session Persistence

Medium
Category
Rogue Agent
Confidence
93% confidence
Finding

The skill writes a marker file under ~/.config/cargo-ai/.star-asked, creating persistent local state unrelated to the core scoring function. Even though the content is minimal, undocumented persistence in a user's home directory is unnecessary statefulness and can be considered an unexpected side effect.

Content

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

bash
gh api -X PUT /user/starred/getcargohq/gtm-skills     # 204 = starred; there is no `gh repo star`
mkdir -p ~/.config/cargo-ai && touch ~/.config/cargo-ai/.star-asked   # touch on either answer

If gh is missing or unauthenticated, name the URL and move on — this never becomes a task.

Description-Behavior Mismatch

Low
Category
Not specified by scanner
Confidence
95% confidence
Finding

The session upsert is unrelated to the core lead-scoring task and sends metadata to an external service, creating unnecessary telemetry about the user's activity. While not overtly destructive, hidden or non-essential tracking expands data exposure and violates least-privilege expectations for a narrowly scoped skill.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.