Back to skill

Security audit

uwillberich

Security checks for vulnerabilities and agentic risk

Overview

This finance-analysis skill is mostly coherent, but its install guidance and optional background polling create review-worthy local execution and persistence risks.

Avoid the one-line clone-and-run install commands unless the installer is independently reviewed, pinned, or verified. Treat the launchd/nohup news iterator as a background service: install it only if you want recurring network polling and local state under ~/.uwillberich, and confirm how to stop and remove it. Store only the Eastmoney key in the runtime env file and avoid putting unrelated secrets in the skill directory's .env files.

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
README.md:94
Finding

Unpinned Remote Repository Is Cloned and Its Installer Is Immediately Executed

Content
View full analysis

Vulnerability Details

File Location: README.md, lines 94–103
Vulnerability Type: Remote mutable payload retrieval and execution
Risk Level: High

Complete Code Snippet:

markdown
One-line install for Codex:

```bash
git clone https://github.com/huangrichao2020/uwillberich.git && cd uwillberich && ./install_skill.sh

One-line install for OpenClaw:

bash
git clone https://github.com/huangrichao2020/uwillberich.git && cd uwillberich && ./install_skill.sh openclaw
text

### Technical Analysis

The documented installation commands clone a mutable personal GitHub repository and immediately execute `install_skill.sh`. The installer is not included in the audited artifact, so its behavior and requested privileges cannot be assessed from this project snapshot.

The command does not pin a reviewed commit, verify a cryptographic checksum, require a signed release, or provide an inspection step before execution. Consequently, the effective executable payload can change after the Skill has been reviewed. This creates a time-of-review versus time-of-installation supply-chain gap.

GitHub is a legitimate code-hosting service, but that does not establish the integrity of future repository content. Compromise of the maintainer account, repository, release process, or default branch could turn the documented command into arbitrary local code execution.

### Attack Path

1. An attacker compromises the referenced GitHub account or repository, or otherwise obtains permission to modify its default branch.
2. The attacker replaces or modifies `install_skill.sh`, or another file invoked by that script, with a malicious payload.
3. A user or agent follows the documented one-line installation command.
4. `git clone` retrieves the attacker-controlled revision without pinning or integrity verification.
5. The shell immediately invokes `./install_skill.sh` with the installing user’s privileges.
6. The payload
...[truncated 978 chars]
Remediation
View remediation

Remediation Suggestions

  1. Remove the clone-and-immediately-execute one-line commands.
  2. Include the complete installer in the reviewed Skill artifact so its behavior can be audited.
  3. Publish versioned releases and pin installation to a specific reviewed commit or immutable release artifact.
  4. Publish a SHA-256 digest through a separate trusted channel and require verification before execution.
  5. Sign release tags or artifacts and document signature verification.
  6. Separate retrieval from execution so users can inspect the installer:
    bash
    git clone --branch vX.Y.Z --depth 1 https://github.com/huangrichao2020/uwillberich.git
    cd uwillberich
    # Verify the signed tag, commit, and documented checksum.
    less install_skill.sh
    ./install_skill.sh
    
  7. Prefer a non-executable installation procedure that copies the already reviewed Skill directory into the target location.
  8. Document every filesystem location changed by the installer, all network access it performs, and whether it creates scheduled tasks or startup entries.
  9. Explicitly instruct users not to run the installer with sudo or another elevated account.
Vulnerability Patterns
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Rogue AgentSelf-Modification, Session Persistence
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (92)

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

Runtime environment parsing, credential storage/removal, and local filesystem management are privileged support functions that materially broaden what the skill can do on a host. In context, this is risky because users may invoke a market-analysis skill without realizing it also handles credential lifecycle and local config/state management.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

Runtime environment parsing, credential storage/removal, and local filesystem management are privileged support functions that materially broaden what the skill can do on a host. In context, this is risky because users may invoke a market-analysis skill without realizing it also handles credential lifecycle and local config/state management.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

Runtime environment parsing, credential storage/removal, and local filesystem management are privileged support functions that materially broaden what the skill can do on a host. In context, this is risky because users may invoke a market-analysis skill without realizing it also handles credential lifecycle and local config/state management.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

Runtime environment parsing, credential storage/removal, and local filesystem management are privileged support functions that materially broaden what the skill can do on a host. In context, this is risky because users may invoke a market-analysis skill without realizing it also handles credential lifecycle and local config/state management.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

Runtime environment parsing, credential storage/removal, and local filesystem management are privileged support functions that materially broaden what the skill can do on a host. In context, this is risky because users may invoke a market-analysis skill without realizing it also handles credential lifecycle and local config/state management.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

Runtime environment parsing, credential storage/removal, and local filesystem management are privileged support functions that materially broaden what the skill can do on a host. In context, this is risky because users may invoke a market-analysis skill without realizing it also handles credential lifecycle and local config/state management.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
89% confidence
Finding

Runtime environment parsing, credential storage/removal, and local filesystem management are privileged support functions that materially broaden what the skill can do on a host. In context, this is risky because users may invoke a market-analysis skill without realizing it also handles credential lifecycle and local config/state management.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

Runtime environment parsing, credential storage/removal, and local filesystem management are privileged support functions that materially broaden what the skill can do on a host. In context, this is risky because users may invoke a market-analysis skill without realizing it also handles credential lifecycle and local config/state management.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

Runtime environment parsing, credential storage/removal, and local filesystem management are privileged support functions that materially broaden what the skill can do on a host. In context, this is risky because users may invoke a market-analysis skill without realizing it also handles credential lifecycle and local config/state management.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

Runtime environment parsing, credential storage/removal, and local filesystem management are privileged support functions that materially broaden what the skill can do on a host. In context, this is risky because users may invoke a market-analysis skill without realizing it also handles credential lifecycle and local config/state management.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

Runtime environment parsing, credential storage/removal, and local filesystem management are privileged support functions that materially broaden what the skill can do on a host. In context, this is risky because users may invoke a market-analysis skill without realizing it also handles credential lifecycle and local config/state management.

Content

No source excerpt is available for this finding.

Credential Access

High
Category
Privilege Escalation
Confidence
84% confidence
Finding

By including ROOT/.env in the search path, the script may ingest arbitrary repository secrets unrelated to Eastmoney integration. Even though this file does not itself transmit them, expanding secret scope into the running environment violates least privilege and can enable accidental disclosure or abuse by dependent components. The skill context does not justify access to all repo credentials, which raises the risk.

Content

Scanner excerpt · scripts/runtime_config.py (reported line 63)May include surrounding context.

python
custom = os.environ.get(env_var)
        if custom:
            paths.append(Path(custom).expanduser())
    paths.extend([DEFAULT_ENV_PATH, LEGACY_ENV_PATH, ROOT / ".env.local", ROOT / ".env"])

    deduped: list[Path] = []
    seen: set[str] = set()

Credential Access

High
Category
Privilege Escalation
Confidence
84% confidence
Finding

By including ROOT/.env in the search path, the script may ingest arbitrary repository secrets unrelated to Eastmoney integration. Even though this file does not itself transmit them, expanding secret scope into the running environment violates least privilege and can enable accidental disclosure or abuse by dependent components. The skill context does not justify access to all repo credentials, which raises the risk.

Content

Scanner excerpt · scripts/runtime_config.py (reported line 63)May include surrounding context.

python
custom = os.environ.get(env_var)
        if custom:
            paths.append(Path(custom).expanduser())
    paths.extend([DEFAULT_ENV_PATH, LEGACY_ENV_PATH, ROOT / ".env.local", ROOT / ".env"])

    deduped: list[Path] = []
    seen: set[str] = set()

Session Persistence

Medium
Category
Rogue Agent
Confidence
86% confidence
Finding

The README advertises a launchd installer for scheduled polling, which establishes persistence on the host by setting up recurring background execution. In context this appears intended for continuous news intake rather than stealth, but persistence mechanisms are security-relevant because they expand runtime exposure, enable repeated network activity, and can continue after the user forgets they are installed.

Content

Scanner excerpt · README.md (reported line 76)May include surrounding context.

md
- `scripts/mx_api.py`: Meixiang / Eastmoney API wrapper for live finance queries
- `scripts/mx_toolkit.py`: CLI wrapper for real news search, stock screen, structured data queries, and desk presets
- `scripts/benchmark_sources.py`: source latency / availability benchmark
- `scripts/install_news_iterator_launchd.py`: macOS launchd installer for scheduled polling
- `scripts/smoke_test.py`: local smoke test for the bundled scripts

## Agent Install

Skill Enumeration

Medium
Category
Agent Snooping
Confidence
85% confidence
Finding

Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Content

Scanner excerpt · README.md (reported line 90)May include surrounding context.

bash
git clone https://github.com/huangrichao2020/uwillberich.git
mkdir -p ~/.codex/skills
cp -R uwillberich/skill/uwillberich ~/.codex/skills/uwillberich

Session Persistence

Medium
Category
Rogue Agent
Confidence
60% confidence
Finding

Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Content

Scanner excerpt · README.md (reported line 90)May include surrounding context.

bash
git clone https://github.com/huangrichao2020/uwillberich.git
mkdir -p ~/.codex/skills
cp -R uwillberich/skill/uwillberich ~/.codex/skills/uwillberich

Session Persistence

Medium
Category
Rogue Agent
Confidence
60% confidence
Finding

Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Content

Scanner excerpt · README.md (reported line 126)May include surrounding context.

md
Without `EM_API_KEY`, the scripts will exit and print the application URL plus setup command.

- GitHub read access: only if the repo is private and an agent must clone it
- GitHub write access: only if an agent should push changes back
- Model-provider API keys: may be required by the host agent environment, but not by this skill itself

## Local Smoke Test

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
88% confidence
Finding

The skill advertises and orchestrates scripts with network, shell, file read/write, and environment-variable usage, but it does not declare any tool scope restrictions. That creates an unnecessary trust gap: an agent or user may invoke a seemingly benign market-analysis skill without being clearly informed that it can install background jobs, write local files, and access credentials.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The description says to use the skill when the user asks 'what A-shares may do tomorrow' or 'how to read the open,' which are broad natural-language requests rather than narrowly defined trigger phrases. It does not provide explicit boundaries or negative examples to distinguish when this skill should activate versus a general market-analysis response.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill enables implicit invocation without any visible trigger constraints or exclusion conditions, which can cause the agent to invoke this skill in broader contexts than intended. That increases the risk of prompt-routing abuse, accidental activation on loosely related user requests, or unintended reliance on untrusted skill instructions during unrelated conversations.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The JSON values for names, roles, and signal descriptions are entirely in Chinese throughout the watchlist definitions, with no indication that users can choose another language or that the file is limited to a Chinese-only audience. This creates a natural-language locale constraint embedded in the skill data that may violate language-choice policy.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

This JSON manifest defines activation triggers, so SQP-1 applies. In the oil/gas and related themes, terms like "gas", "shipping", "energy", and "power" are broad enough to match many unrelated discussions, making unintended skill invocation more likely without narrower scope or exclusion examples.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

This JSON preset embeds search/query strings entirely in Chinese, indicating the skill is designed to operate in a fixed language/locale. Under the policy criteria, forcing a specific language without user choice or an explicit region-specific justification is a natural-language policy violation.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The preset uses a Chinese-language news query for market scanning and does not provide any alternative language or user selection. This suggests a mandatory locale assumption rather than an opt-in or clearly justified regional constraint.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The manifest describes a skill focused on building next-session A-share game plans from market structure, macro shocks, policy timing, and watchlist leadership. This configuration materially broadens that scope by centering extensive English-language global news feeds and keyword/entity taxonomies for US tech firms, AI launches, and Middle East conflict themes, indicating a general global-news driven thematic mapping system rather than a narrowly A-share pre-open workflow.

Content

No source excerpt is available for this finding.