Back to skill

Security audit

Reivo

Security checks for vulnerabilities and agentic risk

Overview

The skill is mostly aligned with Reivo cost management, but it can make authenticated budget, routing, and Slack settings changes through broad prompts without requiring confirmation.

Install only if you intend to route AI-provider traffic through Reivo and are comfortable sharing usage metadata with that service. Treat budget, routing mode, and Slack webhook changes as account-level actions; confirm exact values yourself before allowing the skill to run those commands, and prefer pinned versions for optional self-hosted guardrail installs.

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

Unpinned Third-Party Packages in Self-Hosting Instructions

Content
View full analysis

Vulnerability Details

File Location: SKILL.md:215-220, README.md:50-56
Vulnerability Type: Unpinned and externally mutable dependencies
Risk Level: Medium

Vulnerable Code

SKILL.md:215-220:

markdown
## Self-Hosted Guardrails

Want guardrails without the proxy? Use [reivo-guard](https://github.com/tazsat0512/reivo-guard) directly:

```bash
pip install reivo-guard    # Python
npm install reivo-guard    # TypeScript
text

`README.md:50-56`:

```markdown
## Self-Hosted Guardrails

The guardrail engine is open source:

```bash
pip install reivo-guard    # Python
npm install reivo-guard    # TypeScript
text

### Technical Analysis

These installation commands do not pin an exact package version or verify an artifact hash. Consequently, they install whichever release the Python or npm registry resolves at installation time. The reviewed project does not include the source or integrity metadata for those external artifacts.

Linking to a GitHub repository does not cryptographically establish that a registry package was built from the reviewed repository state. If the registry publisher account, package, build pipeline, or a future release is compromised, the effective code installed by these commands can differ from what was reviewed.

Depending on package format and package-manager behavior, installation may execute lifecycle or build scripts. Even where no installation script runs, malicious dependency code can execute when the installed library is subsequently imported or invoked.

This issue applies only when a user follows the optional self-hosting instructions. The audited package itself declares no runtime dependencies and contains no automatic package installation hook.

### Attack Path

1. An attacker compromises the publisher account, registry package, or release pipeline for `reivo-guard`.
2. The attacker publishes a malicious version under the legitimate package 
...[truncated 899 chars]
Remediation
View remediation

Remediation Suggestions

  1. Pin each dependency to an exact reviewed version:
    bash
    pip install reivo-guard==X.Y.Z
    npm install reivo-guard@X.Y.Z --save-exact
    
  2. Provide verified integrity information, such as Python package hashes and npm lockfile integrity values.
  3. For Python, distribute a requirements file using exact versions and hashes, then recommend:
    bash
    pip install --require-hashes -r requirements.txt
    
  4. For npm, commit a lockfile and recommend reproducible installation with npm ci.
  5. Document the authoritative registry publisher and package pages, and ensure registry releases are cryptographically tied to tagged source releases where possible.
  6. Recommend installation in an isolated virtual environment or container with minimal privileges and no unnecessary secrets.
  7. Where compatible with the package, advise disabling npm lifecycle scripts during initial inspection:
    bash
    npm install reivo-guard@X.Y.Z --save-exact --ignore-scripts
    
  8. Review and update the pinned versions deliberately rather than allowing installation commands to resolve mutable future releases automatically.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (15)

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

The declared description describes a full cost-management and proxy-routing system with monitoring and control features. The actual code chunk is limited to presentation logic for formatting report text. While formatting reports could be a small supporting part of such a system, this chunk by itself does not implement or demonstrate the core advertised capabilities. Therefore the supplied code does not accurately represent the declared purpose.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

There is a clear mismatch between the declared purpose and the actual code. The description describes an AI API proxy/cost-management tool, but the code does not implement any tracking, routing, budget controls, model integration, or loop detection. Instead, it contains a minimal placeholder for share image generation, which is unrelated to the declared functionality.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The declared description promises a cost-tracking proxy service with budget controls, loop detection, and cross-provider smart routing. The actual code chunk only contains unit tests for formatter output in formatter.js. It verifies presentation of request counts and dollar amounts in daily/monthly report strings, including rounding and newline behavior. This is only a narrow UI/report-formatting support component and does not demonstrate the primary claimed capabilities. Because the supplied code’s actual behavior is materially different from the declared purpose, this should be flagged as a mismatch.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
90% confidence
Finding

The skill requires environment access and network access but does not declare an explicit tool scope such as permissions or allowed-tools. That increases the chance the host agent will grant broader capabilities than intended, making external API calls with sensitive credentials without clear policy boundaries.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The skill encourages routing provider traffic through a third-party proxy, but the up-front disclosure is not prominent enough about what metadata and provider-bound requests are sent externally. Users may not fully understand that authenticated traffic, model usage metadata, and operational information leave the primary provider path and transit Reivo infrastructure.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

Broad trigger phrases like generic cost-related questions can cause the skill to activate during ordinary conversation and send authenticated requests to a third-party service unexpectedly. In this skill, accidental activation matters because it uses a secret API key and external network calls, so over-broad matching can leak usage metadata and create unintended stateful interactions.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
88% confidence
Finding

This skill performs authenticated external transmission of account data to app.reivo.dev using REIVO_API_KEY. External transmission is expected for the product’s purpose, but it is still security-relevant because it exposes spend, agent, and settings data to a third-party service and should be tightly scoped and transparently disclosed.

Content

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

When the user asks "how much am I spending?", "show costs", "cost report", or similar:

bash
curl -s -H "Authorization: Bearer $REIVO_API_KEY" \
  "https://app.reivo.dev/api/v1/overview?days=7"

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The phrase "am I safe?" is especially ambiguous and could match many unrelated safety questions, causing the skill to query defense-status endpoints without user intent to use Reivo. Because this skill touches account telemetry and budget state, ambiguous activation increases the risk of unauthorized external data access and misleading responses in unrelated contexts.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

Generic requests like "how can I save?" or "reduce costs" are common in many domains and may spur the skill to fetch optimization data from Reivo without clear authorization or relevance. Since that sends authenticated requests and may expose account-specific recommendations, the trigger breadth creates an avoidable external-data disclosure path.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

System-changing commands such as setting budgets are bound to vague phrases and provide no confirmation requirement before making state-changing POST requests. This can let a casual or ambiguous user message alter billing controls, potentially blocking future requests or weakening protections if the wrong limit is applied.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% 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 · commands/off.js (reported line 2)May include surrounding context.

js
console.log('To stop routing through Reivo, point your API calls back to the original provider URLs:');
console.log('  OpenAI:    https://api.openai.com/v1');
console.log('  Anthropic: https://api.anthropic.com/v1');
console.log('  Google:    https://generativelanguage.googleapis.com/v1beta');
console.log('');

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% 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 · commands/off.js (reported line 3)May include surrounding context.

js
console.log('To stop routing through Reivo, point your API calls back to the original provider URLs:');
console.log('  OpenAI:    https://api.openai.com/v1');
console.log('  Anthropic: https://api.anthropic.com/v1');
console.log('  Google:    https://generativelanguage.googleapis.com/v1beta');
console.log('');
console.log('Your Reivo API key and data are preserved — you can re-enable anytime.');

Rp1

Medium
Category
MCP Rug Pull
Confidence
91% confidence
Finding

The setup script instructs users to run npx clawhub@latest run reivo, which pulls and executes the latest published package version rather than a pinned, reviewed release. This creates a supply-chain risk: if the package is compromised or a malicious update is published, users may execute attacker-controlled code during setup.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
85% confidence
Finding

The markdown file lists slack <webhook-url> as a command, and the README also mentions managed Slack notifications, but it does not disclose what information may be sent to Slack or that this involves a third-party endpoint. Because this is a markdown file, missing user-facing warnings about privacy-affecting behavior are in scope.

Content

No source excerpt is available for this finding.

Vague Triggers

Low
Category
Not specified by scanner
Confidence
85% confidence
Finding

Slack setup is a sensitive configuration action, yet it is triggered by broad phrases and directly posts a webhook URL to the settings endpoint. If activated unintentionally or via prompt confusion, notifications could be redirected to an attacker-controlled Slack channel, leaking budget alerts and operational telemetry.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.