Back to skill

Security audit

大虾皮股市工具集

Security checks for vulnerabilities and agentic risk

Overview

The skill is a coherent A-share market data helper, but it tells users to run mutable npm code with API credentials and handles tokens in ways that could expose them.

Review this skill before installing. Use a pinned and trusted `daxiapi-cli` version instead of `@latest`, avoid pasting real tokens into command lines or chats, assume token-check output may be logged, and treat all market or stock guidance as informational rather than financial advice.

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

T08 · Insecure Dependencies

Error
Location
SKILL.md:260
Finding
Unpinned npm Package Execution with Access to API Credentials<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md:260-285` **Vulnerability Type**: Runtime execution of a mutable third-party dependency **Risk Level**: High ### Vulnerable Code ```markdown **步骤 3.1:检查Token配置状态** ```bash npx daxiapi-cli@latest config get token ``` **步骤 3.2:如未配置,获取Token** 1. 提示用户访问 [daxiapi.com](https://daxiapi.com) 个人主页 2. 开通API Token功能 3. 获取生成的Token **步骤 3.3:配置Token** ```bash # 方式一:通过CLI配置(推荐) npx daxiapi-cli@latest config set token YOUR_TOKEN_FROM_DAXIAPI # 方式二:设置环境变量 export DAXIAPI_TOKEN=YOUR_TOKEN_FROM_DAXIAPI ``` **步骤 3.4:验证配置** ```bash npx daxiapi-cli@latest market ``` ``` The same unsafe package selector is also used at `SKILL.md:349-350` and `references/field-descriptions.md:168-174`. ### Technical Analysis The Skill instructs the agent or user to execute `daxiapi-cli@latest` through `npx`. Unless already available locally, `npx` may retrieve the selected package from the npm registry and immediately execute its code. The `@latest` selector is mutable and provides no guarantee that the package executed in the future is the version that was reviewed. The package is also given direct access to the DaxiAPI credential. It receives the token through the `config set token` argument or can inherit `DAXIAPI_TOKEN` from the process environment. A compromised publisher account, malicious future release, or npm ecosystem compromise could therefore convert this documented workflow into arbitrary code execution with the invoking process's privileges and credential access. This is a supply-chain vulnerability rather than evidence that the current package is malicious. No version, lockfile, checksum, or integrity constraint is provided by the Skill. ### Attack Path 1. An attacker compromises the npm publisher account, package distribution channel, or a future release of `daxiapi-cli`. 2. The attacker publishes a malicious version and makes it the package's `latest` release. 3. An agent or user follows the Skill and runs ` ...[truncated 1026 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Replace `@latest` with an exact, reviewed version: ```bash npx --yes daxiapi-cli@X.Y.Z ... ``` 2. Pin dependency integrity through a committed lockfile and verify the package's registry integrity hash. 3. Prefer a preinstalled, approved binary over downloading executable code during every Skill invocation. 4. Verify the npm package name, publisher identity, provenance attestations, and release signatures where available. 5. Execute the CLI in a restricted environment with: - Access only to the required DaxiAPI host. - No access to unrelated environment variables. - Minimal filesystem permissions. - No access to SSH keys, cloud credentials, or unrelated configuration files. 6. Pass credentials only to operations that require authentication. Avoid broadly exporting the token into an environment inherited by child processes. 7. Establish an update-review process so a new package version is tested and audited before changing the pinned version. ]]>

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:252
Finding
Plaintext API Token Disclosure Through Configuration Inspection<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md:252-263` **Vulnerability Type**: Sensitive credential exposure in command output **Risk Level**: Medium ### Vulnerable Code ```markdown ### Step 3: Token 配置检查(可选) **触发条件**:用户首次使用或提示认证失败 **跳过条件**:Token已配置且有效 **执行步骤**: **步骤 3.1:检查Token配置状态** ```bash npx daxiapi-cli@latest config get token ``` ``` A broader configuration command that may reveal the token is also documented at `SKILL.md:127-131`: ```markdown | `config set <key> <value>` | 设置配置项 | `daxiapi config set token YOUR_TOKEN` | | `config get` | 查看所有配置 | `daxiapi config get` | | `config delete <key>` | 删除配置项 | `daxiapi config delete token` | ``` The token-specific inspection command is repeated at `SKILL.md:341-350`. ### Technical Analysis The documented authentication check retrieves the token value rather than checking whether a valid token exists. If the CLI prints the configured value, the secret becomes part of standard output. Agent command output may be captured in conversation history, build logs, shell transcripts, debugging records, telemetry, or execution traces. Consequently, a token that was initially protected in configuration can be exposed to systems and users that only have access to logs. The Skill does not need the plaintext token to determine whether authentication is configured. A masked status or an authenticated health check would satisfy the declared functionality with less exposure. ### Attack Path 1. A user has previously configured a valid DaxiAPI token. 2. The Skill follows its token-check workflow and runs `config get token` or the broader `config get`. 3. The CLI prints the token in plaintext. 4. The agent platform, terminal logger, CI system, or monitoring service stores the output. 5. An attacker or unauthorized operator with access to those records retrieves the token. 6. The attacker reuses it against the authenticated DaxiAPI service until the token expires or is revoked. ### Impact Assessment ...[truncated 464 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Replace plaintext retrieval with a non-secret status command, for example: ```bash daxiapi config status ``` 2. Change the CLI so all configuration-listing commands redact secret values by default: ```text token: ************a1b2 ``` 3. Validate authentication with a minimal API health check rather than reading the stored credential. 4. Require a separate, explicit option before revealing any secret, and do not invoke such an option from an agent workflow. 5. Prevent token values from appearing in application logs, shell tracing, telemetry, or error messages. 6. Store the token in an operating-system credential manager or another protected secret store with restrictive access permissions. 7. Rotate any token that has already appeared in persistent command output or conversation logs. ]]>

T09 · Insecure Skill Coding Practices

Note
Location
references/api-reference.md:1029
Finding
Hardcoded Third-Party API Tokens Embedded in Request URLs<![CDATA[ ## Vulnerability Details **File Location**: `references/api-reference.md:1029-1043` **Vulnerability Type**: Hardcoded credentials in URL query parameters **Risk Level**: Low ### Vulnerable Code ```markdown **接口地址:** `GET https://push2.eastmoney.com/api/qt/ulist/get` **功能说明:** 获取多个指数的实时行情数据,包括价格、涨跌幅、涨跌家数等信息。 **请求参数:** | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | fields | string | 是 | 返回字段列表,逗号分隔 | | secids | string | 是 | 证券代码列表,格式: 市场.代码,逗号分隔 | | ut | string | 是 | 用户token | **请求示例:** ```bash curl 'https://push2.eastmoney.com/api/qt/ulist/get?fltt=1&invt=2&fields=f12,f13,f14,f1,f2,f4,f3,f152,f6,f104,f105,f106&secids=1.000001,0.399001&ut=fa5fd1943c7b386f172d6893dbfba10b&pn=1&np=1&pz=20&dect=1&wbp2u=|0|0|0|0|web' ``` ``` Additional concrete `ut` values appear in URL examples at: - `references/api-reference.md:1079` - `references/api-reference.md:1102` - `references/api-reference.md:1116` - `references/api-reference.md:1130` ### Technical Analysis The documentation identifies `ut` as a user token but includes concrete token-like values in distributed request examples. Placing credentials in query strings is unsafe because complete URLs are commonly retained in shell history, proxy logs, server access logs, monitoring tools, browser history, and copied documentation. Because these values are already embedded in the publicly distributed Skill files, they should be treated as exposed if they grant any non-public access. The audit cannot establish from the files alone whether they are private account credentials, public client identifiers, or low-privilege vendor constants; therefore, the finding is rated Low rather than assuming privileged access. ### Attack Path 1. An attacker obtains the Skill package or reads its API reference. 2. The attacker extracts a concrete `ut` value from a documented URL. 3. The attacker submits requests to the corresponding Eastmoney endpoint with that value. 4. If the token remains valid and carries privil ...[truncated 699 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Replace all concrete third-party token values with unambiguous placeholders: ```bash curl "https://push2.eastmoney.com/api/qt/ulist/get?...&ut=${EASTMONEY_TOKEN}" ``` 2. Rotate or revoke the embedded values if they correspond to non-public credentials. 3. Load tokens from a protected secret store or environment variable rather than committing them to documentation. 4. Prefer an authorization header over a query parameter where the third-party API supports it. 5. If the API requires query-string authentication, ensure clients redact query parameters from logs, diagnostics, telemetry, and error reports. 6. Clearly document whether the vendor value is a public client constant or a private user credential to prevent unsafe copying and reuse. 7. Add secret-scanning checks to the publication pipeline to detect token-like values before future Skill releases. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
Findings (13)

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding
npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding
npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding
npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding
npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding
npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Missing User Warnings

Medium
Confidence
90% confidence
Finding
The skill provides step-by-step token acquisition and configuration instructions, including placing the secret directly on the command line and in environment variables, but it does not warn that the token is sensitive. In practice, this can lead users to expose credentials through shell history, screenshots, logs, terminal sharing, or accidental paste into chats, which is especially relevant because the skill centers on authenticated financial-data access.

Missing User Warnings

Medium
Confidence
92% confidence
Finding
The document provides explicit valuation-temperature thresholds and corresponding actions such as increasing fixed investment or considering profit-taking, which amounts to actionable investment guidance. Without a clear disclaimer that outputs are informational only and not financial advice, downstream agents may present these thresholds as recommendations, increasing the risk of unsuitable or harmful financial decisions.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The usage scenarios explicitly frame the API as supporting stock selection, DCA timing,涨跌停 analysis, and technical-pattern screening, all of which can directly influence trading behavior. In the context of an agent skill that routes user requests into specialized market-analysis tools, the absence of a matching risk warning makes it more likely that users receive operational investment suggestions without appropriate caution.

Rp1

Medium
Category
MCP Rug Pull
Confidence
94% confidence
Finding
The documentation instructs users to run `npx daxiapi-cli@latest`, which fetches and executes the latest published package version at runtime. This creates a supply-chain risk: a compromised publisher account, malicious release, or breaking update could cause arbitrary code execution on the user's machine when they follow the example.

Rp1

Medium
Category
MCP Rug Pull
Confidence
94% confidence
Finding
This example again uses `npx daxiapi-cli@latest`, causing execution of whatever version is current in the registry at the time the command is run. In an agent skill or documentation context, copy-pasteable unpinned execution commands materially increase the chance of users running unreviewed or malicious code.

Rp1

Medium
Category
MCP Rug Pull
Confidence
94% confidence
Finding
The command example on this line also relies on `npx` with `@latest`, exposing users to registry-side package substitution or malicious future updates. Because the file is intended as a reference guide, these examples may be routinely reused, amplifying the operational risk of unpinned remote code execution.

Natural-Language Policy Violations

Low
Confidence
97% confidence
Finding
All headings, field descriptions, guidance, and examples are presented in Chinese, and the file does not indicate that the skill is China-only or otherwise intentionally restricted to Chinese-language users. Per the policy, forcing a specific language without user opt-in or documented justification is a natural-language policy concern.

Natural-Language Policy Violations

Low
Confidence
95% confidence
Finding
SQP-3 applies to all file types and covers language or locale policy violations. This file presents all user-facing instructions and field descriptions only in Chinese, with no indication that the user can opt into another language or that the skill is intentionally region-specific.

Static analysis

No suspicious patterns detected.