Back to skill

Security audit

去豆包水印

Security checks for vulnerabilities and agentic risk

Overview

This skill clearly performs local batch watermark removal, with manageable risks around lawful use, overwrites, and unpinned image-processing dependencies.

Install dependencies in a virtual environment, consider pinning package versions before use, use a fresh output directory unless you intentionally want --force overwrites, and only remove watermarks from images you own or have permission to modify.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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)

T08 · Insecure Dependencies

Warning
Location
requirements.txt:1
Finding

Unpinned Third-Party Dependencies Create a Supply-Chain Risk

Content
View full analysis
/requirements.txt ``` ### Technical Analysis The dependency specification does not constrain either package to a reviewed version and does not provide cryptographic hashes. Each installation can therefore resolve to whichever compatible releases are available from the configured package index at that time. This makes installation behavior non-reproducible and allows the effective dependency code to change after the Skill has been audited. If an upstream distribution account, package release, package index, or dependency-resolution environment is compromised, a malicious package version could be selected and installed. Python package installation may execute package build or installation logic with the privileges of the user running `pip`. The package names are conventional, and the project does not specify a suspicious package index or download location. This finding is therefore a supply-chain exposure, not evidence that the currently named packages or the project itself are malicious. ### Attack Path 1. An attacker compromises an upstream package publisher, distribution account, package index, or package-delivery path. 2. The attacker publishes or substitutes a malicious release that satisfies the unconstrained dependency declaration. 3. A user follows the installation command documented in `SKILL.md`. 4. `pip` resolves the dependency to the malicious release because no reviewed version or hash is enforced. 5. Malicious installation or runtime code executes under the account running the installation or image-processing script. ### Impact Assessment Successful exploitation could execute arb ...[truncated 482 chars]
Remediation
View remediation
numpy== ``` 2. Generate and record cryptographic hashes for every permitted distribution: ```text opencv-python-headless== --hash=sha256: numpy== --hash=sha256: ``` 3. Require hash verification during installation: ```bash python3 -m pip install --require-hashes -r /requirements.txt ``` 4. Generate the locked dependency set in a controlled environment and account for transitive dependencies and supported platforms. 5. Review dependency updates before changing the lock file, including release provenance, known vulnerabilities, compatibility, and package hashes. 6. Install dependencies in an isolated virtual environment using a non-privileged account rather than performing a system-wide or administrator-level installation. ]]>
Vulnerability Patterns
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
Findings (7)

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
91% confidence
Finding

The skill invokes local file operations and image-processing commands over user-supplied paths, but the manifest does not declare any tool scope or permissions boundary. That omission weakens reviewability and least-privilege controls, making it easier for the skill to be used on unintended files or directories without an explicit trust signal.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The trigger language is overly broad because it activates for general batch watermark removal, not just a narrowly defined legitimate use case. In context, this materially increases misuse risk by making the skill readily applicable to removing ownership, attribution, or platform watermarks from arbitrary images, which can facilitate policy evasion and unauthorized content manipulation.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The examples promote use of --force to overwrite outputs but do not prominently warn that this can destroy existing files in the destination directory. Because the skill is designed for batch processing over directories, an incorrect output path or rerun can cause irreversible data loss at scale.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
97% confidence
Finding

The dependency is unpinned, so installs may resolve to different versions over time, including vulnerable or breaking releases. In a security-sensitive image-processing skill, this weakens supply-chain integrity and makes it impossible to verify whether a safe OpenCV build is being used.

Content

Scanner excerpt · requirements.txt (reported line 1)May include surrounding context.

text
opencv-python-headless
numpy

Unverifiable Dependency: opencv-python-headless has 16 known advisory(ies) (CVE-2019-14493 (NULL Pointer Dereference in OpenCV.); CVE-2019-9423 (Out-of-bounds Write in OpenCV); CVE-2019-14491 (Out-of-bounds Read in OpenCV) +13 more), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
91% confidence
Finding

OpenCV has multiple historical advisories, and because the manifest does not specify a version, there is no way to confirm that the installed package is not affected. This matters more here because the skill processes potentially attacker-supplied image files, and image parsers have a long history of memory-safety issues.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
97% confidence
Finding

The NumPy dependency is also unpinned, which allows non-deterministic dependency resolution and can introduce vulnerable or incompatible versions without code changes. This is a classic supply-chain hygiene issue rather than direct malicious behavior, but it still increases operational and security risk.

Content

Scanner excerpt · requirements.txt (reported line 2)May include surrounding context.

text
opencv-python-headless
numpy

Unverifiable Dependency: numpy has 16 known advisory(ies) (CVE-2014-1859 (Numpy arbitrary file write via symlink attack); CVE-2021-41495 (NumPy NULL Pointer Dereference); CVE-2021-33430 (NumPy Buffer Overflow (Disputed)) +13 more), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
88% confidence
Finding

NumPy has known advisories, and without version pinning the environment could resolve to an affected release without visibility. While NumPy is less directly exposed than image-decoding libraries in this skill, it still contributes to unverifiable and potentially insecure builds.

Content

No source excerpt is available for this finding.