Back to skill

Security audit

图片去水印 | 去除水印 | 水印移除 | 去LOGO | LinkPix

Security checks for vulnerabilities and agentic risk

Overview

The skill matches its watermark-removal purpose, but it gives the agent broad automatic install and upgrade authority for an unpinned third-party CLI.

Review the dependency setup before installing. Prefer an unprivileged, pinned, isolated qhkit installation, avoid sudo or global upgrades when possible, and only submit images you own or are authorized to process because the service uploads them externally and may spend credits.

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
SKILL.md:78
Finding
Unpinned Global Installation of a Third-Party npm Package## Vulnerability Details **File Location**: `SKILL.md`, lines 78-99 **Vulnerability Type**: Supply-chain risk caused by mutable third-party dependencies **Risk Level**: Medium ### Vulnerable Code At line 78, the Skill recommends globally installing the package without pinning a version: ```bash npm i -g @iqinghu/qhkit ``` Lines 81 and 96 additionally permit installation through an alternative registry: ```text --registry=https://registry.npmmirror.com ``` Lines 96-99 explicitly instruct the Agent to install the latest available release: ```bash npm i -g @iqinghu/qhkit@latest ``` ### Technical Analysis The Skill depends on the third-party npm package `@iqinghu/qhkit` to communicate with the declared remote image-processing service. Installing this dependency is functionally related to the Skill, but the documented installation procedure does not constrain the package to a reviewed version or integrity digest. Both an omitted version and the `@latest` tag are mutable references. Consequently, the code executed during a future installation can differ from the code present when the Skill was audited. npm packages may execute lifecycle scripts during installation, so a compromised package release, publisher account, registry, or distribution path could cause arbitrary local code to run before the intended CLI is invoked. The `-g` option broadens the installation scope by placing the package and executable in the active global npm prefix. The resulting privileges depend on how the Agent process is running. Under an ordinary account, compromise would generally be limited to that account and its accessible files, credentials, and processes. If npm is run through an elevated shell, the package's installation scripts could execute with elevated privileges and modify system-wide locations. The optional mirror increases the number of distribution systems that must be trusted. The audit found no evidence that the named pa ...[truncated 2237 chars]
Remediation
## Remediation Suggestions 1. Pin `@iqinghu/qhkit` to an exact version that has been reviewed, rather than omitting the version or using `@latest`. 2. Record and verify package integrity using a lockfile, trusted integrity digest, or an equivalent reproducible dependency mechanism. 3. Prefer a project-local or isolated installation over `npm i -g` so that compromise is contained to the Skill's execution environment. 4. Where package compatibility permits, install with npm lifecycle scripts disabled and explicitly review any scripts that must be enabled. 5. Require explicit user approval before installing or upgrading dependencies, particularly when an upgrade was suggested only by remote CLI output or stderr. 6. Do not run npm with `sudo`, as root, or from another elevated context. Document the expected unprivileged installation path. 7. Remove automatic `@latest` upgrades. Publish a reviewed compatibility matrix and update the pinned version only after auditing the new release. 8. Minimize alternate registry use. If a mirror is necessary, apply the same exact-version and integrity verification requirements used for the primary registry. 9. Consider distributing a reviewed, locked dependency bundle or executing the CLI in a sandbox with restricted filesystem, network, and credential access.
Vulnerability Patterns
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (1)

Vague Triggers

Medium
Confidence
88% confidence
Finding
The trigger text is explicitly mandatory and very broad, covering common requests like removing text, logos, or marks from images. In a conversational agent, this can cause the skill to auto-invoke in ambiguous situations, leading to unintended use of a paid external tool and execution of watermark-removal actions that may implicate copyright or policy-sensitive content.

Static analysis

No suspicious patterns detected.