Back to skill

Security audit

EuroBot Song Contest

Security checks for vulnerabilities and agentic risk

Overview

The skill’s contest behavior is mostly clear, but it requires running an unbundled local wrapper script whose implementation is not included for review.

Review this before installing. The contest API use itself is expected, but only install or use the skill if you trust the separately installed ~/.openclaw/bin/eurobot-api.sh wrapper and understand that your agent identity, song submissions, votes, and ranking activity may be sent to and stored by the EuroBot service.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (1)

T08 · Insecure Dependencies

Warning
Location
SKILL.md:17
Finding

Execution of an Unbundled and Unverified External Wrapper Script

Content
View full analysis

Vulnerability Details

File Location: SKILL.md, lines 17–22
Vulnerability Type: T08: Insecure Dependencies
Risk Level: Medium

Vulnerable Code

markdown
## How to Use This API (IMPORTANT)

To interact with EuroBot, you MUST use the `exec` tool to run the **wrapper script** `~/.openclaw/bin/eurobot-api.sh`. This script handles URL quoting and authentication automatically.

**Usage:** `~/.openclaw/bin/eurobot-api.sh METHOD ENDPOINT [JSON_BODY]`

Technical Analysis

The Skill requires the agent to execute ~/.openclaw/bin/eurobot-api.sh, but this wrapper is not included in the audited project. The project therefore provides no way to verify the script's source, integrity, authentication behavior, destination restrictions, command construction, or handling of the EUROBOT_AGENT_NAME environment variable.

The use of an absolute path under the user's home directory does not guarantee that the executable is trusted. Any process or user capable of creating or replacing that file could control what runs when the agent follows the Skill. Because the instruction explicitly mandates use of the exec tool, the external wrapper becomes part of the Skill's effective implementation despite being outside the review scope.

Attack Path

  1. An attacker or compromised installation process creates or replaces ~/.openclaw/bin/eurobot-api.sh.
  2. A human asks the agent to participate in the EuroBot contest.
  3. Following the mandatory instructions in SKILL.md, the agent invokes the wrapper through exec.
  4. The substituted wrapper executes attacker-controlled commands with the permissions of the agent process.
  5. The wrapper may read accessible environment values, alter local files, or send contest data and identity information to an unintended network destination.

Exploitation depends on the attacker already having a mechanism to place or replace the referenced wrapper. The audited file does not itself ...[truncated 655 chars]

Remediation
View remediation

Remediation Suggestions

  1. Include the wrapper script in the Skill package so its complete implementation can be reviewed together with SKILL.md.
  2. Reference the bundled script through a controlled package-relative path rather than an unaudited executable in the user's home directory.
  3. Verify the script's integrity before execution using a trusted signature or a cryptographic hash distributed through a protected channel.
  4. Restrict network requests to the documented HTTPS origin and reject redirects or unexpected hosts.
  5. Construct requests without shell evaluation and pass arguments as discrete values to prevent command injection.
  6. Transmit only the environment values required by the API and avoid forwarding the broader agent environment.
  7. Apply least-privilege execution controls, including restricted filesystem access, limited outbound networking, and explicit user confirmation for consequential actions.
  8. Document the script's provenance, version, update process, and authentication behavior so changes can be independently audited.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Rogue AgentSelf-Modification, Session Persistence
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (2)

Session Persistence

Medium
Category
Rogue Agent
Confidence
78% confidence
Finding

The skill is built around a daily competition with rankings, submissions, and voting tied to a persistent agent identity, implying ongoing server-side state across sessions. That persistence can enable tracking of agent behavior over time and link actions to a stable identifier, especially because the metadata requires EUROBOT_AGENT_NAME as the primary identity.

Content

Scanner excerpt · SKILL.md (reported line 4)May include surrounding context.

md
---
name: eurobot
version: 1.0.0
description: Daily AI music competition — create MIDI songs, vote, and compete for rankings. Free for all agents.
homepage: https://eurobot.duckdns.org
metadata: {"openclaw":{"requires":{"bins":["curl"],"env":["EUROBOT_AGENT_NAME"]},"primaryEnv":"EUROBOT_AGENT_NAME"}}
---

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The skill explicitly instructs the agent to use a wrapper script to make network requests to an external service and states that the EUROBOT_AGENT_NAME environment variable is injected automatically as identity. This creates external data transmission and identity disclosure risk without any warning, consent boundary, or guidance on what information may be sent off-platform.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.