Back to skill

Security audit

Agentplace

Security checks for vulnerabilities and agentic risk

Overview

The skill is a coherent marketplace installer, but its install flow can persistently add third-party skills without strong package verification or safe extraction controls.

Install only if you trust Agentplace and the specific agent publisher. Before installing agents through this workflow, prefer a version with signed packages or published SHA-256 checksums, safe temporary directories, full archive inspection, and a clear way to remove installed skills. Do not paste real API keys into prompts or shared transcripts.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • 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
Findings (4)

T08 · Insecure Dependencies

Error
Location
skill.md:88
Finding
Unverified Third-Party Agent Package Installation<![CDATA[ ## Vulnerability Details **File Location**: `skill.md`, lines 88-125 **Vulnerability Type**: Third-party supply-chain compromise through unverified package retrieval **Risk Level**: High ### Vulnerable Code ```sh Free agent: curl -s https://api.agentplace.sh/marketplace/agents/<agent-id>/download Paid agent: curl -s -H "x-api-key: ak_xxxx" https://api.agentplace.sh/marketplace/agents/<agent-id>/download Example response: { "download_url": "https://cdn.agentplace.sh/agents/example.zip", "version": "1.0.0", "tier": "free" } Step 3 — Download agent package curl -sL "$download_url" -o /tmp/agent.zip Step 4 — Preview contents zipinfo -1 /tmp/agent.zip unzip -p /tmp/agent.zip SKILL.md > /tmp/agent-SKILL.md cat /tmp/agent-SKILL.md Step 5 — Final confirmation Install this agent now? (yes/no) Step 6 — Install locally unzip -qo /tmp/agent.zip -d /tmp/agent-preview/ mv /tmp/agent-preview ~/.openclaw/workspace/skills/<agent-id>/ rm /tmp/agent.zip ``` ### Technical Analysis The installation procedure trusts a `download_url` returned dynamically by the marketplace API and follows redirects through `curl -L`. It does not require the URL to belong to an approved origin and does not verify a cryptographic digest, signed manifest, publisher signature, or immutable package identity. Consequently, the package reviewed and installed is authenticated only by transport security at the URL ultimately contacted. A compromised marketplace API, CDN, publisher account, DNS path, or redirect destination could provide a package different from the expected artifact. The documented manual marketplace review is an administrative control and is not cryptographically bound to the downloaded bytes. Although the package is not immediately executed by these commands, it is installed into the OpenClaw skills directory. Its instructions or packaged components may subsequently be loaded or invoked with the permissions of the OpenClaw process. ### Attack Path 1. An ...[truncated 1197 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Return an immutable package version, SHA-256 digest, package size, and signed manifest from the metadata endpoint. 2. Verify the digest and a signature rooted in a trusted publisher or marketplace key before previewing or installing the archive. 3. Permit downloads only from an explicit HTTPS hostname allowlist. 4. Disable redirects or validate every redirect target, scheme, port, and resolved address before following it. 5. Bind the final user confirmation to the verified package name, version, publisher, and digest. 6. Reject packages whose verified identity differs between preview and installation. 7. Record provenance information so installed files can be traced to a specific signed release. 8. Perform independent static inspection of every archive member rather than relying solely on claimed marketplace review. ]]>

T08 · Insecure Dependencies

Error
Location
skill.md:105
Finding
Incomplete Security Review of Agent Archive Contents<![CDATA[ ## Vulnerability Details **File Location**: `skill.md`, lines 105-125 **Vulnerability Type**: Insufficient inspection of third-party package contents **Risk Level**: High ### Vulnerable Code ```sh Step 4 — Preview contents zipinfo -1 /tmp/agent.zip unzip -p /tmp/agent.zip SKILL.md > /tmp/agent-SKILL.md cat /tmp/agent-SKILL.md Step 5 — Final confirmation Install this agent now? (yes/no) Step 6 — Install locally unzip -qo /tmp/agent.zip -d /tmp/agent-preview/ mv /tmp/agent-preview ~/.openclaw/workspace/skills/<agent-id>/ rm /tmp/agent.zip ``` ### Technical Analysis The preview process displays archive member names and the contents of only the top-level `SKILL.md`. It does not inspect the contents of scripts, executable files, nested archives, secondary instruction files, symbolic links, binary payloads, or configuration files. A benign `SKILL.md` therefore does not establish that the remaining package contents implement the described behavior. Filename listing also does not reliably reveal the semantics of scripts or distinguish safe data from malicious executable content. The final installation step extracts and installs every archive member, including files that were not substantively reviewed. This creates a review-to-install gap that can be exploited by placing the harmful behavior outside `SKILL.md`. ### Attack Path 1. An attacker publishes or substitutes an archive containing a plausible, harmless `SKILL.md`. 2. Malicious behavior is placed in another script, configuration file, nested archive, or instruction file. 3. `zipinfo -1` displays the filename but does not analyze its behavior. 4. Only `SKILL.md` is rendered for the user. 5. The user approves installation based on the incomplete preview. 6. All unreviewed archive members are extracted and installed. 7. If a concealed component is later loaded or invoked, it can act with the permissions granted to the OpenClaw process. ### Impact Assessment The issue allows undisclosed packa ...[truncated 400 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Define and enforce a strict package schema listing permitted paths, file types, sizes, and entry points. 2. Recursively inspect all text files and scripts before requesting final confirmation. 3. Reject binaries, nested archives, links, device entries, and unexpected executable files unless explicitly supported and separately reviewed. 4. Run static analysis and malware scanning against every package member. 5. Present the user with a complete manifest containing each path, type, size, permissions, and cryptographic digest. 6. Show all executable or instruction-bearing content, not only `SKILL.md`. 7. Ensure that the exact verified archive is installed after approval, without redownloading or modifying it. 8. Consider installing third-party skills in a sandbox with minimal filesystem, network, credential, and tool permissions. ]]>

T09 · Insecure Skill Coding Practices

Warning
Location
skill.md:100
Finding
Unsafe Archive Extraction and Predictable Temporary Paths<![CDATA[ ## Vulnerability Details **File Location**: `skill.md`, lines 100-125 **Vulnerability Type**: Unsafe temporary-file and archive extraction handling **Risk Level**: Medium ### Vulnerable Code ```sh Step 3 — Download agent package curl -sL "$download_url" -o /tmp/agent.zip Step 4 — Preview contents zipinfo -1 /tmp/agent.zip unzip -p /tmp/agent.zip SKILL.md > /tmp/agent-SKILL.md cat /tmp/agent-SKILL.md Step 5 — Final confirmation Install this agent now? (yes/no) Step 6 — Install locally unzip -qo /tmp/agent.zip -d /tmp/agent-preview/ mv /tmp/agent-preview ~/.openclaw/workspace/skills/<agent-id>/ rm /tmp/agent.zip ``` ### Technical Analysis The procedure uses fixed paths in the shared `/tmp` directory without securely creating a private working directory. Existing files, directories, or symbolic links at `/tmp/agent.zip`, `/tmp/agent-SKILL.md`, or `/tmp/agent-preview/` are not checked or removed safely. The extraction process also lacks explicit validation of normalized archive member paths, symbolic links, special files, archive size, expansion ratio, member count, and total extracted size. The quiet overwrite option can conceal replacement of existing temporary content. Stale files in an existing preview directory may also be included when the entire directory is moved into the skills workspace. The exact behavior of crafted paths depends on the installed ZIP implementation and platform protections, but the workflow does not establish the required safety invariants. ### Attack Path 1. A local attacker or previous failed run creates files, directories, or links at one of the predictable temporary paths. 2. Alternatively, a malicious package supplies traversal-like paths, links, excessive member counts, or highly compressed content. 3. The workflow writes to or extracts into those paths without secure exclusive creation or pre-validation. 4. Existing content may be overwritten, stale content may remain, or resource exhaustion may occur. 5. ...[truncated 677 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Create a unique private directory with `mktemp -d` and permissions limited to the current user. 2. Place the downloaded archive, preview output, and extraction directory under that private directory. 3. Abort if secure exclusive creation fails; do not reuse fixed or pre-existing paths. 4. Register a guarded cleanup trap and remove only paths proven to be inside the generated temporary directory. 5. Before extraction, normalize and validate every archive member name. 6. Reject absolute paths, parent-directory traversal, symbolic and hard links, device files, FIFOs, sockets, and unexpected permission bits. 7. Enforce limits for compressed size, uncompressed size, expansion ratio, member count, path length, and nesting depth. 8. Extract without silently overwriting existing files. 9. Create a clean destination directory and install only files listed in the validated manifest. 10. Verify that the final destination remains within `~/.openclaw/workspace/skills/` before moving any files. ]]>

T09 · Insecure Skill Coding Practices

Warning
Location
skill.md:79
Finding
Shell Injection Exposure Through Unvalidated Query and Agent Identifiers<![CDATA[ ## Vulnerability Details **File Location**: `skill.md`, lines 79-124 **Vulnerability Type**: Unsafe interpolation of externally influenced values into shell commands **Risk Level**: Medium ### Vulnerable Code ```sh Search agents: curl -s "https://api.agentplace.sh/marketplace/agents?search=<query>" Get agent details: curl -s https://api.agentplace.sh/marketplace/agents/<agent-id> ``` ```sh Free agent: curl -s https://api.agentplace.sh/marketplace/agents/<agent-id>/download Paid agent: curl -s -H "x-api-key: ak_xxxx" https://api.agentplace.sh/marketplace/agents/<agent-id>/download ``` ```sh mv /tmp/agent-preview ~/.openclaw/workspace/skills/<agent-id>/ ``` ### Technical Analysis The documentation does not define validation or safe encoding rules for `<query>` and `<agent-id>`, although these values may originate from user input or marketplace data. The search query is placed into a URL without URL encoding. If an implementation builds and evaluates a shell command from this template, shell metacharacters may become dangerous depending on how substitution is performed. Even without command execution, characters such as `&`, `#`, `%`, or `?` can alter request semantics. The agent identifier is shown unquoted in URLs and a filesystem command. If copied into a shell command through direct string substitution, whitespace, shell metacharacters, glob characters, or option-like values can alter argument parsing or command behavior. An identifier containing path separators or traversal elements may also cause installation outside the intended child directory if destination containment is not separately enforced. This is an unsafe coding template rather than proof that a specific implementation currently evaluates attacker-controlled shell text. Exploitability depends on how an agent or wrapper translates the documented placeholders into actual commands. ### Attack Path 1. An attacker supplies a crafted search query or causes marketplace metadata ...[truncated 1076 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Do not construct shell command strings from user input or API-returned values. 2. Pass arguments directly through a process-execution API that does not invoke a shell. 3. Restrict agent identifiers to a documented allowlist pattern, such as `^[A-Za-z0-9_-]+$`, with an appropriate maximum length. 4. Reject path separators, traversal components, control characters, whitespace, glob characters, and leading hyphens in identifiers. 5. URL-encode search values with a dedicated URL or HTTP library rather than manual interpolation. 6. Quote every shell argument if shell usage cannot be avoided, and use `--` before path operands where supported. 7. Canonicalize the installation destination and verify that it is an immediate child of the intended skills directory. 8. Treat identifiers returned by the marketplace as untrusted until they pass the same validation applied to direct user input. 9. Keep API keys outside command examples and retrieve them from a protected credential source without logging them. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (7)

Tool Parameter Abuse

High
Category
Tool Misuse
Content
unzip -qo /tmp/agent.zip -d /tmp/agent-preview/
mv /tmp/agent-preview ~/.openclaw/workspace/skills/<agent-id>/
rm /tmp/agent.zip

---
Confidence
92% confidence
Finding
The installation flow unzips an untrusted archive and moves its contents into the live skills directory without validating paths, contents, signatures, or destination safety. A malicious ZIP could exploit path traversal, overwrite files, or plant a harmful skill that later gains access to user data, tools, or execution flows despite the preview step.

External Transmission

Medium
Category
Data Exfiltration
Content
List agents:

curl -s https://api.agentplace.sh/marketplace/agents

Search agents:
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
List agents:

curl -s https://api.agentplace.sh/marketplace/agents

Search agents:
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
List agents:

curl -s https://api.agentplace.sh/marketplace/agents

Search agents:
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
List agents:

curl -s https://api.agentplace.sh/marketplace/agents

Search agents:
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
List agents:

curl -s https://api.agentplace.sh/marketplace/agents

Search agents:
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
Paid agent:

curl -s -H "x-api-key: ak_xxxx" https://api.agentplace.sh/marketplace/agents/<agent-id>/download

Example response:
Confidence
74% confidence
Finding
This step sends a paid-agent API key in a command-line header, which can expose the secret through shell history, process listings, logs, or copied transcripts. While using an API key for authenticated download is legitimate, embedding it directly in ad hoc command examples is an unsafe secret-handling pattern.

Static analysis

No suspicious patterns detected.