Back to skill

Security audit

FinResearchClaw

Security checks for vulnerabilities and agentic risk

Overview

The skill is finance-research focused, but its helper scripts can fetch and install mutable GitHub code and run a workflow with approvals disabled.

Install only if you trust the FinResearchClaw GitHub repository and are comfortable with local code execution. Before running helpers, review the checked-out commit, avoid `--auto-approve` unless you are in a controlled environment, and prefer a sandbox or least-privilege workspace with no unnecessary credentials.

Vulnerability Patterns
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
Findings (1)

T03 · Remote Payload Retrieval and Execution

Error
Location
scripts/install_or_update.sh:4
Finding

Mutable Remote Repository Is Installed and Executed Without Integrity Verification

Content
View full analysis

Vulnerability Details

File Location: scripts/install_or_update.sh:4-19, scripts/run_finance_example.sh:19-24
Vulnerability Type: Remote payload retrieval and execution
Risk Level: High

The installation helper clones or fetches content from a mutable remote Git repository without pinning an audited commit or verifying a cryptographic signature or checksum:

bash
REPO_DIR="${1:-$HOME/.openclaw/workspace/AutoResearchClaw}"
REPO_URL="https://github.com/ChipmunkRPA/FinResearchClaw.git"

mkdir -p "$(dirname "$REPO_DIR")"

if [ -d "$REPO_DIR/.git" ]; then
  echo "Updating existing repo metadata at $REPO_DIR"
  git -C "$REPO_DIR" remote get-url origin >/dev/null 2>&1 || true
  git -C "$REPO_DIR" fetch --all --prune
  CURRENT_BRANCH="$(git -C "$REPO_DIR" branch --show-current || true)"
  echo "Current branch: ${CURRENT_BRANCH:-unknown}"
  echo "Fetched latest refs. Review/merge manually if you do not want automatic fast-forwards."
else
  echo "Cloning FinResearchClaw into $REPO_DIR"
  git clone "$REPO_URL" "$REPO_DIR"
fi

The example runner subsequently installs the checked-out project in editable mode and executes its CLI with automatic approval enabled:

bash
cd "$REPO_DIR"
python3 -m venv .venv >/dev/null 2>&1 || true
source .venv/bin/activate
python -m pip install -e .
researchclaw run --config "$CONFIG_PATH" --auto-approve

Technical Analysis

The effective code payload is controlled by the current contents of an external repository rather than an immutable, previously audited revision. A fresh clone checks out the remote repository's current default branch. Although the update path only fetches references and does not explicitly merge them, the fresh-install path remains mutable, and users may later update or merge fetched content.

Running python -m pip install -e . treats the retrieved repository as executable package source. Depending on its Python packaging con ...[truncated 2031 chars]

Remediation
View remediation

Remediation Suggestions

  1. Pin installation to a specific, reviewed commit hash or immutable signed release rather than the current default branch.
  2. Verify the downloaded revision before installation using a trusted commit or tag signature and an independently maintained allowlist of expected commit hashes.
  3. Refuse execution when the checked-out commit differs from the approved revision, and display the exact remote URL and commit identifier before proceeding.
  4. Use a locked dependency set with cryptographic hashes, such as a generated lock file and hash-enforced installation, to reduce transitive supply-chain risk.
  5. Avoid editable installation for routine execution. Build a reproducible artifact from the verified source and install that artifact into an isolated environment.
  6. Remove --auto-approve from the default command. Require explicit, informed user opt-in after showing the selected configuration and planned operations.
  7. Execute the retrieved workflow in a sandbox or container with minimal filesystem access, restricted network access, no unnecessary credentials, and no elevated privileges.
  8. For existing clones, validate that the configured origin exactly matches the expected repository before fetching. Do not rely only on the presence of a .git directory.
Vulnerability Patterns
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (7)

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The skill is presented primarily as finance research automation, but it also instructs the agent to clone or update a GitHub repository and execute bundled shell scripts. That hidden operational behavior expands the trust boundary from local research orchestration to network access and code execution, which can lead to unintended system modification or execution of unreviewed remote code if the user or reviewer does not realize those side effects are part of the skill.

Content

No source excerpt is available for this finding.

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
92% confidence
Finding

The duplicated finding on --auto-approve is valid because the flag explicitly enables autonomous decision-making without user intervention. Given this skill's direct CLI fallback also includes environment setup and package installation in a local clone tied to a remote repository, disabling approvals reduces oversight and can magnify the effect of misconfiguration, prompt injection in downstream inputs, or malicious repo changes.

Content

Scanner excerpt · references/examples.md (reported line 44)May include surrounding context.

cd ~/.openclaw/workspace/AutoResearchClaw python3 -m venv .venv && source .venv/bin/activate pip install -e . researchclaw run --config examples/finance_event_study.config.yaml --auto-approve

text

## Notes

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
92% confidence
Finding

The duplicated finding on --auto-approve is valid because the flag explicitly enables autonomous decision-making without user intervention. Given this skill's direct CLI fallback also includes environment setup and package installation in a local clone tied to a remote repository, disabling approvals reduces oversight and can magnify the effect of misconfiguration, prompt injection in downstream inputs, or malicious repo changes.

Content

Scanner excerpt · references/examples.md (reported line 44)May include surrounding context.

cd ~/.openclaw/workspace/AutoResearchClaw python3 -m venv .venv && source .venv/bin/activate pip install -e . researchclaw run --config examples/finance_event_study.config.yaml --auto-approve

text

## Notes

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
94% confidence
Finding

This is the same underlying issue: the explicit --auto-approve option suppresses human-in-the-loop safeguards for an agentic workflow. In an automation script intended to simplify execution, users may run it expecting a routine example, while the repository-controlled workflow can make consequential decisions or trigger side effects automatically.

Content

Scanner excerpt · scripts/run_finance_example.sh (reported line 24)May include surrounding context.

sh
python3 -m venv .venv >/dev/null 2>&1 || true
source .venv/bin/activate
python -m pip install -e .
researchclaw run --config "$CONFIG_PATH" --auto-approve

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
94% confidence
Finding

This is the same underlying issue: the explicit --auto-approve option suppresses human-in-the-loop safeguards for an agentic workflow. In an automation script intended to simplify execution, users may run it expecting a routine example, while the repository-controlled workflow can make consequential decisions or trigger side effects automatically.

Content

Scanner excerpt · scripts/run_finance_example.sh (reported line 24)May include surrounding context.

sh
python3 -m venv .venv >/dev/null 2>&1 || true
source .venv/bin/activate
python -m pip install -e .
researchclaw run --config "$CONFIG_PATH" --auto-approve

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The script launches an autonomous research workflow with --auto-approve, meaning downstream actions can proceed without any interactive confirmation from the user. In a finance research skill, that increases the chance of unintended code execution, network access, data processing, or other side effects from repository-defined workflows, especially because the script also installs the package from the local repo before running it.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
87% confidence
Finding

The markdown instructs the agent to run install/update and helper shell scripts, including via bash, without an explicit warning that these actions modify the local system and may execute arbitrary code from the repository. In this context, encouraging direct execution of shell scripts from a cloned repo increases the risk of supply-chain compromise, unsafe persistence, or unintended environment changes.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.