Back to skill

Security audit

uwillberich

Security checks for vulnerabilities and agentic risk

Overview

The skill mostly matches its finance-analysis purpose, but its one-line remote installer and optional background polling need user review before installation.

Use the manual copy install from a reviewed checkout or pinned release, not the one-line git clone && ./install_skill.sh command. Configure EM_API_KEY only if you trust the Eastmoney/MX integration, expect recurring external network calls, and enable launchd/nohup polling only when you intentionally want a background local service writing state under ~/.uwillberich.

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 Immediately Executed<![CDATA[ ## Vulnerability Details **File Location**: `README.md`, lines 94-103 **Vulnerability Type**: Remote payload retrieval and execution through an unpinned Git repository **Risk Level**: High ### Vulnerable Code ```bash One-line install for Codex: git clone https://github.com/huangrichao2020/uwillberich.git && cd uwillberich && ./install_skill.sh One-line install for OpenClaw: git clone https://github.com/huangrichao2020/uwillberich.git && cd uwillberich && ./install_skill.sh openclaw ``` ### Technical Analysis The documented installation commands clone the current default branch of a personal GitHub repository and immediately execute `install_skill.sh`. No immutable commit hash, signed release, checksum, or local review step constrains the downloaded payload. Consequently, the code executed by these commands is not necessarily the same code that was reviewed in this audit. The effective installation payload can change whenever the repository owner updates the default branch. It could also change if the repository, maintainer account, access token, or release process is compromised. The `&&` chain causes the installer to run automatically after a successful clone, eliminating a meaningful inspection boundary between retrieval and execution. Although this is a user-initiated installation command, it creates a direct remote code execution channel and exceeds the minimum trust necessary to copy a text-based Skill into an agent directory. No malicious implementation of `install_skill.sh` was present in the audited artifact, so this finding concerns the mutable remote execution mechanism rather than a confirmed malicious installer body. ### Attack Path 1. An attacker compromises the repository owner’s GitHub account, gains repository write access, or otherwise causes the default branch to serve a modified `install_skill.sh`. 2. The attacker adds commands to the installer that perform actions under the installing user’s account. 3. A user follows ei ...[truncated 1493 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. **Do not clone and execute in one command.** Separate download, inspection, verification, and execution into distinct documented steps. 2. **Pin installation to an immutable revision.** For example: ```bash git clone https://github.com/huangrichao2020/uwillberich.git cd uwillberich git checkout --detach <reviewed-full-commit-hash> ``` The full commit hash should be published through a trusted release channel. 3. **Publish signed, versioned releases.** Prefer a tagged release whose Git tag or commit is cryptographically signed and whose signer identity is documented. 4. **Publish and verify checksums.** If distributing an archive, provide a SHA-256 digest through a separately protected channel and require verification before extraction or execution. 5. **Require installer inspection.** Document commands such as: ```bash sed -n '1,240p' install_skill.sh ``` Only execute the script after verification. 6. **Prefer a non-executable installation path.** Since the audited Skill consists of text resources and standard-library Python scripts, provide explicit copy commands from a verified local checkout rather than relying on an installer. 7. **Minimize installer permissions.** The installer should: - Never invoke `sudo`. - Write only to the selected Skill directory. - Avoid modifying shell startup files or unrelated agent configuration. - Avoid reading credentials. - Fail before making changes if destination paths are unexpected. 8. **Add release provenance.** Use a reproducible release process and publish build provenance or attestations so users can establish that the distributed artifact corresponds to the reviewed source. 9. **Document uninstall and changed files.** Clearly enumerate every path created or modified by installation so users can review and reverse the operation. ]]>
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 (86)

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding
Local credential management, environment loading from multiple locations, API-key write/update commands, and creation of local runtime directories are materially more sensitive than the narrow analytical description suggests. This is dangerous because skills that read and write credential files can mishandle secrets, overwrite user configuration, or encourage broad environment access without clear scoping and review.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding
Local credential management, environment loading from multiple locations, API-key write/update commands, and creation of local runtime directories are materially more sensitive than the narrow analytical description suggests. This is dangerous because skills that read and write credential files can mishandle secrets, overwrite user configuration, or encourage broad environment access without clear scoping and review.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding
Local credential management, environment loading from multiple locations, API-key write/update commands, and creation of local runtime directories are materially more sensitive than the narrow analytical description suggests. This is dangerous because skills that read and write credential files can mishandle secrets, overwrite user configuration, or encourage broad environment access without clear scoping and review.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding
Local credential management, environment loading from multiple locations, API-key write/update commands, and creation of local runtime directories are materially more sensitive than the narrow analytical description suggests. This is dangerous because skills that read and write credential files can mishandle secrets, overwrite user configuration, or encourage broad environment access without clear scoping and review.

Tp4

High
Category
MCP Tool Poisoning
Confidence
94% confidence
Finding
Local credential management, environment loading from multiple locations, API-key write/update commands, and creation of local runtime directories are materially more sensitive than the narrow analytical description suggests. This is dangerous because skills that read and write credential files can mishandle secrets, overwrite user configuration, or encourage broad environment access without clear scoping and review.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
Local credential management, environment loading from multiple locations, API-key write/update commands, and creation of local runtime directories are materially more sensitive than the narrow analytical description suggests. This is dangerous because skills that read and write credential files can mishandle secrets, overwrite user configuration, or encourage broad environment access without clear scoping and review.

Tp4

High
Category
MCP Tool Poisoning
Confidence
90% confidence
Finding
Local credential management, environment loading from multiple locations, API-key write/update commands, and creation of local runtime directories are materially more sensitive than the narrow analytical description suggests. This is dangerous because skills that read and write credential files can mishandle secrets, overwrite user configuration, or encourage broad environment access without clear scoping and review.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding
Local credential management, environment loading from multiple locations, API-key write/update commands, and creation of local runtime directories are materially more sensitive than the narrow analytical description suggests. This is dangerous because skills that read and write credential files can mishandle secrets, overwrite user configuration, or encourage broad environment access without clear scoping and review.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding
Local credential management, environment loading from multiple locations, API-key write/update commands, and creation of local runtime directories are materially more sensitive than the narrow analytical description suggests. This is dangerous because skills that read and write credential files can mishandle secrets, overwrite user configuration, or encourage broad environment access without clear scoping and review.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding
Local credential management, environment loading from multiple locations, API-key write/update commands, and creation of local runtime directories are materially more sensitive than the narrow analytical description suggests. This is dangerous because skills that read and write credential files can mishandle secrets, overwrite user configuration, or encourage broad environment access without clear scoping and review.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
Local credential management, environment loading from multiple locations, API-key write/update commands, and creation of local runtime directories are materially more sensitive than the narrow analytical description suggests. This is dangerous because skills that read and write credential files can mishandle secrets, overwrite user configuration, or encourage broad environment access without clear scoping and review.

Credential Access

High
Category
Privilege Escalation
Content
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()
Confidence
60% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
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()
Confidence
60% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Missing User Warnings

Medium
Confidence
90% confidence
Finding
The skill advertises continuous news watching and scheduled background polling, which can create ongoing network activity, local state collection, and periodic writes without an upfront warning about system impact or privacy implications. In an agent-skill context, background behavior is more sensitive because users may not expect a documentation-described workflow to include long-running monitoring components.

Session Persistence

Medium
Category
Rogue Agent
Content
- `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
Confidence
84% confidence
Finding
The README includes a launchd installer for scheduled polling, which establishes persistence on the local machine. While this appears intended for convenience, persistence mechanisms are security-relevant because they can continue running after the initial session, generate background traffic, and maintain state without continuous user attention.

Skill Enumeration

Medium
Category
Agent Snooping
Content
```bash
git clone https://github.com/huangrichao2020/uwillberich.git
mkdir -p ~/.codex/skills
cp -R uwillberich/skill/uwillberich ~/.codex/skills/uwillberich
```
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.

Session Persistence

Medium
Category
Rogue Agent
Content
```bash
git clone https://github.com/huangrichao2020/uwillberich.git
mkdir -p ~/.codex/skills
cp -R uwillberich/skill/uwillberich ~/.codex/skills/uwillberich
```
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.

Session Persistence

Medium
Category
Rogue Agent
Content
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
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.

Lp3

Medium
Category
MCP Least Privilege
Confidence
91% confidence
Finding
The skill advertises and documents scripts that require shell, network, environment-variable access, and local file reads/writes, yet it declares no explicit tool scope or permissions boundary. That mismatch increases the chance an agent executes broader capabilities than a reviewer or user would expect, especially because the skill also handles credentials and remote API calls.

Vague Triggers

Medium
Confidence
92% confidence
Finding
The skill enables implicit invocation without any visible trigger constraints, so the agent may auto-select this skill in broader contexts than intended. While this file does not show direct prompt injection or code execution risk, ambiguous activation can cause unintended use of market-analysis logic, increasing the chance of irrelevant or misleading financial guidance being surfaced to users.

Vague Triggers

Medium
Confidence
91% confidence
Finding
The oil/gas theme uses broad trigger terms such as 'gas', 'shipping', and geopolitical country names that can match many unrelated market narratives. In this skill, those matches can incorrectly activate a conflict-sensitive theme and distort sector/game-plan outputs, making the agent over-weight war or energy interpretations from weak evidence.

Vague Triggers

Medium
Confidence
89% confidence
Finding
The IDC/power theme includes generic triggers like 'power', 'electricity', and 'data center', which are common across many financial and non-financial discussions. In a pre-open A-share planning skill, this ambiguity can spuriously route analysis into the wrong theme and produce misleading sector-strength or cost-shock conclusions.

Natural-Language Policy Violations

Medium
Confidence
91% confidence
Finding
Multiple Google News feed URLs explicitly force the locale and region to `hl=en-US`, `gl=US`, and `ceid=US:en`. This imposes a specific language/locale policy in configuration without any indication of user opt-in or a documented region-specific requirement.

Description-Behavior Mismatch

Medium
Confidence
92% confidence
Finding
The document describes a persistent RSS polling and local storage system, which materially expands the skill from a next-session A-share planning aid into an autonomous background data-ingestion component. That creates additional attack surface and operational risk because users may enable unattended collection, retention, and downstream decision inputs without that behavior being clearly bounded by the skill's stated purpose.

Description-Behavior Mismatch

Medium
Confidence
90% confidence
Finding
Automatically converting alerts into event-driven stock pools moves the skill from passive analysis support into autonomous signal generation that can influence trading decisions without manual review. In context, this is dangerous because noisy or manipulated public headlines could be transformed directly into watchlists, increasing the risk of unintended or low-quality outputs being treated as actionable.

Static analysis

No suspicious patterns detected.