Back to skill

Security audit

QR Code

Security checks for vulnerabilities and agentic risk

Overview

This QR-code skill is purpose-aligned, but its recommended install path executes an unpinned remote shell script, so users cannot verify what code will run.

Install only if you are comfortable reviewing and trusting the external GitHub installer yourself. Prefer a pinned release or locally inspected script with checksum/signature verification, and avoid running the documented `curl | bash` command directly.

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

Error
Location
SKILL.md:20
Finding
Unpinned Remote Installer Is Piped Directly Into Bash## Vulnerability Details **File Location**: `SKILL.md:20` **Vulnerability Type**: `T03: Remote Payload Retrieval and Execution` **Risk Level**: High **Complete Code Snippet**: ```bash curl -s https://raw.githubusercontent.com/zouyawen/openclaw-qrcode/main/install.sh | bash openclaw gateway restart ``` ### Technical Analysis The recommended installation command retrieves a shell script from the mutable `main` branch of a personal GitHub repository and immediately passes its contents to Bash. The script is not included in the audited artifact, pinned to an immutable commit, or authenticated through a checksum or cryptographic signature. Consequently, the commands ultimately executed are not fixed by the reviewed Skill. They may change whenever the remote branch changes. Direct piping also prevents meaningful review before execution and, without options such as `--fail`, may pass unexpected server responses to the shell. The audited project contains only `SKILL.md`; therefore, neither the remote installer's behavior nor the document's claims regarding path restrictions, input validation, and secure error handling can be verified from this artifact. There is no direct evidence in the audited file that the installer currently performs credential theft, persistence, or exfiltration, but the installation mechanism gives the remote source the technical ability to execute such operations. ### Attack Path 1. A user follows the Skill's prominently recommended full-feature installation instructions. 2. `curl` retrieves the current contents of `install.sh` from the repository's mutable `main` branch. 3. The response is streamed directly to Bash without integrity verification or prior inspection. 4. If the repository, maintainer account, hosting path, or delivered script is compromised or maliciously modified, attacker-selected shell commands execute locally. 5. Those commands operate with all permissions available to the user runnin ...[truncated 804 chars]
Remediation
## Remediation Suggestions 1. Remove the `curl | bash` installation pattern. 2. Include the installer and companion implementation in the distributed, auditable package whenever possible. 3. If remote retrieval is unavoidable, pin the download URL to a reviewed immutable commit or versioned release rather than `main`. 4. Publish and verify a cryptographic checksum or signature before execution. 5. Download the script to a local file, inspect it, and execute it only after successful verification. 6. Use strict transport and failure handling, such as `curl --fail --show-error --location`, while noting that TLS alone does not replace payload integrity verification. 7. Document every file, dependency, service, and configuration change performed by the installer. 8. Run installation with the least-privileged account and avoid requesting administrator privileges unless a specific, documented operation requires them. 9. Package dependencies through trusted, version-pinned package-management mechanisms and provide reproducible installation instructions.

T03 · Remote Payload Retrieval and Execution

Error
Location
SKILL.md:93
Finding
Duplicate Installation Instructions Reintroduce Unverified Remote Code Execution## Vulnerability Details **File Location**: `SKILL.md:93-99` **Vulnerability Type**: `T03: Remote Payload Retrieval and Execution` **Risk Level**: High **Complete Code Snippet**: ```bash # Full feature installation (recommended) curl -s https://raw.githubusercontent.com/zouyawen/openclaw-qrcode/main/install.sh | bash # Python dependencies (installed automatically by the script) # qrcode[pil], pillow, numpy, pyzbar ``` ### Technical Analysis The Installation Requirements section repeats the unsafe remote-execution command and states that the downloaded script automatically installs Python dependencies. Neither the installer nor dependency versions are present in the artifact, so the audit cannot determine which commands, package indexes, versions, transitive dependencies, or system changes are involved. The vulnerability principle is the same unbounded trust transfer: control over a mutable remote response becomes control over a local Bash process. Listing expected package names in comments does not constrain the script to installing only those packages and does not verify their versions or provenance. ### Attack Path 1. A user reaches the Installation Requirements section and executes the recommended command. 2. The mutable remote script is fetched from the repository's `main` branch. 3. Bash executes the response immediately, with no commit pin, checksum, signature, or review step. 4. A malicious or compromised response can execute arbitrary commands and may install attacker-selected packages or components. 5. The payload inherits the invoking user's local permissions and access. ### Impact Assessment The immediate impact is arbitrary code execution as the installing user. The undocumented dependency-installation behavior also expands the supply-chain exposure because package versions, sources, and transitive dependencies cannot be assessed from the Skill. No explicit administrator escalation is shown, and n ...[truncated 259 chars]
Remediation
## Remediation Suggestions Replace the repeated command with a verifiable installation procedure: 1. Reference a versioned release or immutable commit. 2. Download the installer separately and verify a maintainer-published signature or checksum. 3. Make the complete installer available within the audited distribution. 4. Pin all Python dependencies and hashes in a lock file or requirements file. 5. Identify the approved package index and avoid untrusted or implicit dependency sources. 6. Document all transitive dependencies and operating-system packages. 7. Present the installer's intended changes before execution and require explicit user approval. 8. Ensure the installer modifies only the directories and configuration necessary for the QR-code plugin.
Vulnerability Patterns
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • Rogue AgentSelf-Modification, Session Persistence
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (7)

