Back to skill

Security audit

Exchange Rate

Security checks for vulnerabilities and agentic risk

Overview

This skill is a straightforward exchange-rate lookup tool that sends currency queries to QVeris using a disclosed API key, with no evidence of hidden local access or persistence.

Install from a verified source, prefer copying the reviewed skill folder or pinning the installer instead of running an unpinned npx command, and only set QVERIS_API_KEY if you are comfortable sending currency pair, amount, and optional date data to QVeris. Do not treat returned rates as financial or contractual advice.

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
README.md:23
Finding

Unpinned Third-Party Package Execution in Installation Instructions

Content
View full analysis
--skill exchange-rate ``` ### Technical Analysis The documented installation command invokes `npx` without pinning the `skills` package to a reviewed version. Depending on the local npm configuration and cache state, `npx` can retrieve the package from the configured npm registry and immediately execute its command-line code. Because neither an exact version nor an integrity value is specified, the code executed during installation can change after this project has been reviewed. Compromise of the package, its publisher account, the configured registry, or an upstream dependency could therefore introduce malicious code into the installation process. This issue is in the installation guidance rather than the skill's runtime script. The audited `scripts/exchange_rate.mjs` file does not install packages or execute local subprocesses. ### Attack Path 1. An attacker compromises the publisher account, package, dependency chain, or registry source used to resolve the unpinned `skills` package. 2. The attacker publishes or serves a malicious package version containing hostile CLI or lifecycle behavior. 3. A user follows the README and runs: ```bash npx skills add --skill exchange-rate ``` 4. `npx` resolves and downloads the mutable package version from the configured registry. 5. The malicious package code executes with the privileges of the user running the installation command. 6. That code can access resources available to the user, such as project files, environment variables, developer credentials, and writable configuration locations. ### Impact Assessment Successful exploitation provides arbitrary code execution in the installing user's security context. The resulting scope depends on that user's privi ...[truncated 601 chars]
Remediation
View remediation
add --skill exchange-rate ``` Replace the placeholder with a verified immutable version rather than a range or distribution tag. 2. Document the package's official publisher and registry source so users can verify that resolution occurs from the intended namespace. 3. Where supported, verify package provenance and integrity before execution. Prefer lockfiles, registry provenance attestations, checksums, or an equivalent reproducible installation mechanism. 4. Review the pinned package version and its dependency tree before recommending it. 5. Present the non-executing manual installation method as the preferred alternative: - Download or clone a verified project revision. - Verify its commit or release checksum. - Copy the reviewed `exchange-rate` directory into the agent's skill directory. 6. Warn users not to run installation commands with elevated privileges and to avoid registries or npm configurations they do not trust. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (9)

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
Primary script: `scripts/exchange_rate.mjs`

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
Primary script: `scripts/exchange_rate.mjs`

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
Primary script: `scripts/exchange_rate.mjs`

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
Primary script: `scripts/exchange_rate.mjs`

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
Primary script: `scripts/exchange_rate.mjs`

Rp1

Medium
Category
MCP Rug Pull
Confidence
86% confidence
Finding

The README instructs users to install the skill via npx skills add <repo-url> --skill exchange-rate without pinning the version of the skills package. Because npx resolves and executes the latest matching package at install time, a compromised or malicious upstream package update could result in arbitrary code execution on the user's machine during installation.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
88% confidence
Finding

The skill declares environment-variable and network capabilities but does not explicitly constrain tool scope with a permissions or allowed-tools policy. That creates an authorization gap where an agent runtime may permit broader-than-intended tool use or secret access, increasing the chance of unintended outbound actions or misuse of the declared API credential.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
81% confidence
Finding

The code reads QVERIS_API_KEY from the environment to authenticate outbound API calls. Although this is normal for API clients, there is no user-facing note in the help or comments warning operators that the skill depends on a sensitive credential and will use it for external requests.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
91% confidence
Finding

This code posts search queries to the external QVeris API, and later executes selected tools using user-provided parameters such as currencies, amount, and optional date. While the script purpose is exchange-rate lookup, the help text and runtime messaging do not explicitly disclose that user inputs are transmitted to a third-party service.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.