Back to skill

Security audit

options-payoff-calculator

Security checks across malware telemetry and agentic risk

Overview

This looks like a legitimate read-only options calculator, but its credential handling creates review-worthy risk around where the API key can be sent.

Review the credential path before installing. Prefer the bundled zero-dependency script, avoid setting SENTISENSE_BASE_URL unless you intentionally trust that endpoint, and avoid the optional npx/auth flow unless you are comfortable running and storing credentials through the external CLI package.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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
Findings (2)

T09 · Insecure Skill Coding Practices

Error
Location
scripts/prepare_data.mjs:23
Finding
Environment-Controlled API Destination Can Receive the SentiSense API Key## Vulnerability Details **File Location**: `scripts/prepare_data.mjs`, lines 23 and 73–77 **Vulnerability Type**: Credential disclosure through an insufficiently restricted network destination **Risk Level**: High ### Vulnerable Code ```js const BASE = process.env.SENTISENSE_BASE_URL || "https://app.sentisense.ai"; const KEY = process.env.SENTISENSE_API_KEY; ``` ```js response = await fetch(`${BASE}${path}`, { headers: { "X-SentiSense-API-Key": KEY, Accept: "application/json", "User-Agent": UA }, }); ``` ### Technical Analysis The script allows `SENTISENSE_BASE_URL` to override the API origin. Every request to that origin unconditionally includes the secret `SENTISENSE_API_KEY` in the `X-SentiSense-API-Key` header. The override is not validated to require HTTPS or restrict the hostname to `app.sentisense.ai`. Consequently, a process environment controlled or influenced by another component can redirect the credential to an arbitrary HTTP or HTTPS server. The declared functionality requires only the official SentiSense API, so forwarding the credential to an unrestricted destination exceeds the minimum network privileges necessary. An attacker-controlled endpoint can also return fabricated quote, volatility, and earnings responses. Those values may be incorporated into the generated payoff artifact, creating an integrity risk in addition to credential disclosure. ### Attack Path 1. An attacker or compromised launcher influences the environment used to execute the Skill. 2. The attacker sets `SENTISENSE_BASE_URL` to an endpoint they control, such as `https://attacker.example`. 3. The user invokes the documented command with a valid `SENTISENSE_API_KEY`. 4. `prepare_data.mjs` constructs requests using the attacker-controlled base URL. 5. The script sends the API key to that server in the `X-SentiSense-API-Key` header. 6. The attacker records the credential and can return structurally valid but manipulated ...[truncated 678 chars]
Remediation
## Remediation Suggestions - Remove `SENTISENSE_BASE_URL` support if alternate servers are not required. - Otherwise, parse the configured destination with `new URL()` and enforce: - `protocol === "https:"` - `hostname === "app.sentisense.ai"` - the expected port and base pathname - no embedded username or password - Construct request URLs relative to a fixed, trusted origin rather than concatenating strings. - Attach the API-key header only after confirming that the final URL uses the approved origin. - Reject redirects to unapproved origins, or use `redirect: "manual"` and validate every redirect target before following it with credentials. - Add automated tests proving that HTTP destinations, lookalike domains, user-info tricks, alternate ports, and cross-origin redirects cannot receive the key. - Document any legitimate custom-server feature explicitly and require a separate, scoped credential for it.

T08 · Insecure Dependencies

Warning
Location
SKILL.md:117
Finding
Documentation Encourages Execution of External npm Code with Credential Access## Vulnerability Details **File Location**: `SKILL.md`, lines 117–122 **Vulnerability Type**: Third-party supply-chain exposure involving a sensitive API credential **Risk Level**: Medium ### Vulnerable Code ```bash npx -y sentisense@0.52.0 options NVDA --json npx -y sentisense@0.52.0 quote NVDA --json npx -y sentisense@0.52.0 earnings --json # forward calendar ``` ```md `--json` returns the exact API response, envelope included. Auth: `SENTISENSE_API_KEY` in the environment, or store it once with `npx -y sentisense@0.52.0 auth "$SENTISENSE_API_KEY"` (saved to `~/.config/sentisense/`, file mode 600, local to your machine, removable with `auth --remove`). The version is pinned deliberately: a pinned version runs reviewed, immutable code. ``` ### Technical Analysis The documentation recommends `npx -y`, which can download and execute package-registry code that is not included in this project and therefore was not covered by this source audit. The commands run in an environment where `SENTISENSE_API_KEY` may be available. The authentication example additionally passes the key directly as a command-line argument and instructs the external package to persist it in the user’s home directory. Version pinning reduces unintended upgrades but does not establish that the external package is safe or immutable. Registry compromise, publisher-account compromise, republishing risks, compromised transitive dependencies, or malicious package lifecycle behavior remain outside the reviewed Skill package. Passing the key as a command-line argument can also expose it temporarily through process inspection, shell tracing, terminal logging, or command history, depending on the host environment. This path is optional because the repository already contains a zero-dependency script capable of performing the declared workflow. Therefore, downloading and executing an external package with credential access expands the trust and privilege ...[truncated 1342 chars]
Remediation
## Remediation Suggestions - Prefer and document the bundled zero-dependency `scripts/prepare_data.mjs` workflow as the sole default. - Remove the `npx` alternative unless the external CLI is necessary. - If the CLI must remain available: - vendor the reviewed CLI implementation into the Skill; - publish and verify package integrity hashes; - document the exact package provenance and audit process; - review transitive dependencies and package lifecycle scripts; - use a trusted, locked registry configuration. - Do not pass secrets through command-line arguments. Accept the key through a protected file descriptor, secure prompt, or narrowly scoped environment variable. - Avoid persistent credential storage unless explicitly requested by the user. - If persistence is required, use operating-system credential storage where available, maintain restrictive permissions, and provide clear rotation and deletion procedures. - Run optional third-party tooling in a sandbox with restricted filesystem and network access and only the minimum environment variables needed for the operation.

SkillSpector

By NVIDIA
Vulnerability Patterns
  • 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
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (2)

Intent-Code Divergence

Medium
Confidence
97% confidence
Finding
The bear put spread description says 'Buy a put, sell a lower one,' but the implemented legs do the opposite: short the lower-strike put and long the higher-strike put. That mismatch can mislead users about payoff shape, risk, and expected behavior, which is especially important in a financial calculator where users may rely on the displayed strategy label and explanation.

Description-Behavior Mismatch

High
Confidence
98% confidence
Finding
The skill advertises support for a bear put spread, but the implementation does not match the claimed supported strategy. In a read-only options calculator, integrity of financial computations is the core security property: a mislabeled or incorrectly modeled strategy can cause users to make materially wrong risk decisions based on false payoff, breakeven, and max loss/profit outputs.

VirusTotal

VirusTotal findings are pending for this skill version.

View on VirusTotal

Static analysis

Detected: suspicious.env_credential_access

Environment variable access combined with network send.

Critical
Code
suspicious.env_credential_access
Location
scripts/prepare_data.mjs:23