Chaining Abuse

High
Category
Tool Misuse
Content
For the complete experience with **rounded dots, gradient colors, logo integration, and natural language support**, install from GitHub:

```bash
curl -s https://raw.githubusercontent.com/zouyawen/openclaw-qrcode/main/install.sh | bash
openclaw gateway restart
```
Confidence
99% confidence
Finding
The '| bash' chain is the dangerous execution step that turns a remote fetch into arbitrary command execution without validation or user review. In the context of a skill install guide, this is especially risky because it is presented as the recommended path, making exploitation highly plausible if the upstream script is malicious or compromised.

Chaining Abuse

High
Category
Tool Misuse
Content
```bash
# Full feature installation (recommended)
curl -s https://raw.githubusercontent.com/zouyawen/openclaw-qrcode/main/install.sh | bash

# Python dependencies (installed automatically by the script)
# qrcode[pil], pillow, numpy, pyzbar
Confidence
99% confidence
Finding
This second '| bash' occurrence repeats the same arbitrary-command-execution risk and reinforces unsafe operator behavior. Because the skill explicitly recommends GitHub-based installation for full functionality, the documentation normalizes a high-risk trust boundary violation.

Session Persistence

Medium
Category
Rogue Agent
Content
This provides basic QR code functionality only:

```bash
mkdir -p ~/.openclaw/skills/qr-code
# Extract the downloaded skill.zip to this directory
openclaw gateway restart
```
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.

Vague Triggers

Medium
Confidence
90% confidence
Finding
The description says users can 'just say' phrases like 'make a colorful QR code' or 'add a logo to this QR code', but it does not define the exact trigger scope, constraints, or exclusion conditions. These examples are common conversational phrases and could overlap with ordinary chat requests, increasing the risk of unintended invocation.

External Script Fetching

Low
Category
Supply Chain
Content
For the complete experience with **rounded dots, gradient colors, logo integration, and natural language support**, install from GitHub:

```bash
curl -s https://raw.githubusercontent.com/zouyawen/openclaw-qrcode/main/install.sh | bash
openclaw gateway restart
```
Confidence
98% confidence
Finding
Piping a remotely fetched script directly into bash causes immediate execution of unreviewed code from an external source. If the GitHub account, repository, branch, network path, or hosting content is compromised, users could execute arbitrary commands on their system during installation.

Natural-Language Policy Violations

Low
Confidence
84% confidence
Finding
The natural-language usage examples are presented entirely in Chinese, while the skill description does not state that the skill is region-specific or explicitly offer a language/locale choice. This can be interpreted as a language policy issue because it implies a preferred language without user opt-in or justification.

External Script Fetching

Low
Category
Supply Chain
Content
```bash
# Full feature installation (recommended)
curl -s https://raw.githubusercontent.com/zouyawen/openclaw-qrcode/main/install.sh | bash

# Python dependencies (installed automatically by the script)
# qrcode[pil], pillow, numpy, pyzbar
Confidence
98% confidence
Finding
This installation step repeats the same unsafe remote-script execution pattern, exposing users to arbitrary code execution if the fetched install.sh is altered or intercepted. Repetition in both the quick-start and requirements sections increases the chance users will follow the unsafe path.

Static analysis

No suspicious patterns detected.