other
- Location
scripts/data-sources.js:12- Finding
Stock monitoring alerts are transmitted to a hardcoded Feishu recipient
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill is a real stock-monitoring tool, but it includes hardcoded external messaging and API credentials that users may not control.
Review before installing. Replace the Feishu chat ID in every script, remove and rotate the embedded QVeris key, require secrets through environment variables, avoid running the cron jobs until destinations are verified, and prefer hardened subprocess calls or direct APIs before using this in any account that holds private investment or business data.
scripts/data-sources.js:12Stock monitoring alerts are transmitted to a hardcoded Feishu recipient
scripts/alert-check.js:78Shell command injection risk in Feishu alert delivery
scripts/data-sources.js:164QVeris fallback constructs shell commands from environment and configuration values
scripts/data-sources.js:12QVeris API credential is hardcoded in project source files
If the associated implementation contains a hardcoded API key, fixed Feishu destination, and undeclared local persistence, that is a real security issue because it mixes secret exposure, outbound data transmission, and undeclared stateful behavior. In the context of a stock-monitoring skill that pushes messages externally, undocumented secrets and hardcoded recipients increase the risk of data leakage, account abuse, and unauthorized notification routing.
If the associated implementation contains a hardcoded API key, fixed Feishu destination, and undeclared local persistence, that is a real security issue because it mixes secret exposure, outbound data transmission, and undeclared stateful behavior. In the context of a stock-monitoring skill that pushes messages externally, undocumented secrets and hardcoded recipients increase the risk of data leakage, account abuse, and unauthorized notification routing.
If the associated implementation contains a hardcoded API key, fixed Feishu destination, and undeclared local persistence, that is a real security issue because it mixes secret exposure, outbound data transmission, and undeclared stateful behavior. In the context of a stock-monitoring skill that pushes messages externally, undocumented secrets and hardcoded recipients increase the risk of data leakage, account abuse, and unauthorized notification routing.
Referenced artifact was not completely inspected
编辑 `scripts/data-sources.js`:
A hardcoded fallback API key is a real secret exposure. Anyone with access to the skill source can extract and abuse the credential for unauthorized paid API usage, billing fraud, quota exhaustion, or downstream access associated with the account.
A live-looking API key is hardcoded as a fallback in source code, exposing a credential to anyone who can read the repository, package, logs, or deployed artifact. An attacker could reuse the key for unauthorized third-party API access, consume quota, incur charges, or access data/functions under the owner's account.
The fallback behavior silently uses an embedded API credential without informing the operator, which hides external authenticated access and makes misuse harder to detect. Combined with the hardcoded secret, this increases the chance of unapproved data exchange, surprise billing, and unnoticed credential abuse.
The skill advertises executable scripts and configuration that imply environment and external-service usage, but it does not declare any explicit tool scope, permissions, or secret handling expectations. This creates a transparency and least-privilege problem: operators may enable broader access than intended, and reviewers cannot reliably assess what capabilities the skill needs before execution.
The skill explicitly describes Feishu/Telegram alerting but does not warn that stock symbols, alert conditions, report contents, or operational metadata may be transmitted to third-party messaging services. In this context, outbound messaging is core functionality, so missing disclosure materially increases privacy and governance risk, especially in enterprise environments where chat destinations may be broadly accessible.
The script’s natural-language title and operational descriptions are entirely in Chinese and the implementation is tailored to Beijing time and China/HK market context, without offering any language or locale choice. This can violate language/locale policy when a skill forces one locale-specific experience without explicit opt-in or documented justification.
The documented rules enumerate only rise/fall alerts over 4.9% and no-message behavior, presenting them as the script's alerting rules. The implementation adds price-target alerts for configured stocks and volume-related alerts at a 2% move threshold, which materially extends behavior beyond the documented rules.
The file header states '每只股票每天最多告警1次', implying a single alert per stock per day. In implementation, the state is tracked separately for change, price-target, and volume alerts using distinct keys like ${code}_change, ${code}_price_${target}, and ${code}_volume, so one stock may generate several alerts in one day.
The manifest describes a stock monitoring system with行情查询、告警和推送, which reasonably implies network access and messaging, but this file also imports child_process and uses execSync to invoke external CLI tooling and another script. Spawning shell commands is a materially broader capability than ordinary quote retrieval or report generation and is not explicitly justified by the stated purpose.
The module executes a script from another skill/workspace path, creating a trust-boundary violation: this skill inherits code and behavior from an external location that may be modified independently. That expands the attack surface and can lead to arbitrary code execution or unauthorized data access if the external script is replaced or tampered with.
The sendAlert function invokes a shell command to send messages to a Feishu channel, which is an external side effect involving subprocess execution and outbound communication. The code logs success only after sending, but it does not provide any prior warning, confirmation, or explanatory comment that runtime failures will trigger external notifications.
The code transmits stock codes to an external paid service by constructing a shell command with interpolated data, without validation or safe argument passing. If stock codes are ever influenced by untrusted input, this creates command-injection risk locally and data-exposure risk externally; even with trusted inputs, it silently exfiltrates monitored symbols to a third party.
The natural-language descriptions, console output, and generated report content are written in Chinese throughout the file, with no indication that users can choose another language or locale. This can violate language/locale policy when a skill unconditionally forces one language without opt-in or documented justification.
The manifest claims technical analysis and monitoring, but this code goes further by producing action-oriented recommendations such as '减仓', '止损', and '持有/逢低加仓'. That changes the skill from descriptive analytics toward investment decision guidance, which is a meaningful intent expansion.
The manifest describes real-time quote lookup, alert monitoring, technical analysis, and scheduled report pushing, but does not mention retaining historical market data locally for 6 months. This file writes daily JSON snapshots and later-generated reports to disk, which is a broader operational behavior than the stated user-facing functionality.
The configuration example exposes the use of a Feishu chat ID without any warning that messaging identifiers are sensitive operational metadata and should be handled carefully. Although a chat ID alone is not usually a secret on the level of an API token, documenting external-service identifiers without safety guidance can lead to misdelivery, accidental disclosure, or unsafe copy-paste practices alongside real credentials.
This markdown file uses Chinese throughout for headings and instructions, which can amount to a language/locale constraint for users who do not read Chinese. The policy allows locale constraints when they are explicitly justified or when users are offered a choice, neither of which appears in the file.
This code persists alert state to /root/.openclaw/workspace/stock-monitor/data/alert-state.json, which is a file write affecting local user/system data. Although the code is clear to a developer, there is no confirmation prompt or user-facing notice around this persistent write in the script itself.
Feishu push notifications are within the skill's stated purpose, but implementing them through execSync('openclaw message send ...') gives the module shell command execution powers unrelated to the core business intent. This is broader than necessary for a monitoring skill and increases the capability surface.
The alert message uses toLocaleString('zh-CN', { timeZone: 'Asia/Shanghai' }), which hardcodes a specific language/locale and regional time zone. The file does not indicate that this locale choice is optional, user-selected, or justified as region-specific behavior.
Detected: suspicious.dangerous_exec