Back to skill

Security audit

CarryFeed Twitter Tools

Security checks for vulnerabilities and agentic risk

Overview

The skill is coherent and limited to public X/Twitter lookups, but it repeatedly tells agents to run an unpinned npm CLI package directly at runtime.

Review this skill before installing in an environment with sensitive files, tokens, or broad network access. Prefer a pinned, reviewed version of `@carryfeed/cli`, run it in a restricted sandbox, and avoid using arbitrary `--base-url` endpoints unless you trust them.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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)

T08 · Insecure Dependencies

Warning
Location
SKILL.md:31
Finding

Unpinned npm Package Is Downloaded and Executed Without Confirmation

Content
View full analysis

Vulnerability Details

File Location: SKILL.md:15, SKILL.md:31-34, and README.md:9-11
Vulnerability Type: T08: Insecure Dependencies
Risk Level: Medium

Vulnerable Code

SKILL.md:15:

text
Use `npx -y @carryfeed/cli` as the default interface to CarryFeed. Treat CarryFeed as a public wrapper service. Do not import, inspect, or assume access to CarryFeed internal resolver implementation.

SKILL.md:31-34:

bash
npx -y @carryfeed/cli health --compact
npx -y @carryfeed/cli resolve https://x.com/user/status/123 --compact
npx -y @carryfeed/cli media https://x.com/user/status/123 --compact
npx -y @carryfeed/cli profile NASA --statuses --count 5 --compact

README.md:9-11:

bash
npx -y @carryfeed/cli resolve https://x.com/user/status/123 --compact
npx -y @carryfeed/cli media https://x.com/user/status/123 --compact
npx -y @carryfeed/cli profile NASA --statuses --count 5 --compact

Technical Analysis

The documented workflow invokes npx -y @carryfeed/cli without specifying an exact package version or verifying package integrity. Consequently, npx can retrieve and execute the version currently selected by the npm registry rather than a version whose contents were reviewed together with this skill.

The -y option automatically accepts the package installation prompt. This removes an interactive checkpoint before third-party code is downloaded and executed. The effective executable payload can therefore change independently of the audited repository whenever a new package version is published.

This constitutes a supply-chain weakness. Exploitation would require compromise or malicious publication within the npm package or its dependency chain; the reviewed project itself does not contain an embedded malicious payload.

Attack Path

  1. An attacker compromises the npm publisher, the @carryfeed/cli package, or a package in its dependency chain.
  2. The atta ...[truncated 1176 chars]
Remediation
View remediation

Remediation Suggestions

  1. Replace the floating package reference with an exact, reviewed version, for example:

    bash
    npx -y @carryfeed/cli@0.1.0 health --compact
    

    The actual version should be selected only after reviewing and testing that release.

  2. Prefer installing dependencies through a committed lockfile that records exact transitive versions and integrity hashes.

  3. Verify package provenance and integrity before execution. Where supported, use npm provenance attestations, registry integrity metadata, and an approved internal package mirror.

  4. Avoid suppressing confirmation with -y when interactive approval is practical. If automation requires non-interactive execution, enforce package allowlisting and version pinning outside the skill instructions.

  5. Disable npm lifecycle scripts where compatible with the package:

    bash
    npm_config_ignore_scripts=true npx -y @carryfeed/cli@0.1.0 health --compact
    

    This should first be tested because some legitimate packages require lifecycle scripts.

  6. Run the CLI in a restricted environment with minimal filesystem permissions, no unrelated credentials, controlled outbound network access, and bounded resource usage.

  7. Update every invocation in SKILL.md and README.md consistently so users are not directed back to the unpinned command.

Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
Findings (22)

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding

The README instructs users to execute npx -y @carryfeed/cli without pinning a specific version, which means the code fetched and executed can change over time. If the package is compromised, typosquatted, or a malicious version is later published, users and agents may run attacker-controlled code directly from the registry.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
98% confidence
Finding

This usage example executes a remote npm package via npx without a pinned version, creating a supply-chain risk every time the command is run. Because the skill is specifically designed for agent workflows, this increases the chance of automated, repeated execution of whatever code is currently published under that package name.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
98% confidence
Finding

The media example again uses unpinned npx execution, so the invoked code is not reproducible and may silently change between runs. In an agent-skill context, this is dangerous because a downstream agent may treat README commands as trusted operational guidance and execute unreviewed code.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
98% confidence
Finding

