Back to skill

Security audit

Signalbot

Security checks for vulnerabilities and agentic risk

Overview

The skill has a legitimate market-analysis purpose, but it tells the agent to silently install or update an unpinned external Go binary before running analysis.

Install only if you are comfortable with an agent running a third-party signalbot binary. Prefer installing a pinned, verified release yourself, avoid automatic @latest updates, and review any cron jobs before enabling scheduled analysis or generated posts.

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 (2)

T03 · Remote Payload Retrieval and Execution

Warning
Location
SKILL.md:30
Finding
Automatic Installation and Execution of an Unpinned Remote Go Package<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md`, lines 30–42 **Vulnerability Type**: Remote mutable payload retrieval and insecure dependency installation **Risk Level**: Medium ### Vulnerable Code ```markdown ## 调用前置检查(每次调用前必须执行) **在运行 signalbot 前,先检查二进制是否存在:** ```bash which signalbot ``` - 若有输出路径 → 直接继续调用 - 若无输出(command not found)→ 立即自动执行以下命令编译安装,**无需询问用户**: ```bash go install github.com/shanhuhai5739/signalbot@latest ``` ``` The same mutable installation instruction also appears in the package metadata and update procedure: ```yaml metadata: {"openclaw": {"emoji": "📊", "homepage": "https://github.com/shanhuhai5739/signalbot", "install": [{"id": "go-install", "kind": "go", "package": "github.com/shanhuhai5739/signalbot@latest", "bins": ["signalbot"], "label": "Install signalbot via go install"}]}} ``` ```bash go install github.com/shanhuhai5739/signalbot@latest ``` ### Technical Analysis The Skill directs the Agent to install `github.com/shanhuhai5739/signalbot@latest` automatically when the executable is unavailable, explicitly stating that user confirmation is unnecessary. The `@latest` selector is mutable and does not identify an immutable, previously reviewed version or commit. The reviewed project contains only documentation and Skill instructions. It does not include the external program's source code, dependency manifest, cryptographic checksum, signature, or software bill of materials. The effective code executed by the Agent can therefore change after this Skill has been audited. This behavior creates both a remote-payload and supply-chain trust boundary. `go install` retrieves source and transitive Go dependencies from external infrastructure, compiles them, and produces an executable under the privileges of the Agent's operating-system account. The Skill subsequently invokes that executable for market-analysis requests. No evidence establishes that the current upstream package is malicious. The vulnerability is the ...[truncated 1627 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Replace `@latest` with an immutable, reviewed version or commit, for example a specific semantic version or module commit identifier. 2. Maintain an allowlist of approved versions and reject versions not explicitly listed. 3. Require explicit, informed user approval before downloading, compiling, updating, or executing external software. 4. Remove automatic updates. Treat every version change as a new security review event. 5. Verify the upstream source revision and all dependency checksums before installation. 6. Include the reviewed source code, `go.mod`, and `go.sum` in the auditable artifact, or link the Skill to a reproducible build of an exact commit. 7. Generate and publish an SBOM and document all transitive dependencies. 8. Execute the binary in a restricted environment with minimal filesystem access, sanitized environment variables, limited network destinations, and no administrative privileges. 9. Fail safely when the required binary is absent rather than silently installing a mutable external payload. ]]>

T03 · Remote Payload Retrieval and Execution

