Dangerous exec
- Finding
- Shell command execution detected (child_process).
Security checks across static analysis, malware telemetry, and agentic risk
The skill mostly matches its investment-report purpose, but it builds a shell command from user-provided stock inputs and runs an undeclared helper script, creating a local code-execution/provenance risk.
Review before installing. Only use trusted stock/name inputs, verify the referenced tavily-search helper under ~/.openclaw is legitimate, and prefer a fixed version that avoids shell execution. Use a limited Tavily API key and remember the generated investment content should be checked independently.
VirusTotal findings are pending for this skill version.
Artifact-based informational review of SKILL.md, metadata, install specs, static scan signals, and capability signals. ClawScan does not execute the skill or run runtime probes.
A malicious or malformed stock name/code could cause unintended local commands to run with the user's permissions.
The query is built from command-line stock/name inputs and then interpolated into a shell command string executed by execSync. Inputs containing shell metacharacters or quotes could change the command that runs.
options.stock = args[++i]; ... options.name = args[++i]; ... const cmd = `node "${tavilySearchScript}" "${query}" -n ${maxResults} ...`; ... execSync(cmd, {Replace execSync string execution with execFile/spawn using an argument array, or call the Tavily API directly; validate stock codes/names and do not pass untrusted text through a shell.
If that external helper is missing, replaced, or incompatible, the skill may fail or run unreviewed code while using the user's environment and API key.
The skill executes a helper script from a separate local skill path that is not included in this package's manifest or declared installation requirements, leaving the executed code's provenance and version outside this review.
const tavilySearchScript = path.join(process.env.HOME, '.openclaw', 'skills', 'tavily-search', 'scripts', 'search.mjs');
Bundle or pin the required helper, declare it as a dependency, and verify the exact file before execution; preferably avoid shelling out to another skill.
The Tavily key is needed for the stated functionality, but any invoked helper process can access it.
The skill uses a Tavily API key, which is expected for Tavily search, and passes it to the child process used for searching.
const TAVILY_API_KEY = process.env.TAVILY_API_KEY; ... env: { ...process.env, TAVILY_API_KEY }Use a Tavily key with appropriate limits/quotas and only run this skill with a trusted, verified Tavily helper implementation.