Back to skill

Security audit

一键去水印去文字 Remove Watermark

Security checks for vulnerabilities and agentic risk

Overview

The skill coherently performs cloud-based image cleanup, with disclosed uploads, provider selection, and costs.

Images and prompts leave your computer for processing. Select your intended provider explicitly and preview with --dry-run, since existing credentials otherwise determine routing. Check costs, use a separate output path, and review provider privacy terms before submitting confidential images. The installed external CLI was not audited.

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
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Output HandlingUnvalidated Output Injection, Cross-Context Output, Unbounded Output
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (17)

Description-Behavior Mismatch

High
Category
MCP Tool Poisoning
Confidence
84% confidence
Finding

The explicit flat-lay task serves a materially different purpose from removing unwanted image content. Dry-run and help commands do not themselves establish external generation, billing, or image modification. This assessment is limited to the supplied snippet; the underlying script's implementation is not shown.

Content

No source excerpt is available for this finding.

Incomplete referenced artifact analysis

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 109)May include surrounding context.

md
node scripts/gen.mjs --task remove-watermark \

Incomplete referenced artifact analysis

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 163)May include surrounding context.

md
| 统一入口的全部选项 | `node scripts/gen.mjs --help` |

Skill declares no tool scope ('permissions' or 'allowed-tools') but code capabilities were detected: env, network.

Medium
Category
MCP Least Privilege
Confidence
70% confidence
Finding

Without declared permissions the skill's intent is opaque and cannot be validated.

Content

No source excerpt is available for this finding.

Skill Enumeration

Medium
Category
Agent Snooping
Confidence
80% confidence
Finding

Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Content

Scanner excerpt · SKILL.md (reported line 11)May include surrounding context.

md
把图上的**水印、文字、角标、优惠券条、装饰边框**去掉,并把被挡住的画面补回来。

