T06 · System Persistence
- Location
SKILL.md:101- Finding
Persistent Weekday Execution Through a Scheduled Task
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This A-share stock-picking skill is not proven malicious, but it installs broad dependencies, sets up recurring unattended runs, changes network behavior, and makes overstated financial-analysis claims.
Review carefully before installing. Only run it in an isolated environment, avoid enabling the cron job unless you truly want unattended weekday execution, pin dependencies, remove the hard-coded sys.path and proxy overrides, and treat all stock recommendations as experimental rather than investment advice.
SKILL.md:101Persistent Weekday Execution Through a Scheduled Task
SKILL.md:101Unpinned Third-Party Dependency Installation
scripts/quant-stock-picker-ultimate-integrated.py:20External Directory Precedes Audited Modules in Python Import Resolution
scripts/quant-stock-picker-ultimate-integrated.py:16Process-Wide Bypass of Configured HTTP and HTTPS Proxies
scripts/quant-stock-picker-ultimate-integrated.py:74Decision-Critical Market Data Retrieved Over Plaintext HTTP
scripts/quant-stock-picker-ultimate-integrated.py:357Synthetic and Circular Metrics Presented as AI-Enhanced Financial Analysis
The skill overstates AI/sentiment/daily-pick capabilities that are reportedly absent or only partially implemented, which creates a trust and integrity problem. While this is not direct code execution risk by itself, misrepresentation in an autonomous or semi-autonomous agent can lead users to act on fabricated or incomplete analysis and can mask what the code is actually doing.
The skill overstates AI/sentiment/daily-pick capabilities that are reportedly absent or only partially implemented, which creates a trust and integrity problem. While this is not direct code execution risk by itself, misrepresentation in an autonomous or semi-autonomous agent can lead users to act on fabricated or incomplete analysis and can mask what the code is actually doing.
Referenced artifact was not completely inspected
openclaw cron add --name "每日量化选股" --schedule "35 9 * * 1-5" --script scripts/quant-stock-picker-ultimate-integrated.py
The skill advertises networked/data-collection behavior and likely environment access through referenced scripts, but the manifest declares no explicit tool scope or permissions boundaries. In an agent setting, missing scope declarations can cause overbroad execution privileges or make review and enforcement of network/env access impossible, increasing the risk of unintended external calls or secret exposure.
The skill content and output are presented in Chinese, and the description is specifically for Chinese A-shares, but there is no explicit user opt-in or statement that the skill is intentionally region/language-specific. Under the policy, forcing a specific language without user choice or clear documented justification is a natural-language policy concern.
The trigger phrases are broad enough to activate on ordinary investing conversation, causing the skill to run in contexts where the user may not have requested automated screening. Overbroad auto-triggering increases the chance of unnecessary network access, data retrieval, or misleading financial recommendations being injected into benign discussions.
The code performs outbound network requests to third-party sources using stock identifiers without any user-facing notice, consent, or control. In an agent skill, silent external data collection can expose user interests or queried securities to remote services and create privacy, compliance, and transparency risks, especially in financial contexts.
The top-level documentation states the module includes '自编码器因子降维', implying a functioning autoencoder-based dimensionality reduction capability. However, the only autoencoder implementation at L384-L419 defines a network and immediately uses it under torch.no_grad() without training or loading learned weights, so it does not perform meaningful learned reduction as documented.
The documentation says factor screening includes 'IC、IR计算', suggesting both metrics are part of screening behavior. In code, select_factors() accepts ir_threshold but never computes or applies IR, so the documented screening logic materially overstates what the code does.
The script globally modifies NO_PROXY, HTTP_PROXY, and HTTPS_PROXY for the process, disabling or bypassing expected proxy controls. In an agent environment, this can undermine network monitoring, policy enforcement, audit controls, or egress restrictions that operators rely on.
Injecting a hard-coded local directory at the front of sys.path changes module resolution and allows imports from an uncontrolled local path to override expected packages. If that directory is writable or compromised, an attacker could achieve arbitrary code execution through malicious module substitution.
The script fetches external news and social-sentiment data over the network without clearly disclosing that behavior to the user. This creates privacy and policy concerns in restricted environments because stock symbols, timing, and usage patterns may be exposed to third-party services unexpectedly.
The script writes a CSV report to a fixed local filesystem path even though the skill is described as a stock-screening tool, not a file-management utility. Unprompted local writes can overwrite prior outputs, leak sensitive analysis artifacts to shared storage, and violate least-privilege expectations for an agent skill.
The script silently saves output to a fixed local path without prior notice or confirmation. In agent contexts, undisclosed persistence can expose investment-related data, overwrite existing files, and violate user expectations about whether the tool leaves artifacts on disk.
The module docstring and user-facing messages in the file are presented in Chinese only, which effectively forces a specific language for users interacting with the skill. The file does not indicate that language selection is optional or configurable, so it may violate a language/locale policy requiring user choice.
The primary natural-language documentation and comments describe the module entirely in Chinese, with no indication that language selection is optional or that the skill is intentionally limited to a Chinese-speaking context. Under the policy, forcing a specific language without user opt-in is a locale/language policy concern.
The script's descriptive text and all user-facing output are written in Chinese, with no indication that the user can select another language. This can violate language/locale policy when a skill imposes a specific language without explicit opt-in or documented justification.
Earlier logic prefers Sina Finance API and only falls back to efinance if Sina fails. The generated report and final disclaimer unconditionally state that the data source is efinance, which contradicts the actual runtime behavior when Sina succeeds.
The code may fetch only 500 stocks from Sina, or a different number from efinance, yet the report hard-codes 'efinance(5811只A股)'. This is an active contradiction of the actual behavior and output size computed elsewhere in the script.
The script's execution path can use Sina as the primary source and can process varying stock counts, but the disclaimer always states data is based on efinance with 5811 A-shares. This directly conflicts with the earlier runtime behavior and can misrepresent provenance to users.
No suspicious patterns detected.