Back to skill

Security audit

Api3 Data Feed Explorer

Security checks for vulnerabilities and agentic risk

Overview

This skill coherently reads public Api3 feed data and public market prices, with no evidence of hidden credential access, persistence, or destructive behavior.

Install only in an environment where public outbound requests are acceptable. Be aware that queried feed names and asset pairs may be visible to Api3, RPC providers, and exchange APIs, and prefer pinned dependencies plus a lockfile for repeatable 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
package.json:6
Finding

Unpinned Runtime Dependency and Missing Lockfile

Content
View full analysis

Vulnerability Details

File Location: package.json, line 6
Vulnerability Type: Insecure third-party dependency management
Risk Level: Medium

Vulnerable Code

json
{
  "name": "api3-data-feed-explorer",
  "version": "1.0.0",
  "type": "module",
  "dependencies": {
    "@api3/dapi-management": "latest",
    "ethers": "^6.16.0"
  }
}

The project also contains no dependency lockfile.

Technical Analysis

The runtime dependency @api3/dapi-management uses the mutable latest version selector. Consequently, each installation may resolve to a different, previously unaudited package release. The lack of a lockfile further prevents reproducible dependency resolution and integrity verification across installations.

The scripts directly import and execute this dependency. It provides contract bindings, chain and RPC metadata, dAPI configuration, data-feed identifiers, and address-derivation functionality. Therefore, a future compromised or malicious release could execute code with the privileges of the user running the Skill, alter endpoint metadata, falsify displayed results, or redirect network requests.

This finding does not establish that the current published dependency is malicious. The vulnerability is the project's unsafe trust and update model.

Attack Path

  1. An attacker compromises the dependency publisher, registry account, package release process, or another component capable of publishing a new @api3/dapi-management version.
  2. The attacker publishes a malicious version selected by the latest tag.
  3. A user or Agent installs the Skill's dependencies without a frozen, reviewed lockfile.
  4. The package manager resolves @api3/dapi-management to the attacker-controlled release.
  5. Malicious installation hooks, module initialization logic, or exported functionality executes when installed or imported by the scripts.
  6. The payload runs with the local privileges and network access of the user or Agent process.

I

...[truncated 567 chars]

Remediation
View remediation

Remediation Suggestions

  1. Replace latest with a reviewed exact version, without range operators:
    json
    "@api3/dapi-management": "REVIEWED_EXACT_VERSION"
    
  2. Consider pinning ethers to an exact reviewed version as well to maximize reproducibility.
  3. Generate and commit the package-manager lockfile, including resolved versions and integrity hashes.
  4. Install dependencies using a frozen-lockfile mode in local automation and CI, such as:
    bash
    pnpm install --frozen-lockfile
    
  5. Configure dependency update automation to submit explicit, reviewable changes rather than silently consuming new releases.
  6. Review release provenance, package ownership, lifecycle scripts, transitive dependency changes, and integrity information before accepting upgrades.
  7. Run installation and scripts in a least-privileged sandbox with restricted filesystem access, no unnecessary secrets in the environment, and outbound network access limited to required public endpoints.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • 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 (14)

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

The code matches part of the description: it uses public Api3 metadata and signed API endpoints to list providers supporting a feed, identify which providers are included in the aggregation, and fetch latest provider values and timestamps. However, several central analytical capabilities in the declared description are absent. There is no computation of spreads or outliers across providers, no on-chain access or comparison to assess staleness, and no querying of exchange spot prices for verification. Thus the declared description materially overstates the implemented behavior, even though there are no suspicious undeclared side effects or extra permissions.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

The declared description promises broad Api3 dAPI/feed analysis functionality focused on feed health, providers, prices, deviations, and staleness. The supplied code chunk only enumerates supported chains from a library constant and outputs them to the console. That is a materially different primary purpose and does not implement the advertised analysis capabilities. While chain listing may be tangentially related to the Api3 ecosystem, it does not accurately represent the described skill behavior.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
94% confidence
Finding

The declared description promises a comprehensive analysis capability over Api3 data feeds, including multiple health and verification functions. The supplied code chunk performs only a narrow listing task: enumerating active dAPIs by name. While listing available dAPIs is loosely related to Api3 feed exploration, it does not implement the main described behaviors. This is therefore a material description-to-behavior mismatch due to a substantially different and much narrower actual purpose.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
94% confidence
Finding

The declared description presents a broad feed-analysis capability suite, but the supplied code only performs a narrow on-chain read of a single Api3 feed's latest value and timestamp. It does not implement provider coverage analysis, aggregation inspection, multi-provider comparison, staleness analysis, or external price verification. While fetching a latest price is one subset of the description, the actual code's primary purpose is much narrower than the declared behavior, so this is a material description-to-behavior mismatch.

