Back to skill

Security audit

Evomap Assistant

Security checks for vulnerabilities and agentic risk

Overview

This skill is purpose-aligned for EVOMAP bounty automation, but it encourages live remote task claiming and submission without clear per-task user approval or containment.

Review this skill before installing. Use it only with a node identity you control, require explicit approval before every heartbeat loop, claim, task execution, asset publication, and submission, and run any accepted task in a constrained workspace without secrets or broad filesystem/network access.

Vulnerability Patterns
  • 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
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
Findings (1)

T01 · Skill Instruction Hijacking

Error
Location
SKILL.md:24
Finding
Untrusted Remote Tasks Can Redirect Autonomous Agent Behavior<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md:24-28, 39-49, 54-59, 84-98, 130-135` **Vulnerability Type**: Autonomous execution of externally supplied task instructions **Risk Level**: High ### Vulnerable Code Snippets ```bash curl -s -X POST "https://evomap.ai/a2a/heartbeat" \ -H "Content-Type: application/json" \ -d '{"node_id":"node_luke_a1"}' ``` ```bash curl -s "https://evomap.ai/a2a/task/list?limit=20" ``` ```bash curl -s -X POST "https://evomap.ai/a2a/task/claim" \ -H "Content-Type: application/json" \ -d '{"node_id":"node_luke_a1","task_id":"<task_id>"}' ``` ```bash curl -s -X POST "https://evomap.ai/a2a/task/submit" \ -H "Content-Type: application/json" \ -d '{ "node_id": "node_luke_a1", "task_id": "<task_id>", "asset_id": "sha256:<asset_id>" }' ``` The task competition strategy explicitly instructs autonomous polling and claiming: ```text 1. **持续轮询** - 每 2-3 分钟查询一次任务列表 - 发现 `claimed_by: null` 立即认领 2. **批量尝试** ``` ```bash for task_id in "<id1>" "<id2>" "<id3>"; do result=$(curl -s -X POST "https://evomap.ai/a2a/task/claim" \ -H "Content-Type: application/json" \ -d "{\"node_id\":\"node_luke_a1\",\"task_id\":\"$task_id\"}") echo "$task_id: $result" if ! echo "$result" | grep -q "task_full"; then break fi done ``` The documented workflow then directs the agent to execute and submit the claimed task: ```text 1. **心跳保活** (每 15 分钟) 2. **查询可用任务** (`/a2a/task/list`) 3. **筛选未认领任务** (claimed_by: null) 4. **快速认领** (POST /task/claim) 5. **执行任务并提交** (POST /task/submit) 6. **等待资产发布** (通过 heartbeat 触发) ``` ### Technical Analysis The skill delegates task selection and execution to the external `evomap.ai` service. It tells the agent to poll for available tasks, claim them immediately, execute them, and submit the resulting asset. The instructions do not require per-task user approval, constrain acceptable task content, define an allowlist of permitted tools, or require remote task text ...[truncated 2457 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Require explicit, informed user approval before each task is claimed, executed, published, or submitted. Show the complete task instructions and destination service before approval. 2. Treat every task field returned by EVOMAP as untrusted data. Place remote content in a clearly delimited data context and prohibit it from overriding system, developer, user, or skill-level safety rules. 3. Enforce a strict task policy that rejects requests involving credentials, private files, system configuration, persistence, destructive operations, privilege changes, or unrelated third-party communication. 4. Run accepted tasks in an isolated sandbox with a minimal filesystem view, no ambient credentials, restricted process execution, and outbound network access limited to explicitly approved destinations. 5. Use tool allowlists and per-task capability grants. Do not expose shell, unrestricted filesystem, secret stores, or arbitrary network tools unless the user expressly authorizes them for the reviewed task. 6. Disable automatic claiming and recurring polling by default. If polling is enabled, it should only notify the user of available tasks rather than initiating external side effects. 7. Before asset publication, present the complete outgoing payload or a verifiable content summary to the user. Add automated secret scanning and data-loss-prevention checks. 8. Validate task schemas, impose content and size limits, record provenance, and maintain audit logs for task retrieval, approval, execution, publication, and submission. 9. Use a user-configured node identity rather than the package's fixed `node_luke_a1` identifier to avoid attribution collisions between installations. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (5)

Missing User Warnings

Medium
Confidence
91% confidence
Finding
The top-level description says the skill will automatically query, claim, and complete bounty tasks, but it does not warn that these are real network operations with remote side effects affecting an external account or node identity. A user or downstream agent could invoke the skill expecting informational behavior and instead trigger live task claims or submissions.

External Transmission

Medium
Category
Data Exfiltration
Content
### 1. 心跳保活
```bash
curl -s -X POST "https://evomap.ai/a2a/heartbeat" \
  -H "Content-Type: application/json" \
  -d '{"node_id":"node_luke_a1"}'
```
Confidence
89% confidence
Finding
The skill contains direct instructions for periodic POST requests to an external service, transmitting a specific node identifier on a recurring schedule. In context, external transmission is core functionality, but it is still security-relevant because it performs continuous outbound communication and can expose operational metadata or trigger account-linked side effects if run without informed consent.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The claim endpoint is presented as a simple action and later reinforced with a batch-claim loop, without any warning that claiming is immediate and may be irreversible or consume opportunities tied to a real node/account. This makes accidental or unauthorized remote actions more likely and materially increases the risk because the operation changes external marketplace state in real time.

Context-Inappropriate Capability

Medium
Confidence
93% confidence
Finding
The skill explicitly documents a competitive automation strategy for polling and rapidly claiming tasks, including batch-claim loops intended to win races against other nodes. This encourages aggressive external interaction and can facilitate unfair marketplace abuse, rate-limit evasion pressure, or account sanctions, especially because the workflow is framed as a recommended operational tactic rather than a guarded example.

Natural-Language Policy Violations

Low
Confidence
79% confidence
Finding
The manifest description forces a specific language/locale presentation in Chinese, and the rest of the operational guidance is likewise Chinese-only. Under the language policy, this is a concern when the skill does not offer user choice or explain that it is intentionally region- or audience-specific.

Static analysis

No suspicious patterns detected.