Back to skill

Security audit

Content Clipper

Security checks for vulnerabilities and agentic risk

Overview

The skill mostly matches its clipping purpose, but it defaults to sending clipped content to a published Flomo webhook and uses an unsafe Windows shell command, so it should be reviewed before use.

Install only after reviewing the data flow. Configure your own FLOMO_WEBHOOK before any Flomo use, avoid clipping private or authenticated pages, prefer markdown for sensitive content, and do not use the Windows Flomo path until the shell-based curl command and proxy bypass are removed.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • 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 (3)

T09 · Insecure Skill Coding Practices

Error
Location
scripts/clip.js:88
Finding

Windows Shell Command Injection Through Untrusted Clipped Content

Content
View full analysis
`#${t}`).join(' '); const body = JSON.stringify({ content: tagStr ? `${tagStr}\n\n${content}` : content }); try { const result = execSync( `curl.exe --noproxy "*" -s -X POST "${FLOMO_WEBHOOK}" -H "Content-Type: application/json" -d ${JSON.stringify(body).replace(/"/g, '\\"')}`, { encoding: 'utf8', timeout: 15000 } ); ``` ### Technical Analysis The function builds an operating-system command by directly interpolating the Flomo webhook URL and a JSON body containing clipped content and user-supplied tags. The resulting string is passed to `execSync`, which executes it through a shell. Replacing double quotes with `\"` does not safely escape data for Windows `cmd.exe`. Shell metacharacters such as `&`, `|`, `>`, `<`, `^`, and environment-variable expansion through `%...%` may retain special meaning depending on the final quoting context. The content originates from a remote webpage, while tags and `FLOMO_WEBHOOK` can also be supplied externally. Consequently, attacker-controlled input crosses directly from an untrusted source into a shell command. The later HTTPS fallback does not mitigate the issue because it is only reached after the initial command has already been executed or has failed. ### Attack Path 1. An attacker creates or compromises a webpage containing text with Windows shell metacharacters and a command payload. 2. The attacker persuades a user or Agent to clip that URL using the default Flomo target. 3. `fetch()` downloads the page and `extractText()` places the attacker-controlled text in `content`. 4. `main()` includes that text in `clipContent` and passes it to `postToFlomo()`. 5. `postToFlomo()` serializes the content into `body` and interpolates it into the `curl.exe` command string. 6. `ex ...[truncated 675 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/clip.js:9
Finding

Hardcoded Third-Party Flomo Webhook Causes Credential Exposure and Unintended Data Disclosure

Content
View full analysis
Remediation
View remediation

T05 · Unauthorized Access and Privilege Escalation

Note
Location
scripts/clip.js:94
Finding

Global Proxy Bypass for Flomo Webhook Requests

Content
View full analysis
Remediation
View remediation
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
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (9)

Missing User Warnings

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The script hard-codes a default FLOMO_WEBHOOK, so clipped content is sent to a remote endpoint even when the user does not provide their own webhook. That creates a real data exfiltration risk: any fetched page content, potentially including sensitive internal URLs or private text, is transmitted to an embedded third-party destination without clear consent.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The trigger phrases are broad and map to common requests like summarizing URLs, saving notes, or clipping content, which increases the chance the skill activates in situations where users do not expect external transmission or file writes. In this skill's context, that broad scope is riskier because the actions include sending data to a webhook and writing local files.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill description does not clearly warn that clipped content may be transmitted to an external webhook service. Because the skill processes arbitrary shared URLs and extracted content, users may unknowingly disclose sensitive material, private links, or copyrighted text to an external endpoint.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The documentation includes a concrete flomo webhook URL tied to a specific destination rather than a generic placeholder. This can cause user-clipped content to be sent to an unintended third-party account, exposing private notes, URLs, summaries, or extracted content without meaningful user awareness or consent.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The file-level documentation describes a web content clipper that extracts content and sends it to flomo or markdown. Spawning a shell command through child_process.execSync is not an obvious requirement for that purpose, because the same operation can be performed directly with Node's HTTP libraries and the code already includes such a fallback.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
84% confidence
Finding

The saveMarkdown function writes clipped content directly to disk with fs.writeFileSync, which affects local user data. Although this is part of the markdown target behavior, the code provides no explicit user-facing warning or comment near the write operation that local files will be created or overwritten at the specified path.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
66% confidence
Finding

The invocation guidance mixes English and Chinese trigger phrases and references Chinese platforms, but it does not clearly state whether language use is optional or user-selected. This may create an implicit locale preference without documenting user choice or a justified region-specific limitation.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
85% confidence
Finding

The markdown output mode writes clipped content to a local file, but the description does not warn users that running the command will create or overwrite local files at the specified path. While less severe than external exfiltration, this can still cause accidental data placement in sensitive directories or unintended persistence of extracted content.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
83% confidence
Finding

The inline comment frames the Node https path as a fallback, which implies the surrounding behavior is a normal in-process HTTP implementation. In reality, the primary path is external command execution via curl.exe, so the comment obscures the true operational behavior of the function.

Content

No source excerpt is available for this finding.

Static analysis

Detected: suspicious.dangerous_exec, suspicious.env_credential_access

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
scripts/clip.js:87

Environment variable access combined with network send.

Critical
Code
suspicious.env_credential_access
Location
scripts/clip.js:11