T08 · Insecure Dependencies
- Location
scripts/get_stock_info.py:18- Finding
Execution of an Unverified External Workspace Script
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This stock-tracking skill is mostly purpose-aligned, but it runs an unverified external script from another local skill to fetch news.
Review before installing. The stock watchlist behavior is straightforward, but stock lookups can contact Yahoo Finance and invoke a separate Tavily search script outside this package. Install only if you trust that other local skill path and are comfortable with stock symbols/company names being sent to external services.
scripts/get_stock_info.py:18Execution of an Unverified External Workspace Script
The declared behavior does not fully match the observed capabilities: the skill reportedly invokes external news search functionality via another script/subprocess that is not clearly disclosed in the primary description. Hidden or under-disclosed networked behavior is dangerous because it can expose user queries to third parties and expand the attack surface beyond simple stock lookup.
The declared behavior does not fully match the observed capabilities: the skill reportedly invokes external news search functionality via another script/subprocess that is not clearly disclosed in the primary description. Hidden or under-disclosed networked behavior is dangerous because it can expose user queries to third parties and expand the attack surface beyond simple stock lookup.
Executing an external Python script from a hard-coded path is a significant trust and supply-chain risk, especially when that script is outside the current skill. A compromised workspace, swapped helper script, or malicious update to the referenced skill would let an attacker execute arbitrary code whenever stock info is requested.
The skill advertises shell, file read/write, and network-capable operations but does not declare any explicit tool scope or permission boundaries. In an agent environment, this increases the chance the skill can invoke broader capabilities than users or reviewers expect, especially since it persists data locally and fetches remote content.
The skill manifest and examples are entirely in Chinese and describe the skill as operating in Chinese without any indication that other languages are supported or that the user can choose a locale. This creates a language-policy concern because the skill appears to impose a specific language by default rather than offering opt-in or choice.
Overly broad trigger phrases can cause the skill to activate on ordinary conversation and perform unintended actions such as network requests or local file modifications. In this skill's context, accidental activation is more concerning because it can write to a persistent watchlist and fetch external content without a narrowly scoped command.
The skill metadata says it uses Yahoo Finance for stock data, but the implementation also sends company and ticker queries to a separate Tavily search script. This undisclosed data flow increases external exposure and violates least surprise; users and reviewers may believe only Yahoo Finance is contacted when an additional service is used.
The code launches an external Python script via subprocess from an absolute workspace path. Although arguments are passed as a list rather than a shell string, this still expands the trust boundary: the skill executes code outside this file, and if that referenced script is modified, replaced, or untrusted, this skill will run it with the current agent's permissions.
# Try to find tavily script in workspace
tavily_script = "/home/frank/.openclaw/workspace/skills/openclaw-tavily-search/scripts/tavily_search.py"
result = subprocess.run(
["python3", tavily_script, "--query", query, "--max-results", "3", "--format", "brave"],
capture_output=True,
text=True,
The script emits user-facing status and error messages in Chinese, and this pattern continues throughout the file. This imposes a specific language/locale on users without offering a language choice or documenting a justified locale restriction.
Multiple user-facing strings, including errors, usage text, and status messages, are hard-coded in Chinese. For a general-purpose stock manager, this imposes a specific language without user opt-in, which matches the language/locale policy violation criteria.
The description omits a clear warning that stock queries may fetch external data and display third-party news content. This matters because users may not realize their queries are being sent to external services or that returned news could contain untrusted or manipulative content.
No suspicious patterns detected.