最常见的用途是**给别的技能准备干净输入**:带文字的图丢给 [fission-pattern](https://github.com/dlazy-ai/ecommerce-skills/blob/main/skills/fission-pattern/skill.md) 或 [clothing-grass-planting](https://github.com/dlazy-ai/ecommerce-skills/blob/main/skills/clothing-grass-planting/skill.md),那些文字会被复制到每一张衍生图里。

---

Skill Enumeration

Medium
Category
Agent Snooping
Confidence
80% confidence
Finding

Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Content

Scanner excerpt · SKILL.md (reported line 11)May include surrounding context.

md
把图上的**水印、文字、角标、优惠券条、装饰边框**去掉,并把被挡住的画面补回来。

最常见的用途是**给别的技能准备干净输入**:带文字的图丢给 [fission-pattern](https://github.com/dlazy-ai/ecommerce-skills/blob/main/skills/fission-pattern/skill.md) 或 [clothing-grass-planting](https://github.com/dlazy-ai/ecommerce-skills/blob/main/skills/clothing-grass-planting/skill.md),那些文字会被复制到每一张衍生图里。

---

The skill sends input images to an external image-processing service without a privacy disclosure.

Medium
Category
Output Handling
Confidence
94% confidence
Finding

The workflow directs the agent to submit source images to hosted processing services without explicitly explaining that image contents leave the local environment. Users requesting image cleanup could therefore expose confidential product photographs or personal information without informed approval.

Content

No source excerpt is available for this finding.

MCP server referenced without pinned version: 'npx skills'.

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

The watermark-removal entry point also exposes configurable video and text generation capabilities.

Medium
Category
Excessive Agency
Confidence
89% confidence
Finding

The manifest describes removing watermarks, text, and logos from images. However, L108–L110 accept any configured task rather than restricting execution to watermark removal, L115–L122 explicitly accommodate video models, and L146–L147 enable video and text request modes. These additional generation capabilities are not justified by the stated image-cleanup purpose.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · scripts/lib/providers.mjs (reported line 134)May include surrounding context.

js
model: () => env.GEN_MODEL_OPENAI || 'gpt-image-1',
  describe(req) {
    const ep = req.images?.length ? 'images/edits' : 'images/generations'
    return `POST https://api.openai.com/v1/${ep}  model=${openai.model()} size=${mapSize(req.size)} n=${req.batch}`
  },
  async run(req) {
    const key = env.OPENAI_API_KEY

External Transmission

Medium
Category
Data Exfiltration
Confidence
90% confidence
Finding

This call uploads source-image bytes and the editing prompt to OpenAI, and the router can select OpenAI automatically merely because its credential exists. Without a provider-approval gate, confidential images can leave the environment through an implicitly selected destination; the concern is missing consent, not malicious exfiltration.

Content

Scanner excerpt · scripts/lib/providers.mjs (reported line 153)May include surrounding context.

js
: await readFile(p)
        fd.append('image[]', new Blob([buf], { type: mimeOf(p) }), path.basename(p))
      }
      r = await fetch('https://api.openai.com/v1/images/edits', {
        method: 'POST', headers: { authorization: `Bearer ${key}` }, body: fd,
      })
    } else {

External Transmission

Medium
Category
Data Exfiltration
Confidence
90% confidence
Finding

This URL is part of the actual image-upload call, not just documentation, and the adapter sends local image contents to it. Automatic credential-based provider selection without an approval gate creates a privacy exposure for sensitive inputs; this is the same underlying issue as the other finding on this call.

Content

Scanner excerpt · scripts/lib/providers.mjs (reported line 153)May include surrounding context.

js
: await readFile(p)
        fd.append('image[]', new Blob([buf], { type: mimeOf(p) }), path.basename(p))
      }
      r = await fetch('https://api.openai.com/v1/images/edits', {
        method: 'POST', headers: { authorization: `Bearer ${key}` }, body: fd,
      })
    } else {

The provider exposes text-to-image generation without a source image, beyond the watermark-removal purpose.

Medium
Category
Excessive Agency
Confidence
91% confidence
Finding

The manifest describes removing watermarks, text, or logos from an existing image. When no input images are supplied, the OpenAI provider instead calls images/generations with an arbitrary prompt, implementing standalone image synthesis rather than image cleanup. This is a separate capability, unlike the image-editing API calls that directly support the stated purpose.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
70% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · scripts/lib/providers.mjs (reported line 157)May include surrounding context.

js
method: 'POST', headers: { authorization: `Bearer ${key}` }, body: fd,
      })
    } else {
      r = await fetch('https://api.openai.com/v1/images/generations', {
        method: 'POST',
        headers: { authorization: `Bearer ${key}`, 'content-type': 'application/json' },
        body: JSON.stringify({

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · scripts/lib/providers.mjs (reported line 157)May include surrounding context.

js
method: 'POST', headers: { authorization: `Bearer ${key}` }, body: fd,
      })
    } else {
      r = await fetch('https://api.openai.com/v1/images/generations', {
        method: 'POST',
        headers: { authorization: `Bearer ${key}`, 'content-type': 'application/json' },
        body: JSON.stringify({

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · scripts/lib/providers.mjs (reported line 261)May include surrounding context.

js
model: (req) =>
    env.GEN_MODEL_REPLICATE ||
    (req?.images?.length ? 'black-forest-labs/flux-kontext-pro' : 'black-forest-labs/flux-dev'),
  describe(req) { return `POST https://api.replicate.com/v1/models/${replicate.model(req)}/predictions` },
  async run(req) {
    const input = { prompt: req.prompt, num_outputs: req.batch }
    if (req.images?.length) input.input_image = await asDataUri(req.images[0])

External Transmission

Medium
Category
Data Exfiltration
Confidence
89% confidence
Finding

This request sends the editing prompt and source-image data or URL to Replicate. Because the router can select this provider from ambient credentials without explicit destination approval, sensitive images may be disclosed to an unexpected processor.

Content

Scanner excerpt · scripts/lib/providers.mjs (reported line 266)May include surrounding context.

js
const input = { prompt: req.prompt, num_outputs: req.batch }
    if (req.images?.length) input.input_image = await asDataUri(req.images[0])
    const j = await postJson(
      `https://api.replicate.com/v1/models/${replicate.model(req)}/predictions`,
      { input },
      { authorization: `Bearer ${env.REPLICATE_API_TOKEN}`, prefer: 'wait' },
      req.timeoutMs,