Content

No source excerpt is available for this finding.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
Run `explore-data-feeds.ts` for the requested feed(s). The "Providers that support this feed" list in the output are the ones supporting that feed. To answer "w

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
Run `explore-data-feeds.ts` for the requested feed(s). The "Providers that support this feed" list in the output are the ones supporting that feed. To answer "w

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
Run `explore-data-feeds.ts` for the requested feed(s). The "Providers that support this feed" list in the output are the ones supporting that feed. To answer "w

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
Run `explore-data-feeds.ts` for the requested feed(s). The "Providers that support this feed" list in the output are the ones supporting that feed. To answer "w

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
84% confidence
Finding

The skill requires network-capable scripts and public RPC/API access, but the manifest does not declare any explicit tool scope or allowed-tools boundaries. This increases the risk of over-broad execution in environments that rely on manifest-level permissions, making unintended network access harder to audit and constrain.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
78% confidence
Finding

The skill instructs outbound requests to third-party exchange APIs, which transmits user-selected asset interests and query metadata to external services. In an agent environment, this can leak usage patterns, trigger compliance concerns, and expose execution to unvetted external dependencies even if no secrets are sent.

Content

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

md
1. Compute the off-chain median from the script output.
2. Fetch spot prices for the same pair from public exchange APIs (no keys required), e.g.:
   - Binance: `https://api.binance.com/api/v3/ticker/price?symbol=BTCUSDT`
   - Coinbase: `https://api.coinbase.com/v2/prices/BTC-USD/spot`
   - Kraken: `https://api.kraken.com/0/public/Ticker?pair=XBTUSD`
3. Compute the exchange composite as the median of fetched spot prices.

External Transmission

Medium
Category
Data Exfiltration
Confidence
78% confidence
Finding

Contacting Coinbase's public API is another instance of external data transmission to a third party without manifest-level scoping in the skill. Although the data is public, repeated outbound calls can disclose user intent and reduce control over privacy, reliability, and auditability.

Content

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

md
1. Compute the off-chain median from the script output.
2. Fetch spot prices for the same pair from public exchange APIs (no keys required), e.g.:
   - Binance: `https://api.binance.com/api/v3/ticker/price?symbol=BTCUSDT`
   - Coinbase: `https://api.coinbase.com/v2/prices/BTC-USD/spot`
   - Kraken: `https://api.kraken.com/0/public/Ticker?pair=XBTUSD`
3. Compute the exchange composite as the median of fetched spot prices.
4. Report: feed median, exchange composite, divergence percentage.

External Transmission

Medium
Category
Data Exfiltration
Confidence
78% confidence
Finding

Querying Kraken introduces the same external transmission risk profile as the other exchange calls: third-party visibility into request patterns and reliance on external infrastructure not constrained in the manifest. In this skill context the risk is moderate because the data is public and there is no sign of credential exfiltration, but the network flow should still be treated as sensitive behavior.

Content

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

md
2. Fetch spot prices for the same pair from public exchange APIs (no keys required), e.g.:
   - Binance: `https://api.binance.com/api/v3/ticker/price?symbol=BTCUSDT`
   - Coinbase: `https://api.coinbase.com/v2/prices/BTC-USD/spot`
   - Kraken: `https://api.kraken.com/0/public/Ticker?pair=XBTUSD`
3. Compute the exchange composite as the median of fetched spot prices.
4. Report: feed median, exchange composite, divergence percentage.
5. Flag divergence above 0.5% as notable, above 1% as significant.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
98% confidence
Finding

Using the version specifier "latest" makes builds non-reproducible and allows any newly published upstream release to be pulled in automatically. If the dependency is compromised, publishes a breaking change, or introduces malicious code, the skill could execute unreviewed code during install or runtime, which is especially relevant for a package that queries external blockchain/data-feed infrastructure.

Content

Scanner excerpt · package.json (reported line 6)May include surrounding context.

json
"version": "1.0.0",
  "type": "module",
  "dependencies": {
    "@api3/dapi-management": "latest",
    "ethers": "^6.16.0"
  }
}

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
87% confidence
Finding

The caret range ^6.16.0 permits automatic adoption of future compatible minor and patch releases, which reduces build reproducibility and slightly increases supply-chain risk. While this is less risky than using "latest," a bad upstream release or account compromise could still affect installations without an explicit review step.

Content

Scanner excerpt · package.json (reported line 7)May include surrounding context.

json
"type": "module",
  "dependencies": {
    "@api3/dapi-management": "latest",
    "ethers": "^6.16.0"
  }
}

Static analysis

No suspicious patterns detected.