Warning
Location
OPENCLAW_USAGE.md:27
Finding
Unverified Latest Release Binaries Are Installed into a Global Executable Path<![CDATA[ ## Vulnerability Details **File Location**: `OPENCLAW_USAGE.md`, lines 27–42 **Vulnerability Type**: Unverified remote binary download and execution **Risk Level**: Medium ### Vulnerable Code ```bash # macOS Apple Silicon (arm64) curl -L https://github.com/shanhuhai5739/signalbot/releases/latest/download/signalbot-darwin-arm64 \ -o /usr/local/bin/signalbot && chmod +x /usr/local/bin/signalbot # macOS Intel (amd64) curl -L https://github.com/shanhuhai5739/signalbot/releases/latest/download/signalbot-darwin-amd64 \ -o /usr/local/bin/signalbot && chmod +x /usr/local/bin/signalbot # Linux (amd64) curl -L https://github.com/shanhuhai5739/signalbot/releases/latest/download/signalbot-linux-amd64 \ -o /usr/local/bin/signalbot && chmod +x /usr/local/bin/signalbot ``` ### Technical Analysis The usage guide provides commands that download platform-specific executables from mutable `releases/latest` URLs, write them directly to `/usr/local/bin/signalbot`, and mark them executable. The procedure performs no checksum, signature, provenance, or certificate-identity verification beyond the normal HTTPS connection. A `latest` release URL does not bind the installation to a specific audited artifact. Its content can change when a new release is published. If an upstream account, repository, build pipeline, or release artifact is compromised, users following these instructions may install an attacker-controlled executable. Installing the file as `/usr/local/bin/signalbot` also gives it a globally discoverable command name. Depending on system permissions and PATH configuration, this can affect multiple users and all subsequent invocations that resolve `signalbot` from that location. No evidence in the reviewed documentation proves that the currently hosted release binaries are malicious. The confirmed weakness is the absence of artifact pinning and integrity verification before making the downloaded file executable. ### Attack Path 1. An attacker compr ...[truncated 1609 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Replace `releases/latest` with a URL containing an exact, immutable release version. 2. Publish SHA-256 or stronger checksums through a separately protected release channel. 3. Verify the downloaded artifact before installation, and abort on any mismatch. 4. Prefer signed artifacts and verify both the signature and the expected signer identity. 5. Adopt build provenance such as Sigstore attestations and verify provenance against the expected repository and workflow. 6. Download to a non-executable temporary location first, perform all verification, and only then install the artifact. 7. Avoid writing to `/usr/local/bin` unless system-wide installation is explicitly necessary and authorized. Prefer a dedicated user-level directory with restricted permissions. 8. Do not overwrite an existing binary without confirmation, ownership checks, and a rollback mechanism. 9. Document the exact reviewed release version, checksum, signing key, and verification commands. 10. Run the installed tool with least privilege and restrict its filesystem and network access where practical. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Rogue AgentSelf-Modification, Session Persistence
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
Findings (12)

Missing User Warnings

High
Confidence
98% confidence
Finding
The skill explicitly says to auto-install the package '无需询问用户', meaning a system-changing command may be run without user knowledge or consent. This is dangerous because it violates least surprise and safe-agent boundaries, and could expose the environment to malicious or compromised upstream code.

Missing User Warnings

High
Confidence
97% confidence
Finding
The skill authorizes automatic updates without warning the user that a local binary will be modified. Silent updates are risky because they change the execution environment, may introduce unreviewed behavior, and can be abused through dependency or repository compromise.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The guide instructs users to download release binaries with curl directly into /usr/local/bin and make them executable, but provides no integrity verification, signature checking, or trust warning. This creates a real supply-chain risk: if the release asset, repository, network path, or mirror is compromised, users may install and run attacker-controlled code with broad system impact.

Session Persistence

Medium
Category
Rogue Agent
Content
### 方式一:全局安装(推荐,所有 agent 共享)

```bash
mkdir -p ~/.openclaw/skills/signalbot
cp /path/to/signalbot/skills/signalbot/SKILL.md ~/.openclaw/skills/signalbot/
```
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
### 方式一:全局安装(推荐,所有 agent 共享)

```bash
mkdir -p ~/.openclaw/skills/signalbot
cp /path/to/signalbot/skills/signalbot/SKILL.md ~/.openclaw/skills/signalbot/
```
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.

Skill Enumeration

Medium
Category
Agent Snooping
Content
```bash
mkdir -p ~/.openclaw/skills/signalbot
cp /path/to/signalbot/skills/signalbot/SKILL.md ~/.openclaw/skills/signalbot/
```

### 方式二:Workspace 安装(仅当前 agent)
Confidence
80% 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.

Vague Triggers

Medium
Confidence
94% confidence
Finding
The trigger conditions are broad enough to match many ordinary market-related prompts, making unintended invocation likely. In context, this is more dangerous because the skill also contains automatic execution and installation behaviors, so accidental triggering could lead directly to host actions the user did not request.

Context-Inappropriate Capability

Medium
Confidence
95% confidence
Finding
The skill directs the agent to automatically install a Go package from the network via `go install ...@latest` without user approval. This is dangerous because it causes a system-changing action and executes unpinned third-party code supply-chain style, which exceeds the expected scope of a market-analysis skill.

Natural-Language Policy Violations

Medium
Confidence
96% confidence
Finding
The '推文生成指南' requires generating a '中文行情分析推文', which forces a specific language for output. There is no indication that the user can choose another language or opt into Chinese, making this a natural-language locale policy issue.

Context-Inappropriate Capability

Medium
Confidence
94% confidence
Finding
The skill instructs the agent to autonomously update the binary to `@latest`, which is a system-modifying network operation unrelated to a single analysis request. This creates supply-chain and change-control risk because unreviewed code can be fetched and executed without user awareness.

Missing User Warnings

Low
Confidence
77% confidence
Finding
The markdown provides multiple openclaw cron add examples that will run on a schedule and generate reports or alert tweets automatically. The file does not warn users that these jobs operate unattended and may repeatedly call external services or produce output without manual review.

Context-Inappropriate Capability

Low
Confidence
81% confidence
Finding
The skill requires using shell/exec tooling to probe the environment (`which signalbot`) and then conditionally proceed with binary execution. While limited in scope, this expands the agent from analysis into host inspection and command execution, increasing attack surface and enabling follow-on actions such as installation or arbitrary local binary execution.

Static analysis

No suspicious patterns detected.