Back to skill

Security audit

market-heatmap

Security checks for vulnerabilities and agentic risk

Overview

The skill creates a local market chart using disclosed API authentication, with no hidden data collection or background activity found.

Supply a SentiSense API key and choose an output path you are comfortable overwriting on refresh. The optional agent name is sent to the provider. In-memory checks confirmed destination restrictions, redirect blocking, output escaping, and offline HTML generation; the live service and optional sibling skills were not tested. Check size warnings before displaying inline.

Vulnerability Patterns
  • 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
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
Vulnerability Patterns
  • Taint TrackingDirect Taint Flow, Variable-Mediated Taint Flow, Credential Exfiltration Chain
  • 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
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
Findings (4)

Tainted flow: 'req' from os.environ.get (line 222, credential/environment) → urllib.request.build_opener.open (network output)

Critical
Category
Data Flow
Confidence
90% confidence
Finding

Credentials or environment variables flow to a network sink. This is a high-confidence indicator of credential exfiltration.

Content

Scanner excerpt · scripts/heatmap.py (reported line 228)May include surrounding context.

python
"Accept": "application/json",
    })
    try:
        with urllib.request.build_opener(NoRedirect).open(req, timeout=timeout) as resp:
            return json.loads(resp.read().decode("utf-8"))
    except urllib.error.HTTPError as exc:
        body = ""

Incomplete referenced artifact analysis

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
API. Used by the tests, and by anyone who wants to see the layout with no key: `scripts/fixtures/market-heatmap.nasdaq100.sample.json` is a Nasdaq-100 board on

Skill declares no tool scope ('permissions' or 'allowed-tools') but code capabilities were detected: env, file_read, file_write, network.

Medium
Category
MCP Least Privilege
Confidence
70% confidence
Finding

Without declared permissions the skill's intent is opaque and cannot be validated.

Content

No source excerpt is available for this finding.

The script reports success for oversized pages despite explicitly documenting that it refuses success when an inline host cannot display the file.

Low
Category
Excessive Agency
Confidence
99% confidence
Finding

The comment at L0040–L0041 promises that the script refuses to claim success for files exceeding the inline-display ceiling. However, L1642–L1647 only emit a warning, and execution subsequently returns success at L1659 or L1668, so callers relying on that documented guarantee can treat a non-inline-compatible artifact as successful.

Content

No source excerpt is available for this finding.