Back to skill

Security audit

Equal Data - China A Share Stock Data Service Skill

Security checks for vulnerabilities and agentic risk

Overview

The skill appears to be a read-only financial data integration, but it should be reviewed because it gives an external Python package the user's API key and has avoidable dependency, provenance, and activation-scope concerns.

Install only if you are comfortable giving EQUAL_DATA_API_KEY to the equal-data Python package and Equal Data service. Use a virtual environment, a narrowly scoped or low-value API key if available, avoid committing or logging the key, review the package provenance, and prefer updated dependencies with hash-locked installs before production use.

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

T08 · Insecure Dependencies

Warning
Location
skill.md:7
Finding

Unreviewed Third-Party Package Receives the API Credential

Content
View full analysis

Vulnerability Details

File Location: skill.md:7-9, skill.md:41, skill.md:58, skill.md:67-73, requirements.txt:1, reference/场景Agent/个股详情分析.md:25, and reference/场景Agent/高管增减持详细分析.md:25
Vulnerability Type: T08: Insecure Dependencies
Risk Level: Medium

Vulnerable Code

skill.md:7-9:

yaml
install_command: pip install 'equal-data==0.0.12'
required_env_vars:
  - EQUAL_DATA_API_KEY

skill.md:41 and skill.md:58:

bash
pip install equal-data==0.0.12

skill.md:67-73:

python
from equal_data import EqualDataApi 
import os

# Read API_KEY from the environment variable or a locally recorded API_KEY
API_KEY = os.getenv('EQUAL_DATA_API_KEY')

api = EqualDataApi(API_KEY)

