Back to skill

Security audit

Market Data Hub

Security checks for vulnerabilities and agentic risk

Overview

This skill is a coherent stock-market data helper with expected network data access and technical-analysis code, but users should install its unpinned Python dependencies cautiously.

Install in a virtual environment, avoid elevated privileges, and consider pinning or locking dependencies before use. Expect the skill to contact public market-data providers and, when running the example script, to create CSV files in the working directory. Treat generated buy/sell-style indicator labels as analytical signals, not financial advice.

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:4
Finding
Unpinned and Unverified Third-Party Dependencies<![CDATA[ ## Vulnerability Details **File Location**: `requirements.txt:4-16`; installation instruction at `SKILL.md:30-33` **Vulnerability Type**: Supply-chain risk caused by open-ended dependency versions and missing integrity verification **Risk Level**: Medium ### Vulnerable Code `requirements.txt:4-16`: ```text # Data source libraries akshare>=1.10.0 baostock>=0.8.8 requests>=2.28.0 # Data processing pandas>=1.5.0 numpy>=1.21.0 # Configuration pyyaml>=6.0 # Type hints typing-extensions>=4.0.0 ``` `SKILL.md:30-33`: ```bash pip install -r requirements.txt ``` ### Technical Analysis Every dependency uses an open-ended minimum-version constraint. Consequently, installation may select any newer release available from the configured package index rather than a specific version reviewed with this project. The project does not provide a lock file, package hashes, or an integrity-enforcing installation command. Python package installation can execute package build or installation logic. If an accepted upstream version or the configured package index is compromised, following the documented installation command may introduce and execute attacker-controlled code. Unrestricted upgrades can also introduce unreviewed transitive dependencies. `pyyaml` and `typing-extensions` were not observed in the reviewed runtime imports, so they may unnecessarily expand the dependency and supply-chain attack surface. This finding does not establish that the currently named packages are malicious. The vulnerability is the absence of reproducible version and integrity controls. ### Attack Path 1. An attacker compromises an upstream dependency account, publishing infrastructure, package-index path, or a transitive dependency. 2. The attacker publishes a malicious release whose version satisfies one of the `>=` constraints. 3. A user follows the instruction in `SKILL.md` and runs `pip install -r requirements.txt`. 4. Pip resolves the compromised release because no exact ver ...[truncated 848 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Replace open-ended constraints with exact versions that have been reviewed and tested, for example `package==X.Y.Z`. 2. Generate a reproducible lock file containing hashes for all direct and transitive dependencies. 3. Require integrity verification during installation, such as: ```bash python -m pip install --require-hashes -r requirements.lock ``` 4. Remove dependencies that are not required by runtime or development code, particularly `pyyaml` and `typing-extensions` if confirmed unused. 5. Separate runtime, development, and test dependencies into distinct locked files. 6. Install dependencies inside an isolated virtual environment using a non-privileged account. 7. Review dependency updates through a controlled process that includes vulnerability scanning, provenance checks, test execution, and lock-file regeneration. 8. Configure trusted package indexes explicitly and avoid unreviewed mirrors or supplemental indexes that could enable dependency confusion. ]]>
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
Findings (35)

Hidden Instructions

High
Category
Prompt Injection
Content
date,code,open,high,low,close,pre_close,volume,amount,turnover,change_pct,MA5,MA10,MA20,MA60,MACD_DIF,MACD_DEA,MACD_HIST,MACD_golden_cross,MACD_death_cross,RSI,RSI_oversold,RSI_overbought,BB_MIDDLE,BB_UPPER,BB_LOWER,BB_WIDTH,BB_percent_b,BB_above_upper,BB_below_lower,BB_touch_upper,BB_touch_lower,KDJ_K,KDJ_D,KDJ_J,KDJ_golden_cross,KDJ_death_cross,KDJ_overbought,KDJ_oversold,KDJ_extreme_overbought,KDJ_extreme_oversold
2024-10-08,sh.601127,99.46,99.46,90.42,98.1,90.42,112033525,10845262403.48,7.4205,8.4937,98.1,98.1,98.1,98.1,0.0,0.0,0.0,False,False,,False,False,98.1,,,,,False,False,False,False,50.0,50.0,50.0,False,False,False,False,False,False
2024-10-09,sh.601127,95.0,95.0,89.0,89.02,98.1,82672314,7614250716.18,5.4758,-9.2559,93.56,93.56,93.56,93.56,-0.7243304843304941,-0.14486609686609883,-1.1589287749287904,False,True,0.0,True,False,93.56,106.4010591463477,80.7189408536523,0.27449891291893336,0.32322330470336286,False,False,False,False,33.39706819630336,44.46568939876778,11.25982579137451,False,True,False,False,False,False
2024-10-10,sh.601127,88.88,91.8,85.2,88.8,89.02,59308648,5269118984.03,3.9283,-0.2471,91.97333333333331,91.97333333333331,91.97333333333331,91.97333333333331,-1.3011212571326638,-0.37611712891941185,-1.850008256426504,False,False,0.0,True,False,91.97333333333331,102.58731153819757,81.35935512846906,0.23080555678887188,0.35051159555429373,False,False,False,False,30.679859395946036,39.87041273116053,12.298752725517048,False,False,False,False,False,False
Confidence
60% confidence
Finding
Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.

Hidden Instructions

High
Category
Prompt Injection
Content
date,code,open,high,low,close,pre_close,volume,amount,turnover,change_pct,MA5,MA10,MA20,MA60,MACD_DIF,MACD_DEA,MACD_HIST,MACD_golden_cross,MACD_death_cross,RSI,RSI_oversold,RSI_overbought,BB_MIDDLE,BB_UPPER,BB_LOWER,BB_WIDTH,BB_percent_b,BB_above_upper,BB_below_lower,BB_touch_upper,BB_touch_lower,KDJ_K,KDJ_D,KDJ_J,KDJ_golden_cross,KDJ_death_cross,KDJ_overbought,KDJ_oversold,KDJ_extreme_overbought,KDJ_extreme_oversold
2024-10-08,sh.601127,99.46,99.46,90.42,98.1,90.42,112033525,10845262403.48,7.4205,8.4937,98.1,98.1,98.1,98.1,0.0,0.0,0.0,False,False,,False,False,98.1,,,,,False,False,False,False,50.0,50.0,50.0,False,False,False,False,False,False
2024-10-09,sh.601127,95.0,95.0,89.0,89.02,98.1,82672314,7614250716.18,5.4758,-9.2559,93.56,93.56,93.56,93.56,-0.7243304843304941,-0.14486609686609883,-1.1589287749287904,False,True,0.0,True,False,93.56,106.4010591463477,80.7189408536523,0.27449891291893336,0.32322330470336286,False,False,False,False,33.39706819630336,44.46568939876778,11.25982579137451,False,True,False,False,False,False
2024-10-10,sh.601127,88.88,91.8,85.2,88.8,89.02,59308648,5269118984.03,3.9283,-0.2471,91.97333333333331,91.97333333333331,91.97333333333331,91.97333333333331,-1.3011212571326638,-0.37611712891941185,-1.850008256426504,False,False,0.0,True,False,91.97333333333331,102.58731153819757,81.35935512846906,0.23080555678887188,0.35051159555429373,False,False,False,False,30.679859395946036,39.87041273116053,12.298752725517048,False,False,False,False,False,False
Confidence
60% confidence
Finding
Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.

Natural-Language Policy Violations

Medium
Confidence
92% confidence
Finding
The file's title, docstrings, and all user-facing print strings are written in Chinese, which imposes a specific language on the interaction. The policy allows locale constraints only when the user is given a choice or when the restriction is clearly documented and justified as region-specific.

Natural-Language Policy Violations

Medium
Confidence
91% confidence
Finding
This code file contains user-facing natural-language documentation entirely in Chinese, including the module docstring and function docstrings. The policy explicitly calls for flagging language or locale constraints when a specific language is forced without user opt-in, and this file does not offer any language choice or justification.

Natural-Language Policy Violations

Medium
Confidence
93% confidence
Finding
The file's user-facing natural-language documentation is entirely in Chinese, including the module title, feature list, and method docstrings, with no indication that another language is supported or that Chinese is a required locale. Per the policy, forcing a specific language without user opt-in is a natural-language policy violation unless the locale constraint is explicitly justified.

Natural-Language Policy Violations

Medium
Confidence
92% confidence
Finding
This Python file contains natural-language descriptions entirely in Chinese, including the module docstring and class/method documentation, with no indication that the skill is intended only for Chinese-speaking users or a China-specific environment. Under the language/locale policy, forcing a specific language without user opt-in or a documented justification is a policy concern.

Natural-Language Policy Violations

Medium
Confidence
96% confidence
Finding
This file contains natural-language strings entirely in Chinese in the module docstring, class docstrings, and printed test output. Under the language/locale policy rule, forcing a specific language without opt-in or documented justification is a policy concern even in code comments and string literals.

Natural-Language Policy Violations

Low
Confidence
95% confidence
Finding
This markdown file contains user-facing natural language exclusively in Chinese, including the title, headings, and conclusions, but does not indicate that Chinese is optional or that the skill is intended only for a Chinese-language audience. Under the language/locale policy check, forcing a specific language without user opt-in can be a policy violation.

Missing User Warnings

Low
Confidence
96% confidence
Finding
This Python file performs a file write by saving retrieved market data to kline_data.csv, but the only disclosure comes after the write has already happened. For code files, file writes should have some visible advance warning, confirmation, or explanatory comment/docstring indicating that user-local files will be created.

Missing User Warnings

Low
Confidence
96% confidence
Finding
This code saves processed data to kline_with_indicators.csv, but the user is only informed after the write completes. Under the code-file warning criteria, local file creation should be disclosed beforehand via a prompt, print statement, or clear explanatory comment/docstring.

Unpinned Dependencies

Low
Category
Supply Chain
Content
# Market Data Hub - Requirements

# Data source libraries
akshare>=1.10.0
baostock>=0.8.8
requests>=2.28.0
Confidence
95% confidence
Finding
The dependency is specified with only a lower bound, so builds may resolve to different versions over time. This weakens supply-chain reproducibility and makes it harder to verify whether deployed versions contain known vulnerabilities or breaking changes.

Unpinned Dependencies

Low
Category
Supply Chain
Content
# Data source libraries
akshare>=1.10.0
baostock>=0.8.8
requests>=2.28.0

# Data processing
Confidence
95% confidence
Finding
The dependency is not pinned to an exact version, allowing installation of any newer release that satisfies the minimum version. This creates a supply-chain risk because future installs may pull unexpected or vulnerable versions and reduces reproducibility across environments.

Unpinned Dependencies

Low
Category
Supply Chain
Content
# Data source libraries
akshare>=1.10.0
baostock>=0.8.8
requests>=2.28.0

# Data processing
pandas>=1.5.0
Confidence
98% confidence
Finding
Using requests with only a minimum version allows different installations to resolve to different releases, including ones later found vulnerable. Because requests is a network-facing library and has multiple advisories, the lack of pinning makes it impossible to assure a safe resolved version.

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 known advisories, but the manifest does not pin a version, so there is no way to verify whether resolved installations avoid affected releases. In a skill that likely retrieves market data over the network, this uncertainty is more significant because the library is actively used for external communications.

Unpinned Dependencies

Low
Category
Supply Chain
Content
requests>=2.28.0

# Data processing
pandas>=1.5.0
numpy>=1.21.0

# Configuration
Confidence
94% confidence
Finding
An unpinned pandas dependency makes the build non-reproducible and complicates vulnerability management. Even if the current minimum version is acceptable, future resolves may differ and introduce vulnerable or incompatible versions.

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
40% confidence
Finding
Dependency has known vulnerabilities (CVEs). Using packages with unpatched security flaws exposes the environment to known exploits.

Unpinned Dependencies

Low
Category
Supply Chain
Content
# Data processing
pandas>=1.5.0
numpy>=1.21.0

# Configuration
pyyaml>=6.0
Confidence
94% confidence
Finding
Specifying numpy with only a lower bound permits unreviewed newer versions to be installed and prevents deterministic builds. This increases supply-chain uncertainty and makes it difficult to know whether deployed instances are affected by published issues.

Unverifiable Dependency: numpy has 16 known advisory(ies) (CVE-2014-1859 (Numpy arbitrary file write via symlink attack); CVE-2021-41495 (NumPy NULL Pointer Dereference); CVE-2021-33430 (NumPy Buffer Overflow (Disputed)) +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
40% confidence
Finding
Dependency has known vulnerabilities (CVEs). Using packages with unpatched security flaws exposes the environment to known exploits.

Unpinned Dependencies

Low
Category
Supply Chain
Content
numpy>=1.21.0

# Configuration
pyyaml>=6.0

# Type hints
typing-extensions>=4.0.0
Confidence
98% confidence
Finding
PyYAML is not pinned, so deployments may resolve to different versions with different security characteristics. Given PyYAML's history of unsafe deserialization issues, version ambiguity increases risk if the package is later used to parse untrusted YAML.

Unverifiable Dependency: pyyaml has 8 known advisory(ies) (CVE-2019-20477 (Deserialization of Untrusted Data in PyYAML); CVE-2020-1747 (Improper Input Validation in PyYAML); CVE-2020-14343 (Improper Input Validation in PyYAML) +5 more), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
40% confidence
Finding
Dependency has known vulnerabilities (CVEs). Using packages with unpatched security flaws exposes the environment to known exploits.

Unpinned Dependencies

Low
Category
Supply Chain
Content
pyyaml>=6.0

# Type hints
typing-extensions>=4.0.0
Confidence
92% confidence
Finding
The typing-extensions dependency is unpinned, which primarily affects reproducibility and dependency trust rather than direct exploitability. It still represents a supply-chain hygiene issue because installs are not deterministic.

Natural-Language Policy Violations

Low
Confidence
83% confidence
Finding
The module description includes Chinese-language naming and documentation text without indicating that language choice is optional. Under the language/locale policy, hard-coding a specific language in user-facing natural language can be a policy concern when no opt-in or alternative is offered.

Natural-Language Policy Violations

Low
Confidence
88% confidence
Finding
The file’s natural-language content, including the module docstring, function docstrings, error messages, and returned suggestion/signal strings, is entirely in Chinese. Under the stated policy, forcing a specific language without user opt-in is a locale-policy issue unless the regional constraint is explicitly justified, which is not present here.

Natural-Language Policy Violations

Low
Confidence
90% confidence
Finding
This code file’s natural-language content is entirely in Chinese, including the module description, function docstrings, error messages, and returned analysis labels. Under the policy, forcing a specific language without user opt-in can be a locale/language policy violation when no justification or alternative is provided.

Natural-Language Policy Violations

Low
Confidence
92% confidence
Finding
The natural-language content in the module-level and function docstrings is entirely in Chinese, including user-facing error messages. Per the policy, forcing a specific language without user opt-in can be a locale-policy violation when no justification or alternative is provided.

Static analysis

No suspicious patterns detected.