Back to skill

Security audit

Stock Analyst

Security checks across malware telemetry and agentic risk

Overview

The skill is a stock-analysis and notification tool, but it includes root-level scheduled execution and defaults that can send stock/watchlist data to a hard-coded WeChat recipient.

Install only if you are prepared to audit and edit it first. Replace every USER_ID and holdings/watchlist value, verify the remote package source or avoid the downloader, and review/remove the root cron and logrotate files if you do not want persistent automatic WeChat stock notifications. Treat the trading recommendations as informational, not personalized financial advice.

SkillSpector

By NVIDIA
Vulnerability Patterns
  • 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
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Behavioral ASTexec() Call, eval() Call, Dynamic Import
Findings (19)

os.system() or os exec-family call

High
Category
Dangerous Code Execution
Content
LOGROTATE_CONF = "/etc/logrotate.d/stock-monitor"

def run(cmd):
    r = os.system(cmd)
    if r != 0:
        print(f"❌ 命令失败: {cmd}")
        sys.exit(r)
Confidence
82% confidence
Finding
r = os.system(cmd)

os.system() or os exec-family call

High
Category
Dangerous Code Execution
Content
# 6. 验证脚本语法
    for script in ["stock_pre.py", "stock_after.py", "stock_next.py"]:
        path = f"/root/.openclaw/workspace/skills/stock-push/scripts/{script}"
        r = os.system(f"python3 -m py_compile {path}")
        if r != 0:
            print(f"  ❌ {script} 语法检查失败")
        else:
Confidence
77% confidence
Finding
r = os.system(f"python3 -m py_compile {path}")

subprocess module call

Medium
Category
Dangerous Code Execution
Content
"""发送消息,带重试机制"""
    for attempt in range(1, retries + 1):
        try:
            result = subprocess.run(
                ["openclaw", "message", "send",
                 "--channel", "openclaw-weixin",
                 "--target", USER_ID,
Confidence
95% confidence
Finding
result = subprocess.run( ["openclaw", "message", "send", "--channel", "openclaw-weixin", "--target", USER_ID, "--message"

Description-Behavior Mismatch

Medium
Confidence
93% confidence
Finding
The installer modifies system-wide cron and logrotate configuration, which goes beyond simple stock-analysis functionality and creates persistent scheduled execution as root. In this skill context, that persistence is especially sensitive because the package is also fetched remotely and then installed into a root-owned path.

Context-Inappropriate Capability

Medium
Confidence
90% confidence
Finding
This installer centralizes arbitrary shell execution in a helper that exits only on nonzero return, enabling privileged setup tasks through shell commands. In a root-run installer that downloads and unpacks remote content, this pattern materially increases the risk of command abuse and makes later code changes far more dangerous.

Intent-Code Divergence

High
Confidence
95% confidence
Finding
The script presents itself as installing one skill while actually downloading and installing a differently named package from a remote URL. That mismatch is a supply-chain red flag because it can mislead reviewers and users about what code is being installed and persisted on the system.

Description-Behavior Mismatch

Medium
Confidence
99% confidence
Finding
The code sends automated WeChat messages to a hard-coded user ID, creating unsolicited outbound communication and potential leakage of portfolio/behavioral data without runtime user consent. In an agent skill context, hidden or preconfigured outbound messaging is especially risky because it can be abused for covert notifications, spam, or data exfiltration.

Context-Inappropriate Capability

Low
Confidence
90% confidence
Finding
Calling an external messaging CLI grants the skill capabilities beyond stock computation, increasing the attack surface and enabling outbound actions that are not intrinsic to analysis. Even if currently intended for reminders, such a capability can be repurposed to transmit sensitive data or interact with other local components.

Context-Inappropriate Capability

Medium
Confidence
95% confidence
Finding
The script hard-codes a specific WeChat recipient and automatically pushes stock summaries to that external account. In an agent skill context, this is an unjustified outbound communication path that can leak user-related trading interests or operational data without per-user consent, configuration isolation, or runtime confirmation.

Intent-Code Divergence

High
Confidence
96% confidence
Finding
The code claims multi-user independent watchlist handling, but all outbound messages are sent to a single hard-coded WeChat user ID. In practice, any user or workspace that runs this script could have their watchlist-derived market interests pushed to that fixed recipient, causing cross-user data leakage and privacy exposure.

Vague Triggers

Medium
Confidence
84% confidence
Finding
The trigger phrases are broad enough to match ordinary stock-related conversation, which can cause the skill to activate when the user did not intend to invoke automation or outbound-monitoring features. In this skill's context, accidental activation is more dangerous because the skill is not merely informational: it also documents file access, report writing, and scheduled push behavior.

Missing User Warnings

Medium
Confidence
90% confidence
Finding
The skill advertises automatic scheduled WeChat pushes and nightly monitoring, but it does not prominently warn users that this implies ongoing outbound message delivery and continuous watchlist-based processing after setup. This can lead to users unknowingly enabling persistent notifications and data transmission, which is especially sensitive in a finance-related context.

Missing User Warnings

Medium
Confidence
91% confidence
Finding
The skill reads WATCHLIST.md from environment- or filesystem-selected paths and sends stock-related output via WeChat, but it does not provide a clear warning about local data access boundaries or external transmission. Even if the data seems innocuous, file-based configuration plus outbound delivery increases privacy and misuse risk, particularly if path selection is influenced by environment variables or if users store more than ticker symbols in the watchlist file.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
This document gives explicit investment decision guidance, including buy timing, sell timing, position sizing, stop-loss rules, and named stock examples with positive outcome framing, but it does not warn users that the content is not financial advice and may lead to financial loss. In the context of a skill explicitly designed to provide stock analysis, buy/sell suggestions, and timed push notifications, this omission materially increases the chance that users will treat the content as actionable personalized advice and suffer losses.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The document gives explicit buy/sell signals such as '金叉→买入信号' and '死叉→卖出信号' in a skill whose stated purpose is to provide concrete stock trading recommendations and timed pushes. In that context, users are likely to treat these statements as actionable financial advice rather than education, increasing the risk of financial loss because the indicators are simplified, lagging, and can generate false signals.

Missing User Warnings

Medium
Confidence
91% confidence
Finding
The installer writes directly to /etc/cron.d and /etc/logrotate.d without an explicit warning or consent gate immediately before making persistent system changes. In this skill context, undisclosed persistence is more dangerous because the user expects stock analysis, not root-level OS reconfiguration.

Missing User Warnings

Medium
Confidence
89% confidence
Finding
The installer fetches a remote skill package from the network and installs it without strong disclosure, integrity verification, or trust pinning. Remote download plus root-level install and persistence significantly raises the impact of repository compromise, URL hijack, or content substitution.

Missing User Warnings

Medium
Confidence
89% confidence
Finding
The code transmits generated stock content to an external messaging channel automatically, with no in-code warning, consent gate, or confirmation flow. In this skill context, silent outbound messaging is more dangerous because the skill is presented as analysis/recommendation functionality, not as a bot that exfiltrates outputs to a third-party channel by default.

Missing User Warnings

Medium
Confidence
84% confidence
Finding
The script automatically transmits watchlist-derived stock activity to an external messaging channel without any visible consent, disclosure, or confirmation in the code path. Because a stock watchlist can reveal trading interests or positions, silent forwarding to an external service creates a real privacy and data-handling risk, especially in an agent skill context where users may not expect outbound transmission.

VirusTotal

64/64 vendors flagged this skill as clean.

View on VirusTotal

Static analysis

No suspicious patterns detected.