This profile lookup example uses npx -y @carryfeed/cli without version pinning, exposing users to supply-chain compromise or unexpected behavior changes. The danger is amplified by the skill’s stated goal of giving agents a 'default path,' which can normalize automatic execution of mutable third-party code.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
91% confidence
Finding

npx skills add ... also relies on runtime retrieval and execution of an npm package without pinning the package version, which introduces similar supply-chain risk. Although this appears to be an installation helper rather than the core data-access path, it still conditions users to execute mutable remote code directly.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
97% confidence
Finding

The skill repeatedly instructs agents to execute npx -y @carryfeed/cli without pinning an exact package version. Because npx fetches the latest published package at runtime, a compromised maintainer account, malicious update, or dependency hijack could cause arbitrary code execution on the agent host.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 · README.md (reported line 41)May include surrounding context.

md
Links:

- Website: https://carryfeed.com
- API health: https://api.carryfeed.com/health
- Agent discovery: https://carryfeed.com/llms.txt
- CLI package: https://www.npmjs.com/package/@carryfeed/cli
- Video downloader: https://carryfeed.com/twitter-video-downloader

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 · SKILL.md (reported line 17)May include surrounding context.

md
Links:

- Website: https://carryfeed.com
- API health: https://api.carryfeed.com/health
- Agent discovery: https://carryfeed.com/llms.txt
- CLI package: https://www.npmjs.com/package/@carryfeed/cli
- Video downloader: https://carryfeed.com/twitter-video-downloader

Rp1

Medium
Category
MCP Rug Pull
Confidence
97% confidence
Finding

This command uses npx -y @carryfeed/cli with no fixed version, which means execution depends on whatever package version is current in the registry at runtime. That creates a supply-chain execution risk if the package or one of its dependencies is tampered with.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
97% confidence
Finding

The skill directs runtime execution of an unpinned npm package. An attacker who can influence the published package version or its dependency graph could execute arbitrary code in the environment where the skill runs.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
97% confidence
Finding

This is another unpinned npx execution path, so the skill is effectively delegating trust to the live npm registry on each run. In agent environments, that can translate directly into remote code execution if the package is replaced or compromised.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
97% confidence
Finding

Running npx -y @carryfeed/cli without a version allows silent drift to newly published code. This is dangerous because the command is intended to be executed by an agent, making registry compromise or malicious package updates a direct execution vector.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
97% confidence
Finding

The example invokes an unversioned npm package through npx, which is a classic supply-chain risk. The danger is elevated by the skill's purpose: it operationalizes these commands for repeated automated use by agents.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
97% confidence
Finding

This health-check command still downloads and runs the latest package code if not already cached, so it carries the same arbitrary code execution risk as the other examples. Even seemingly harmless subcommands are dangerous when the executable itself is not pinned.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
97% confidence
Finding

The unpinned resolve invocation relies on live registry state and may execute newly published code without review. That exposes the host to supply-chain compromise and undermines reproducibility and auditability.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
97% confidence
Finding

Because no version is pinned, this command may resolve to different code over time, including malicious or compromised releases. In an automated skill context, that can become a reliable remote execution pathway across many runs.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
97% confidence
Finding

This media command is another instance of runtime execution of unreviewed latest npm code. The issue is not the media functionality itself, but the trust boundary created by unpinned package retrieval and execution.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
97% confidence
Finding

The profile command uses npx without a fixed version, exposing the environment to package substitution or malicious upstream updates. Since agents may run this non-interactively, exploitation could occur without human review.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
97% confidence
Finding

This command inherits the same supply-chain risk as the rest of the skill: it executes the latest available npm package at runtime. A compromised package could steal credentials, modify outputs, or run arbitrary system commands.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
97% confidence
Finding

The profile --media example uses an unpinned CLI package, so the actual code executed is mutable and externally controlled by the package registry state. That creates a high-risk supply-chain entry point for the agent environment.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
97% confidence
Finding

The post command is another direct execution of an unpinned npm package. If the package is maliciously updated, the agent will execute attacker-controlled code simply by following documented skill instructions.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
97% confidence
Finding

Even though this subcommand only builds a URL, the wrapper executable is still fetched and run unpinned. The dangerous part is the package execution path, not the apparent simplicity of the CLI action.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.