Back to skill

Security audit

云梦A股数据获取Skill

Security checks for vulnerabilities and agentic risk

Overview

This skill is a straightforward A-share market data fetcher, with some dependency and documentation quality issues but no evidence of hidden, destructive, or credential-seeking behavior.

Install it only in an isolated environment and pin or lock the Python dependencies first. Expect it to contact Eastmoney and Sina Finance with requested stock symbols, and treat the yesterday limit-up and market-anomaly outputs cautiously until those endpoints are corrected.

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
requirements.txt:1
Finding
Unpinned and Cross-Ecosystem Dependencies Create Supply-Chain Risk<![CDATA[ ## Vulnerability Details **File Locations**: - `requirements.txt:1-3` - `setup.py:10-14` - `package.json:19-23` **Vulnerability Type**: Unpinned dependencies and incorrect cross-ecosystem dependency declarations **Risk Level**: Medium ### Vulnerable Code `requirements.txt:1-3`: ```text pandas requests beautifulsoup4 ``` `setup.py:10-14`: ```python install_requires=[ "pandas", "requests", "beautifulsoup4" ] ``` `package.json:19-23`: ```json "dependencies": { "pandas": "^2.0.0", "requests": "^2.31.0", "beautifulsoup4": "^4.12.0" } ``` ### Technical Analysis The Python dependency manifests do not pin exact versions or provide integrity hashes. Consequently, each installation may resolve different package versions from the configured package index. This prevents reproducible dependency verification and increases exposure to compromised releases, malicious package indexes, or unexpected compatibility changes. The npm manifest also declares `pandas`, `requests`, and `beautifulsoup4` as npm dependencies even though the implementation uses the corresponding Python libraries. npm packages and Python packages with similar names are independent artifacts. Tooling that automatically processes `package.json` could therefore install unnecessary or unintended npm packages that are not required by the Skill. No lockfile or integrity-controlled dependency manifest is included for either ecosystem. The audit did not establish that any currently resolved dependency is malicious; the vulnerability is the unsafe and ambiguous dependency-resolution configuration. ### Attack Path 1. A user or automated Agent installs the project using `pip install -e .`, `pip install -r requirements.txt`, or npm-based project tooling. 2. The package manager resolves mutable dependency versions from its configured registry. 3. An attacker compromises a permitted dependency release or registry, or causes an unintended similarly named npm artifact to be selected. ...[truncated 1137 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Pin every Python dependency to an exact, tested version rather than using unrestricted package names. 2. Generate a lockfile containing hashes, such as a hash-checked requirements file produced with `pip-tools`. 3. Install dependencies with integrity enforcement, for example: ```bash pip install --require-hashes -r requirements.lock ``` 4. Configure installation to use an explicitly trusted Python package index and prevent unintended fallback to untrusted indexes. 5. Remove the npm `dependencies` section—and preferably `package.json` entirely—if Node.js is not part of the Skill's runtime. 6. If npm metadata is genuinely required, do not list Python libraries as npm dependencies. Declare only verified Node.js packages that serve a documented purpose and commit the generated lockfile. 7. Use isolated, least-privileged build environments without unnecessary credentials or host filesystem access. 8. Add automated dependency vulnerability and provenance scanning to the release process. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (17)

Natural-Language Policy Violations

Medium
Confidence
95% confidence
Finding
The entire skill description and usage guidance are presented only in Chinese, with no indication that users may choose another language or that the skill is intentionally limited to Chinese-speaking users. The policy calls for flagging language or locale constraints when they are imposed without opt-in or clear justification.

Natural-Language Policy Violations

Medium
Confidence
95% confidence
Finding
The natural-language description and user-facing strings in this file are exclusively Chinese, which can amount to forcing a specific language without user opt-in. There is no indication that the skill is intentionally limited to a Chinese-speaking or region-specific audience, nor any alternative language option.

Intent-Code Divergence

Medium
Confidence
97% confidence
Finding
The documentation at L249-L254 says this function retrieves yesterday's limit-up stocks, and the code even computes a `yesterday` value at L260. However, the request at L262 is the same generic current list endpoint used by `get_limit_up_stocks` and does not incorporate the yesterday date at all, so the implementation does not match the stated intent.

Intent-Code Divergence

Medium
Confidence
95% confidence
Finding
The comment and docstring at L288-L293 describe abnormal market movement data, which implies a distinct dataset. Instead, the code at L299 calls the same Eastmoney `clist/get` endpoint with the same stock-selection filter as `get_limit_up_stocks`, indicating it is not actually fetching anomaly-specific data.

Natural-Language Policy Violations

Medium
Confidence
88% confidence
Finding
The user-facing natural-language fields in this manifest are entirely in Chinese, including the top-level description and command descriptions, with no indication that the skill supports other languages or that the Chinese-only scope is an intentional, documented regional constraint. Under the policy, forcing a specific language without user opt-in can be a natural-language policy violation.

Missing User Warnings

Low
Confidence
91% confidence
Finding
This Python skill makes network requests to third-party finance services via requests.get, but the code provides no clear user-facing warning that invoking the skill will contact external sites. Although some functions have internal comments and retry logs, those do not explicitly disclose outbound data transmission to the user at the point of use.

Natural-Language Policy Violations

Low
Confidence
85% confidence
Finding
The package description is written only in Chinese ("云梦A股数据获取Skill"), which indicates a language-specific presentation without any visible opt-in, fallback, or justification in this file. The policy requires flagging language or locale constraints when the skill appears to force a specific language without user choice.

Unpinned Dependencies

Low
Category
Supply Chain
Content
"author": "OpenClaw",
  "license": "MIT",
  "dependencies": {
    "pandas": "^2.0.0",
    "requests": "^2.31.0",
    "beautifulsoup4": "^4.12.0"
  }
Confidence
88% confidence
Finding
Using a caret range for pandas allows future minor and patch releases to be installed without review, which can introduce vulnerable or malicious upstream versions through the software supply chain. In a package manifest, this weakens build reproducibility and makes it harder to verify exactly what code will execute when the skill is installed.

Unpinned Dependencies

Low
Category
Supply Chain
Content
"license": "MIT",
  "dependencies": {
    "pandas": "^2.0.0",
    "requests": "^2.31.0",
    "beautifulsoup4": "^4.12.0"
  }
}
Confidence
88% confidence
Finding
Using a caret range for requests permits automatic selection of newer releases that have not been explicitly vetted, creating a supply-chain risk if a compromised or vulnerable version is published. This is especially relevant for a data-fetching skill because requests is likely central to network operations.

Unpinned Dependencies

Low
Category
Supply Chain
Content
"dependencies": {
    "pandas": "^2.0.0",
    "requests": "^2.31.0",
    "beautifulsoup4": "^4.12.0"
  }
}
Confidence
93% confidence
Finding
The manifest allows any compatible beautifulsoup4 release via a caret range, so installation may pull in an affected version if the upstream package is compromised or vulnerable. Because there is already a known advisory associated with beautifulsoup4 in this ecosystem, leaving the version unpinned materially increases uncertainty and risk.

