Back to skill

Security audit

LYNQN

Security checks for vulnerabilities and agentic risk

Overview

The skill does what it claims, but it encourages sharing credential-like content through an external service without adequate privacy warnings.

Review this skill before installing if you might use it with secrets, internal URLs, proprietary code, logs, or personal data. Treat anything passed to /lynqn share, /lynqn shorten, or the generated QR URL as leaving your local agent environment and avoid submitting passwords, API keys, tokens, private links, or confidential content.

Vulnerability Patterns
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (1)

T09 · Insecure Skill Coding Practices

Warning
Location
index.js:96
Finding
Sensitive QR Content Exposed Through URL Query Parameters## Vulnerability Details **File Location**: `index.js`, line 96 **Vulnerability Type**: Sensitive information exposure through URL query parameters **Risk Level**: Medium ### Vulnerable Code ```js const qrUrl = `${siteOrigin()}/qr-generator?text=${encodeURIComponent(content)}&size=${size}&error=${errorLevel}`; ``` The documentation explicitly presents credentials as expected QR content: ```text /lynqn qr "Wi-Fi: MyNetwork, Password: 12345" --size 400 --error H ``` ### Technical Analysis The skill inserts arbitrary user-provided QR content into the `text` query parameter of an externally hosted URL. `encodeURIComponent()` makes the value syntactically safe for a URL, but it does not encrypt, redact, or otherwise protect the content. When the returned URL is opened, its complete query string may be retained by browser history, the LYNQN server's access logs, reverse proxies, monitoring infrastructure, analytics systems, and other components that record URLs. It may also be disclosed through referrer information, depending on browser and server policies. This is security-relevant because the documented use cases explicitly encourage users to process Wi-Fi passwords. The same command could be used with access tokens, personal data, private URLs, or other secrets. ### Attack Path 1. A user invokes `/lynqn qr` with sensitive content, such as a Wi-Fi password or access token. 2. The skill embeds the complete content into the `text` query parameter of a LYNQN URL. 3. The skill returns that URL in the agent's reply. 4. The user opens the URL to generate or download the QR code. 5. The browser sends the complete query string to the external LYNQN service. 6. The sensitive value may be retained in browser history or recorded by servers, proxies, monitoring tools, or analytics systems. 7. An attacker or unauthorized operator with access to any such records may recover the original secret. ### Impact Assessment Successful exploitation does not grant local code e ...[truncated 409 chars]
Remediation
## Remediation Suggestions 1. Generate QR codes locally so the QR payload never needs to be disclosed to an external service. 2. If server-side generation is required, transmit the content in the body of an HTTPS `POST` request rather than in a URL query parameter. 3. Return an opaque, short-lived identifier instead of a URL containing the original content. 4. Configure the remote service and intermediaries to avoid logging request bodies containing QR payloads, and apply strict retention and access controls. 5. Add an explicit warning that users must not submit passwords, tokens, private keys, or other secrets unless a confidential processing design is implemented. 6. Remove credential-bearing QR examples from `README.md` and replace them with non-sensitive sample content. 7. Apply an appropriate restrictive `Referrer-Policy` on the QR page as defense in depth, while recognizing that this does not prevent browser-history or server-log exposure.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (8)

Missing User Warnings

High
Confidence
98% confidence
Finding
The example `/lynqn share "API Key: abc123" --expires 1d` normalizes uploading credential-like data to a public or semi-public sharing service without any caution. Even if illustrative, this pattern can directly encourage unsafe operator behavior and accidental exfiltration of real secrets when copied or adapted.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The README promotes sharing text, code snippets, and URLs through LYNQN without clearly warning that the content is transmitted to and stored by an external third-party service. In an agent context, users may paste logs, source code, tokens, or internal URLs assuming the action is local, which can lead to unintended data disclosure.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
The QR code examples encourage embedding arbitrary content, including Wi-Fi credentials, without warning that QR codes can be easily scanned, redistributed, and persisted in screenshots or logs. In a skill meant for automation, agents may generate and expose secret-bearing QR codes at scale, increasing the chance of credential leakage.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The skill explicitly sends user-provided text, code snippets, and URLs to an external service, but the documentation does not clearly warn users that their content leaves the local agent environment and may remain accessible until expiry. This creates a real privacy and data-handling risk because users may unknowingly share sensitive secrets, proprietary code, or internal URLs with a third party.

Missing User Warnings

Medium
Confidence
96% confidence
Finding
The skill sends user-supplied text and URLs to the external LYNQN service for sharing and shortening, but it does not clearly warn the user that their input will leave the local agent environment. This creates a privacy and data-handling risk because users may provide sensitive content under the assumption it is processed locally, and the skill context explicitly centers on transmitting content to a third-party service.

Missing User Warnings

Medium
Confidence
94% confidence
Finding
This manifest clearly advertises sharing text, generating QR codes, and shortening URLs via an external API endpoint, yet it does not warn that user-supplied content and URLs will be transmitted off-platform. That creates a meaningful privacy and data-handling risk, especially if users paste secrets, internal links, code snippets, or credentials under the assumption processing is local.

Context-Inappropriate Capability

Low
Confidence
76% confidence
Finding
With no separate manifest available, the package description is the main stated purpose: sharing text, generating QR codes, and shortening URLs. Declaring a configurable `apiEndpoint` implies external network capability, which is only clearly justified for URL shortening or hosted sharing, but not for QR generation and is broader than the description because it allows redirection to arbitrary endpoints.

Vague Triggers

Low
Confidence
77% confidence
Finding
This manifest defines command names and usage patterns, but it does not document any constraints or negative examples clarifying when these commands should or should not be invoked. While the slash-prefixed syntax provides some specificity, the trigger scope remains underspecified in the manifest for a command-driven skill.