Back to skill

Security audit

SP3ND — Buy from Amazon & eBay with USDC

Security checks for vulnerabilities and agentic risk

Overview

This skill is transparently for real crypto-funded shopping, but its payment example and unpinned install steps need careful review before use.

Install and run this only in an isolated environment with pinned package versions, a least-funded wallet, protected API secrets, explicit user approval or spending limits, and audit logs. Before enabling payment, make sure your integration requires payment_ready true, pricing_status ready_for_payment for current orders, an unexpired quote, and any required shipping selection.

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:8
Finding
Unpinned Third-Party Package Execution and Dependency Installation## Vulnerability Details **File Location**: `README.md:6-10`, `README.md:37-40` **Vulnerability Type**: Supply-chain risk from mutable, unpinned dependencies **Risk Level**: Medium ### Vulnerable Code ```markdown ## Install ```bash npx skills add kent-x1/sp3nd-agent-skill ``` ``` ```markdown Install the example dependencies: ```bash npm install @solana/web3.js @solana/spl-token @solana/spl-memo dotenv ``` ``` ### Technical Analysis The documented `npx` command does not pin the `skills` package to a specific version or integrity hash. Depending on the local npm configuration and cache state, `npx` may download and execute the currently published version of that package. Its effective code can therefore differ from the version that was originally reviewed. The dependency installation command likewise omits exact versions. The audited project contains no `package.json`, lockfile, integrity metadata, or vendored dependency set that would make dependency resolution reproducible. Consequently, users following the documentation may install package versions published after this audit. This is an insecure dependency-management practice rather than evidence that any currently named package is malicious. Exploitation requires a package, publisher account, distribution channel, or relevant dependency to become compromised or to publish an unsafe update. The risk is amplified by the skill’s intended environment: it uses SP3ND API credentials and a funded Solana wallet. Dependency or installation-time code running in that environment could attempt to access those sensitive resources. ### Attack Path 1. An attacker compromises the publisher account, release process, or dependency chain of the unpinned `skills` package or one of the unpinned payment-example dependencies. 2. The attacker publishes a malicious version under the expected package name. 3. An operator follows the README and runs the unpinned `npx` or `npm ...[truncated 1397 chars]
Remediation
## Remediation Suggestions 1. Pin the executable package to a reviewed version instead of resolving the latest release: ```bash npx --yes skills@<reviewed-version> add kent-x1/sp3nd-agent-skill@<reviewed-commit-or-tag> ``` 2. Add a `package.json` containing exact dependency versions and commit the generated lockfile. Use `npm ci` for reproducible installation rather than an unconstrained `npm install`. 3. Review and commit the referenced `scripts/x402-pay-with-memo.mjs` implementation so its imports, wallet handling, transaction construction, and network destinations can be audited with the skill. 4. Verify package provenance and lockfile integrity in CI. Consider npm provenance attestations, trusted registries, dependency allowlists, and automated supply-chain scanning. 5. Disable dependency lifecycle scripts where they are not required: ```bash npm ci --ignore-scripts ``` If lifecycle scripts are necessary, review each script before enabling it. 6. Run installation and payment tooling under a dedicated, least-privileged operating-system account or isolated container. Do not expose unrelated credentials or files to that environment. 7. Keep the Solana wallet minimally funded, restrict wallet-file permissions, and inject SP3ND credentials only into the process that requires them. 8. Document the exact reviewed versions and hashes so operators can verify that installed artifacts match the audited release.
Vulnerability Patterns
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (5)

Missing User Warnings

Medium
Confidence
88% confidence
Finding
The README clearly describes creating orders and paying them with USDC on Solana, but it does not present an explicit user-facing warning that these actions spend real funds and may purchase physical goods with irreversible financial consequences. In a payment skill, that omission increases the risk of unintended purchases, especially when integrated into autonomous or semi-autonomous agents that may act on behalf of end users.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding
npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Intent-Code Divergence

Medium
Confidence
98% confidence
Finding
The example `assertPaymentReady` function treats `pricing_status === "quoted"` as payment-valid, even though the surrounding documentation explicitly says canonical readiness is `ready_for_payment` and that deprecated `quoted` metadata must never replace the readiness gate. In a payments skill, examples are likely to be copied directly into integrations, so this contradiction can cause clients to attempt payment against stale, legacy, or not-fully-ready quotes and bypass intended order-state safeguards.

Natural-Language Policy Violations

Medium
Confidence
97% confidence
Finding
This finding is substantively the same issue in the sample code: it accepts a deprecated `quoted` state as sufficient for payment validation. Because this skill handles real purchases and on-chain payment initiation, an incorrect state gate in reference code is security-relevant and can lead to premature payment attempts, inconsistent settlement behavior, or payment against outdated quotes.

Natural-Language Policy Violations

Medium
Confidence
83% confidence
Finding
The manifest describes payment specifically as 'with USDC on Solana' and the pay-order capability uses server-authoritative payment parameters, which imposes a fixed payment/network choice. The policy allows constraints when they are clearly justified; here the manifest does not present this as an explicit user opt-in or region/compliance limitation.

Static analysis

No suspicious patterns detected.