data = api.query_equal_data(
    interfaceId="B6",

requirements.txt:1:

text
equal-data==0.0.12

reference/场景Agent/个股详情分析.md:25 and reference/场景Agent/高管增减持详细分析.md:25:

bash
pip install equal-data==0.0.12 -i https://pypi.tuna.tsinghua.edu.cn/simple

Technical Analysis

The audited artifact does not contain the implementation of the equal_data module. Instead, all functional behavior is delegated to the external equal-data==0.0.12 distribution. Installing a Python package may execute package-controlled build or installation logic, while importing and invoking it executes code that is outside the reviewed artifact.

The external package is also given EQUAL_DATA_API_KEY directly. Consequently, the security of the credential and all runtime behavior depends on an implementation that could not be inspected during this audit. Exact version pinning reduces unintended version changes but does not verify package integrity or provenance because no cryptographic hashes are provided.

Two scenario documents direct users to an alternate package index. Although the named mirror is not itself evidence of compromise, using additional distribution infrastructure ex ...[truncated 2101 chars]

Remediation
View remediation

Remediation Suggestions

  1. Publish or bundle the exact source corresponding to equal-data==0.0.12 so its installation, networking, and credential-handling behavior can be audited.
  2. Generate a locked dependency file containing SHA-256 hashes and require hash verification during installation, for example with pip install --require-hashes -r requirements.txt.
  3. Verify that the package name, PyPI publisher, source repository, release tag, and packaged source all correspond to the same maintainers and commit.
  4. Reconcile the conflicting repository URLs in metadata.json and skill.md, and document one authoritative source repository.
  5. Prefer the canonical package index. If an alternate mirror remains documented, explain its trust assumptions and require the same package hashes regardless of index.
  6. Document the precise API endpoint to which the credential is sent and confirm that TLS certificate verification is enforced.
  7. Run the dependency in a restricted environment with minimal filesystem access, a narrowly scoped API key, limited environment variables, and constrained outbound network access.
  8. Avoid storing the API key directly in shell startup files or plaintext configuration where possible. Use a dedicated secret manager or restricted configuration file and rotate the key if dependency integrity is ever in doubt.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (39)

Known Vulnerable Dependency: requests==2.28.1 — 8 advisory(ies): CVE-2024-47081 (Requests vulnerable to .netrc credentials leak via malicious URLs); CVE-2024-35195 (Requests `Session` object does not verify requests after making first request wi); CVE-2026-25645 (Requests has Insecure Temp File Reuse in its extract_zipped_paths() utility func) +5 more

High
Category
Supply Chain
Confidence
98% confidence
Finding

The file pins requests to version 2.28.1, which is reported by the supplied finding as having multiple known security advisories. Using a dependency with known CVEs is a real supply-chain risk because any code path that performs HTTP requests, follows redirects, handles sessions, or interacts with helper utilities may be exposed if the vulnerable behaviors are reachable.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The file is entirely written in Chinese and presents the skill interface and behavior only in that language, with no indication that users may choose another language or locale. Under the stated policy, forcing a specific language without opt-in is a natural-language policy violation.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

The entire skill description, examples, parameter documentation, and use cases are presented only in Chinese, with no indication that users may choose another language or locale. Under the stated policy, a skill that implicitly enforces a specific language without opt-in can be a natural-language policy violation unless the locale constraint is documented and justified.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The markdown describes returning management-layer personal and employment-related information such as names, positions, salaries, shareholdings, age, education, and work history, but provides no warning about privacy, sensitivity, or responsible handling of that data. For markdown files, SQP-2 applies when the skill description omits warnings about behaviors that could affect privacy or user data.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The file’s natural-language content, including the title, parameter descriptions, and usage example context, is entirely in Chinese. Under the policy, forcing a specific language without user opt-in can be a locale/language policy violation when no explicit justification or language choice is provided.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The skill explicitly enables querying a ranked list of identifiable 'top retail investors' with names, holdings value, win ratio, and profit estimates, but provides no privacy, consent, or acceptable-use warning. Even if sourced from market data, aggregating and exposing identifiable high-net-worth investor intelligence can facilitate profiling, surveillance, targeted scams, or misuse of sensitive financial behavior data.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The documentation leaves the accepted input semantics for hotMoneyName unclear, explicitly raising questions about aliases, abbreviated names, and seat/brokerage identifiers without defining matching behavior. In a financial-data skill, this ambiguity can cause the agent to issue incorrect queries, retrieve the wrong subject's market activity, or produce misleading analysis to users, which is a real security/reliability issue because it undermines data integrity and can influence decisions.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
82% confidence
Finding

The natural-language documentation and usage guidance are presented exclusively in Chinese, and the file does not indicate that the user can select another language or that the skill is intentionally restricted to a Chinese-speaking audience. This can violate language/locale policy when a skill forces a specific language without user opt-in.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The README instructs users to configure an API key and query remote financial data, but it does not clearly warn that requests and user-supplied stock/entity inputs will be sent to an external service. This can undermine user privacy expectations and lead to unintentional disclosure of proprietary research interests, watchlists, or sensitive prompts through network access.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The trigger set contains many broad financial terms that can match ordinary user conversations, increasing the chance of unintended skill activation. In this skill's context, accidental activation could cause unnecessary outbound API calls using the user's API key and expose prompts or queried entities to a remote service without deliberate user intent.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The documentation states the skill is 'only for obtaining market data', but the rest of the file describes much broader capabilities including news retrieval, screening, strategy data, shareholder analytics, and institutional tracking. This is a documentation-integrity issue that can mislead users and reviewers about the real scope of remote access and data processing, reducing informed consent and risk assessment accuracy.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
88% confidence
Finding

This markdown file presents the skill name, description, parameters, and examples only in Chinese. Under the policy rule for natural-language violations, forcing a specific language without user opt-in can be a locale-policy issue unless the regional constraint is explicitly documented and justified.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
83% confidence
Finding

The file's natural-language instructions, parameter descriptions, and examples are entirely in Chinese, and there is no indication that users can opt into another language or that the skill is intentionally limited to a Chinese-speaking audience. Under the stated policy, forcing a specific language without user opt-in can be a natural-language policy violation.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
84% confidence
Finding

This markdown file shows the user supplying an API key in code, but the description does not include any warning or guidance about credential sensitivity or safe handling. Under the markdown-file criteria for missing user warnings, credential-related behavior that may affect privacy should be disclosed.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
89% confidence
Finding

The example requires users to supply an API key but provides no warning that the credential is sensitive or guidance on secure handling. This can lead users to hardcode secrets in source files, notebooks, or logs, increasing the chance of accidental credential exposure; in this financial-data skill context, that could enable unauthorized API use and billing or data-access abuse.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
95% confidence
Finding

The file’s natural-language content, including the title, description, parameters, and examples, is presented only in Chinese. Under the policy, forcing a specific language without offering a user choice or documenting a justified locale constraint can be a natural-language policy violation.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
91% confidence
Finding

The documentation describes access to sensitive financial holdings and trading-related data and includes an API key usage example, but it provides no warning about protecting credentials or appropriately handling potentially sensitive market/ownership data. This omission can encourage unsafe operational practices such as hardcoding API keys, sharing logs containing secrets, or redistributing data without proper controls.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
91% confidence
Finding

This markdown file contains only Chinese-language instructions and parameter descriptions, with no indication that users may choose another language or that the locale restriction is intentional. Under the policy, forcing a specific language without user opt-in is a natural-language policy concern.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
89% confidence
Finding

The file’s user-facing title, description, parameters, and examples are entirely in Chinese, which effectively forces a specific language for users. Under the policy, language constraints should either provide user choice or be explicitly documented as a justified region- or locale-specific limitation.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
91% confidence
Finding

The file’s user-facing title, description, parameters, and return-value documentation are entirely in Chinese. Under the stated policy, forcing a specific language without offering the user a language or locale choice can be a natural-language policy violation.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
88% confidence
Finding

该 markdown 文件包含调用外部 API 的示例代码,查询参数如公司名称、公司ID、时间区间会随请求发送到第三方服务。文档描述了功能和参数,但没有任何用户提示说明会发生网络传输或依赖外部服务。

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
95% confidence
Finding

This markdown skill description and example are fully Chinese-language, and there is no indication that users may choose another language or that the skill is intentionally limited to a Chinese-only audience. Under the policy rule for language/locale, forcing a specific language without opt-in is a natural-language policy concern.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
88% confidence
Finding

The example code instantiates an API client with an API key and calls a remote service, but the documentation does not explicitly disclose that this action sends requests to an external provider and may transmit query parameters, credentials, and associated metadata over the network. In a skill context, users may copy-paste examples assuming they are local-only operations, which can lead to unintentional outbound access and weak informed consent around data handling.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
91% confidence
Finding

This markdown file presents all user-facing instructions and parameter descriptions exclusively in Chinese. Under the stated policy, forcing a specific language without user opt-in can be a natural-language policy violation unless the locale restriction is clearly justified, which is not stated here.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
98% confidence
Finding

Line L10 begins with '指数周线行情列表' but immediately states that it queries '月线行情数据' and the file title is also '指数月线行情'. This is an active contradiction in the documentation about whether the interface returns weekly or monthly data.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.