Back to skill

Security audit

DSCVR Intelligence Skill

Security checks for vulnerabilities and agentic risk

Overview

This is a coherent DSCVR API client with disclosed credential and network use, but users should keep its endpoint configuration tightly controlled.

Install only if you intend to use DSCVR's external API with your own DSCVR subscription credentials. Keep DSCVR_API_BASE_URL unset or set only to the official HTTPS DSCVR service, treat GraphQL queries and wallet or username lookups as data sent to DSCVR, and avoid submitting sensitive internal research unless that external disclosure is acceptable.

Vulnerability Patterns
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • 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)

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/dscvr_api.py:62
Finding

Authenticated requests can be redirected to an arbitrary network destination

Content
View full analysis
Any: """Make an authenticated GET request to the DSCVR API.""" url = f"{base_url}{path}" if params: params = {k: v for k, v in params.items() if v is not None} try: with httpx.Client(timeout=90.0) as client: response = client.get(url, headers=headers, params=params) ``` Authenticated POST requests have the same behavior: ```python def api_post(base_url: str, path: str, headers: dict[str, str], body: dict[str, Any] | None = None) -> Any: """Make an authenticated POST request to the DSCVR API.""" url = f"{base_url}{path}" if body: body = {k: v for k, v in body.items() if v is not None} try: with httpx.Client(timeout=90.0) as client: response = client.post(url, headers={**headers, "Content-Type": "application/json"}, json=body or {}) ``` The corresponding signature is not bound to the request method, destination, path, query parameters, or body: ```python def compute_signature(secret_key: str, api_key: str, timestamp: str) -> str: message = f"{api_key}:{timestamp}".encode() return hmac.new(secret_key.encode(), message, hashlib.sha256).hexdigest() ``` ### Technical Analysis The Skill needs network access and authenticated DSCVR requests for its declared functionality. Sending an AP ...[truncated 3086 chars]
Remediation
View remediation
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 (7)

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The description presents the skill as a full-featured DSCVR intelligence data retrieval tool covering numerous API domains. However, the actual code chunk is limited to a supporting authentication utility that generates HMAC-SHA256 headers. While the description briefly mentions automatic authenticated API calls, the code does not implement the main declared behaviors of fetching or querying any DSCVR data. This is a material description-behavior mismatch in primary purpose and implemented capabilities.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The README explicitly states that API calls are authenticated via HMAC-SHA256 signing, but it does not warn users that the skill will send prompts, query parameters, and authentication-derived request data to DSCVR-controlled external services. In an agent-skill context, this omission can cause users or operators to invoke the skill with sensitive market research, wallet identifiers, or internal investigation data without informed consent about external transmission.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
93% confidence
Finding

The skill declares capabilities that involve environment-variable access and outbound network access, but it does not constrain them with an explicit permission or allowed-tools scope. In an agent setting, missing scope boundaries increases the chance of overbroad execution, unintended credential use, or external data exfiltration beyond what users reasonably expect.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The invocation guidance is broad enough to trigger on many generic crypto, market, social, or GraphQL-related requests, which can cause the agent to route user input and identifiers to this external integration more often than necessary. Overbroad matching raises the risk of unnecessary third-party disclosure, unintended API usage, and credential-backed calls on prompts that did not clearly require DSCVR.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The Social GraphQL feature sends arbitrary query text and identifiers such as usernames, portal slugs, or content IDs to an external DSCVR service, but the skill text does not clearly warn users of that transmission. This creates a privacy and consent problem because users may unknowingly provide personal or sensitive identifiers that are forwarded off-platform.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The client sends user-supplied parameters and GraphQL query data to an external DSCVR service using authenticated requests, but provides no explicit user-facing notice or consent checkpoint before transmission. In this skill context, that matters because users may assume local processing while sensitive search terms, identifiers, or social-graph queries are actually sent to a third-party API under the operator's credentials.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
82% confidence
Finding

This markdown file documents a Social GraphQL endpoint with queries that can look up users, usernames, content, and portals, but it does not include any warning about handling retrieved social data responsibly. Under the markdown-file criteria for missing user warnings, documentation should disclose behaviors that may affect privacy or user data when exposing such data-access capabilities.

Content

No source excerpt is available for this finding.