Unverifiable Dependency: beautifulsoup4 has 1 known advisory(ies) (MAL-2025-3615 (Malicious code in beautifulsoup4 (npm))), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
91% confidence
Finding
The package references beautifulsoup4 without pinning, while static analysis reports a known advisory for that package in the npm ecosystem. Even if the exact installed version is unknown, this uncertainty is itself dangerous because consumers may resolve to a malicious or affected release at install time.

Unpinned Dependencies

Low
Category
Supply Chain
Content
pandas
requests
beautifulsoup4
Confidence
97% confidence
Finding
The dependency is unpinned, so installs may resolve to different versions over time, reducing build reproducibility and increasing supply-chain risk if a newly released or compromised version is fetched. In a security-sensitive skill, this can indirectly introduce vulnerable or malicious code without any manifest change.

Unverifiable Dependency: pandas has 1 known advisory(ies) (CVE-2020-13091 (** DISPUTED ** pandas through 1.0.3 can unserialize and execute commands from an)), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
77% confidence
Finding
Pandas has known advisories in some versions, and because the manifest does not specify a version, it is impossible to verify whether installation will land on a safe release. This does not prove an exploitable vulnerable version is present, but it is still a real security weakness because the dependency state is unverifiable and may resolve to an affected build.

Unpinned Dependencies

Low
Category
Supply Chain
Content
pandas
requests
beautifulsoup4
Confidence
98% confidence
Finding
The requests dependency is unpinned, allowing future installs to pull different releases, including ones with security regressions or newly introduced malicious packages in the supply chain. Because requests commonly handles outbound HTTP and may process credentials, version drift here is more security-relevant than for a purely local utility library.

Unverifiable Dependency: requests has 16 known advisory(ies) (CVE-2014-1830 (Exposure of Sensitive Information to an Unauthorized Actor in Requests); 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) +13 more), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
90% confidence
Finding
Requests has multiple historical advisories, and the absence of version pinning means the environment may install an affected release without visibility or review. Given that requests is often used for network access, redirects, authentication, and TLS-sensitive workflows, uncertainty around its version is more dangerous in practice than a typical utility dependency.

Unpinned Dependencies

Low
Category
Supply Chain
Content
pandas
requests
beautifulsoup4
Confidence
96% confidence
Finding
The beautifulsoup4 dependency is unpinned, which creates non-reproducible environments and exposes the skill to supply-chain instability if future releases introduce vulnerabilities or breaking behavior. While not an immediate exploit by itself, it weakens dependency integrity and makes secure review harder.

Natural-Language Policy Violations

Low
Confidence
95% confidence
Finding
The package description is written only in Chinese ("云梦A股数据获取Skill"), which indicates a fixed language presentation without any stated user choice or opt-in. The policy for this category flags language or locale constraints when they are imposed without offering an alternative or documenting a justified regional limitation.

Static analysis

No suspicious patterns detected.