Back to skill

Security audit

SkillMarket

Security checks for vulnerabilities and agentic risk

Overview

Review before installing: this skill openly acts as a marketplace installer, but it can fetch changing third-party install instructions that may alter the agent's installed skills.

Install only if you are comfortable trusting the Zerone marketplace and the individual skill publishers. Before approving any install, read the exact commands, prefer signed or checksummed packages, avoid privileged execution, and use a sandbox or restricted environment where possible.

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

Warning
Location
SKILL.md:45
Finding
Remotely Mutable Installation Instructions May Lead to Untrusted Code Execution<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md:45-55`; supporting retrieval logic at `scripts/market.py:44-51` **Vulnerability Type**: Remote payload retrieval and execution without mandatory authenticity verification **Risk Level**: Medium ### Complete Code Snippets `SKILL.md:45-55`: ```markdown **SECURITY WARNING: DO NOT AUTO-RUN COMMANDS.** The installation tutorial will contain a set of steps or commands. Before executing any instructions: 1. **Require explicit user confirmation** before any install action. Show the commands to the user and ask for permission. 2. **Verify Integrity**: If the marketplace response provides signed packages or checksums, verify them. 3. **Review Manually/Sandbox**: Review the install tutorial text manually before execution or run installs in a sandbox. 4. **Restrict Privileges**: Restrict the installation from performing privileged filesystem or network actions unless you trust the marketplace maintainer. Only after explicit user approval, execute the instructions to install the skill into the `.agent/skills/` directory. ``` `scripts/market.py:44-51`: ```python def install_skill(name, framework): url = f"{ENDPOINT}/skills/{urllib.parse.quote(name)}/install?framework={urllib.parse.quote(framework)}&lang=en" data = fetch_json(url) if data: if isinstance(data, dict): print(json.dumps(data, indent=2, ensure_ascii=False)) else: print(data) ``` ### Technical Analysis The Skill retrieves installation tutorials from a remote, mutable marketplace endpoint and instructs the Agent that it may execute the returned commands after obtaining user approval. Integrity verification is only required **if** the marketplace happens to provide signatures or checksums. The workflow does not mandate a verified publisher identity, signed manifest, pinned artifact version, expected checksum, trusted download-host policy, or declarative installation schema. The retrieval funct ...[truncated 2204 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Require every installation response to include a signed manifest bound to the package name, publisher identity, version, framework, artifact URL, and cryptographic digest. 2. Verify signatures against a locally maintained trust store before presenting or executing installation actions. Reject unsigned or invalid responses rather than treating verification as optional. 3. Pin exact artifact versions and SHA-256 or stronger digests. Recalculate and compare the digest after download and before extraction or execution. 4. Replace free-form executable tutorials with a strict declarative schema containing an allowlisted set of installation operations. 5. Restrict artifact downloads to approved HTTPS origins and reject redirects to untrusted hosts. 6. Display publisher identity, requested filesystem paths, network destinations, and exact commands during confirmation. 7. Run installation in a sandbox with a minimal environment, restricted network access, no inherited credentials, no administrative privileges, and write access limited to the intended Skill directory. 8. Validate archive paths and reject absolute paths, traversal components, symlinks escaping the destination, executable startup hooks, and unexpected files. 9. Preserve an audit record containing the verified manifest, signature, artifact digest, commands approved by the user, and installation result. 10. Treat plain-text or otherwise unstructured marketplace responses as informational only and never as executable installation instructions. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (6)

Lp3

Medium
Category
MCP Least Privilege
Confidence
91% confidence
Finding
The skill performs network-backed discovery and installation actions but does not declare any explicit tool scope or allowed-tools boundary. That mismatch is dangerous because an agent may invoke network-capable scripts and process untrusted marketplace content without a clear permission model, increasing the chance of overbroad execution and supply-chain abuse.

External Transmission

Medium
Category
Data Exfiltration
Content
---
name: skill-market
description: Use this skill to find, explore, and install new skills from the Zerone Skill Market (https://api.zerone.market/api). Trigger this when the user asks to "add a skill", "install a skill", "browse skills", or mentions a skill name that is not currently installed.
---

# Skill Market
Confidence
88% confidence
Finding
The skill is explicitly designed to contact an external marketplace endpoint to discover and install new skills, which creates a real external data transmission and supply-chain trust boundary. Because the returned installation tutorial may influence later command execution or filesystem writes, compromise of the endpoint or malicious marketplace content could lead to installation of untrusted code or exfiltration through follow-on actions.

External Transmission

Medium
Category
Data Exfiltration
Content
Only after explicit user approval, execute the instructions to install the skill into the `.agent/skills/` directory.

## Current Environment Context
- **Market Endpoint:** `https://api.zerone.market/api`
- **Default Language:** `en` (English is used for API requests as per instructions)
- **Local Skills path:** `.agent/skills/`
Confidence
88% confidence
Finding
This second reference reinforces that the skill is configured around a fixed external API endpoint, so the risk is not incidental but core to operation. In the context of a skill installer, external content is especially dangerous because it can directly influence what gets written into `.agent/skills/` and what commands a user may be asked to approve.

External Transmission

Medium
Category
Data Exfiltration
Content
import urllib.request
import urllib.parse

ENDPOINT = "https://api.zerone.market/api"

def fetch_json(url):
    try:
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Natural-Language Policy Violations

Low
Confidence
91% confidence
Finding
The markdown explicitly states 'Default Language: en' and says English is used for API requests as per instructions. This imposes a language choice in the skill behavior without offering the user a locale option or documenting a justified region-specific constraint.

Natural-Language Policy Violations

Low
Confidence
97% confidence
Finding
The code hard-codes `lang=en` in every API call, which imposes a specific language setting on users with no opt-in or alternative. This matches the language/locale policy concern because the skill does not offer locale selection or explain why English is required.

Static analysis

No suspicious patterns detected.