Back to skill

Security audit

Qrcode Skill

Security checks for vulnerabilities and agentic risk

Overview

This QR-code skill is purpose-aligned and clearly says it uses a remote MCP service, but users should avoid sending sensitive QR contents unless they accept that data transfer.

Install only if you are comfortable sending QR text or QR images to the listed remote service. Do not use it for passwords, OTP setup codes, private tickets, payment data, access tokens, or confidential business data unless that transfer is acceptable.

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)

other

Warning
Location
SKILL.md:39
Finding
Potential Disclosure of Sensitive QR Content to a Third-Party Service<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md:11`, `SKILL.md:39-56`, `SKILL.md:71-73`; `references/mcp-api.md:5-7`, `references/mcp-api.md:15-40`, `references/mcp-api.md:44-73` **Vulnerability Type**: Sensitive Data Disclosure to a Third-Party Service **Risk Level**: Medium ### Vulnerable Code ```markdown Generate and decode QR codes via the remote MCP service at `https://qrcode.api4claw.com/mcp`. ``` ```markdown ### Generate a QR Code 1. Confirm the text or URL to encode (max 1000 characters) 2. Optionally confirm desired image size (128–1024 pixels, default 512) 3. Call the `generate_qr_code` MCP tool: - `text` (required): The content to encode - `size` (optional): Image size in pixels 4. The tool returns a base64-encoded PNG image 5. Present the QR code image to the user using markdown: `![QR Code](data:image/png;base64,<base64_data>)` 6. If the user wants to save it, write the decoded base64 data to a `.png` file ### Decode a QR Code 1. Obtain the QR code image from the user — accept one of: - A file path to a PNG image in the workspace - A base64-encoded image string - An image pasted into the chat 2. If a file path is provided, read it and convert to base64 3. Call the `decode_qr_code` MCP tool: - `image_base64` (required): Base64-encoded PNG image data 4. Return the decoded text to the user ``` The included usage example explicitly demonstrates processing a credential: ```markdown **Generate:** > "Generate a QR code for https://github.com" > "Create a 256px QR code containing my WiFi config: WIFI:T:WPA;S:MyNetwork;P:password123;;" ``` The API reference confirms that this data is transmitted to a remote endpoint: ```text URL: https://qrcode.api4claw.com/mcp Protocol: MCP (Model Context Protocol) over HTTP Protocol Version: 2024-11-05 ``` ```markdown | `text` | string | Yes | Text to encode into QR code (max 1000 characters) | ``` ```markdown | `image_base64` | string | Yes | Base64-encoded PNG ...[truncated 2757 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Prefer a vetted local QR generation and decoding library so QR contents do not leave the execution environment. 2. If remote processing remains necessary, display the destination domain and obtain explicit user confirmation immediately before every transmission. 3. Add a prominent warning not to submit passwords, authentication QR codes, access tokens, private tickets, payment data, or other secrets. 4. Detect common sensitive formats, such as Wi-Fi credentials and one-time-password provisioning URIs, and require enhanced confirmation or reject them by default. 5. Crop images to the QR region and remove metadata locally before uploading them. 6. Document the remote service's operator, retention period, logging practices, deletion policy, data-processing jurisdiction, and transport-security expectations. 7. Restrict network access to the exact verified HTTPS endpoint and validate its identity through the host environment's standard TLS controls. 8. Avoid examples containing realistic credentials. Replace the Wi-Fi password example with an explicitly non-sensitive placeholder. 9. Provide a local-only mode for sensitive requests and fail closed when the privacy properties of the remote service cannot be established. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
Findings (2)

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The skill explicitly instructs sending user-provided text and QR image data to a third-party remote MCP endpoint, but it does not require a clear user warning or consent step before external transmission. This is dangerous because QR contents can include sensitive data such as login URLs, Wi‑Fi credentials, tickets, personal identifiers, or embedded secrets, and users may reasonably assume local processing unless told otherwise.

Missing User Warnings

Medium
Confidence
96% confidence
Finding
The API reference explicitly documents sending user-provided text and base64-encoded images to an external MCP endpoint, but gives no notice that this data leaves the local environment or may be processed by a third party. In a QR skill, users may submit sensitive URLs, tokens, contact data, or images containing embedded secrets, so the lack of transparency and consent creates a real privacy and data-handling risk.

Static analysis

No suspicious patterns detected.