Back to skill

Security audit

Reply.io CLI

Security checks for vulnerabilities and agentic risk

Overview

The skill is a coherent Reply.io CLI helper, but it asks agents to run an unpinned npm package with a Reply.io API key and includes high-impact campaign/contact changes without clear guardrails.

Review before installing. Use only with a Reply.io API key scoped as narrowly as possible, prefer a pinned or preinstalled reviewed `reply-cli` instead of live `npx` resolution, and require explicit approval before any command that starts or pauses sequences, creates contacts, or changes enrollment.

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
reply.sh:14
Finding

Unpinned npm Package Execution Through npx

Content
View full analysis

Vulnerability Details

File Location: reply.sh, line 14
Vulnerability Type: Unpinned third-party dependency execution
Risk Level: Medium

Vulnerable Code:

bash
# Pass all arguments to reply-cli
npx reply-cli "$@"

Technical Analysis

The wrapper invokes reply-cli through npx without specifying an exact package version or enforcing use of an already installed, audited copy. If the package is not available locally, npx may resolve, download, and execute it from the configured npm registry.

Consequently, the code executed at runtime can differ from the code reviewed during this audit. It may change through a compromised package release, package ownership transfer, registry compromise, or manipulated registry configuration. The external package's source and dependency tree are not included in this project, so their behavior could not be verified.

This is particularly sensitive because the child process inherits the wrapper's environment, including REPLY_API_KEY. The argument forwarding itself is correctly quoted and does not create a shell-injection issue.

Attack Path

  1. An attacker compromises the reply-cli package, its publisher account, an upstream dependency, or the npm registry resolution path.
  2. The attacker publishes or serves a malicious version under the package name used by the Skill.
  3. A user or agent invokes reply.sh on a system without a trusted local installation.
  4. npx resolves and executes the malicious package.
  5. The package runs with the invoking agent's operating-system privileges and inherits REPLY_API_KEY.
  6. The malicious code can exfiltrate the key, access data available to the process, or issue unauthorized Reply.io API operations.

Impact Assessment

Successful exploitation can expose the Reply.io API key and permit actions authorized by that credential, potentially including reading campaign and contact data, modifying contacts, enrollin ...[truncated 407 chars]

Remediation
View remediation

Remediation Suggestions

  1. Add a package manifest and lockfile that pin reply-cli and all transitive dependencies to reviewed versions.
  2. Install dependencies during a controlled build or deployment phase rather than downloading packages during Skill execution.
  3. Invoke the pinned local binary directly, or use:
    bash
    npx --no-install reply-cli "$@"
    
    This causes execution to fail instead of retrieving an absent package.
  4. Verify package provenance, registry configuration, and integrity metadata during installation.
  5. Run the command in a restricted environment with only the necessary REPLY_API_KEY exposed.
  6. Scope and rotate the Reply.io API key where supported, and avoid granting permissions unrelated to the declared campaign-management functions.
  7. Consider vendoring or otherwise reviewing the exact downstream CLI implementation before deployment.
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 (18)

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding

The skill repeatedly instructs users to run npx reply-cli without pinning a specific package version. Because npx resolves and executes the latest published package by default, a compromised upstream release, typosquat, or malicious dependency update could result in arbitrary code execution in the agent environment, with access to REPLY_API_KEY and network capabilities.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding

This command uses npx reply-cli without a pinned version, causing on-demand execution of whatever version the package registry returns at runtime. In a skill that relies on an API key, this materially increases supply-chain risk because a malicious package update could steal credentials or perform unauthorized Reply.io actions.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding

Invoking npx reply-cli here executes an unpinned package from the npm ecosystem, which is a classic supply-chain exposure. If the package or one of its dependencies is hijacked, the malicious code could run with the user's environment and access the Reply.io API key.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding

The skill recommends an unpinned npx execution path for a command that can inspect or manage Reply.io resources. This creates avoidable exposure to remote code execution via malicious package publication or dependency drift, especially dangerous because the runtime has a sensitive API token configured.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The documentation presents several state-changing commands—starting/pausing sequences, creating contacts, adding/removing sequence contacts—without clear warnings, confirmations, or safety constraints. In an agent setting, this can lead to unintended outreach, contact-data modification, or operational disruption because the commands appear as routine examples alongside read-only operations.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding

An unpinned npx reply-cli invocation allows mutable third-party code to be fetched and executed each time the skill is used. In this context, that code could exfiltrate REPLY_API_KEY, read command inputs, or make unauthorized campaign changes through the Reply.io API.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding

Using npx reply-cli without version pinning exposes the environment to npm supply-chain compromise. Even though this example is a stats command, the fetched code runs before the intended CLI action and can access environment variables and network egress.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding

This unpinned npx example creates the same supply-chain risk as the other occurrences: arbitrary package code may run with access to Reply.io credentials. Because contact-related commands often involve customer data, compromise could also expose personal information in addition to account access.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding

The command executes a mutable npm package via npx, enabling remote code execution if the package source is compromised. In the skill's context, that code could harvest contact data and the API key or issue unauthorized Reply.io operations.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding

This npx reply-cli invocation is unpinned and is used for a state-changing operation that adds a contact to a sequence. A malicious or replaced package could not only run arbitrary code but also abuse the authenticated Reply.io session to alter outreach activity at scale.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding

Running npx reply-cli unpinned for a create-and-enroll action combines supply-chain execution risk with an operation that can directly affect customer outreach. If upstream code is compromised, it could silently create contacts, enroll them in campaigns, or exfiltrate contact metadata and credentials.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding

This example uses unpinned npx for a removal action, so package compromise could lead to arbitrary code execution and unauthorized changes to campaign membership. The risk is amplified by the presence of REPLY_API_KEY, which grants API access once the package starts.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding

The skill instructs listing connected email accounts through an unpinned npx command, exposing the runtime to code from a mutable npm package. Compromised code could enumerate accounts, exfiltrate metadata, and steal the Reply.io API key before returning normal-looking output.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding

This npx reply-cli schedule-listing example still executes untrusted mutable package code prior to the intended action. The surrounding skill context includes privileged API access, making package compromise more dangerous than a normal local utility invocation.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding

The usage guideline broadly tells the agent to use npx reply-cli workflows but does not constrain versioning, reinforcing insecure execution practices throughout the skill. This increases the likelihood that any future use of the skill will run mutable third-party code with sensitive environment access.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding

This line's guidance relies on the same unpinned CLI ecosystem usage, preserving supply-chain risk in contexts where the agent parses returned data. Because the CLI runs with REPLY_API_KEY, a malicious update could tamper with output, steal credentials, or trigger hidden API actions.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding

The recommendation to use the CLI for performance and stats depends on the same unpinned npx execution model, which is unsafe in an authenticated automation context. Even read-oriented workflows can be abused because malicious package code executes before any legitimate command processing and can access secrets and outbound network connectivity.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding

Using npx reply-cli without a pinned package version allows npm to resolve and execute whatever version is current at runtime, and may even fetch code from the registry if the package is not already installed locally. In a credentialed CLI wrapper like this one, that creates a supply-chain execution risk: a compromised, typosquatted, or newly malicious package version could run arbitrary code and access the REPLY_API_KEY loaded by the script.

Content

No source excerpt is available for this finding.