Back to skill

Security audit

Vision Tagger

Security checks for vulnerabilities and agentic risk

Overview

This is a coherent local macOS image-analysis skill, with normal privacy and dependency-installation cautions rather than evidence of malicious behavior.

Install only if you are comfortable running local setup commands on macOS. Prefer installing Pillow in a virtual environment with a pinned, reviewed version, and analyze only images you own or have consent to process because the JSON and annotated outputs may reveal faces, body pose, text, and barcode contents.

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
scripts/setup.sh:29
Finding

Unpinned Third-Party Dependency Installed Without Integrity Verification

Content
View full analysis
/dev/null; then echo "📦 Installing Pillow..." pip3 install Pillow fi ``` The same unsafe installation method is documented in `SKILL.md`: ```bash # Install Pillow pip3 install Pillow ``` ### Technical Analysis The setup script installs `Pillow` without specifying a reviewed version, verifying package hashes, selecting an explicit trusted package index, or using an isolated virtual environment. Consequently, the installed artifact can change over time and is affected by ambient pip configuration, including custom or compromised package indexes. The script also checks the dependency using `python3` but installs it using the separately resolved `pip3` executable. These commands are not guaranteed to refer to the same Python environment. This discrepancy can install the dependency globally or into an unintended interpreter while leaving the checked environment unchanged. Python package installation may execute package build or installation logic. If the resolved package artifact or package source is compromised, attacker-controlled code could therefore run with the privileges of the user executing the setup script. ### Attack Path 1. A user or automation agent follows the installation instructions or executes `scripts/setup.sh`. 2. The script determines that `PIL` is unavailable to `python3`. 3. It invokes `pip3 install Pillow` using the user's ambient executable search path and pip configuration. 4. `pip3` resolves an unspecified Pillow version from its configured package index without hash verification. 5. A compromised index, maliciously substituted artifact, or compromised upstream release supplies attacker-controlled package i ...[truncated 980 chars]
Remediation
View remediation
--hash=sha256: ``` 2. Require cryptographic hash verification during installation: ```bash python3 -m pip install --require-hashes -r requirements.txt ``` 3. Use `python3 -m pip` instead of a separately resolved `pip3` command so that dependency checks and installation target the same interpreter. 4. Create and use a project-specific virtual environment rather than modifying a global Python environment: ```bash python3 -m venv "$SCRIPT_DIR/.venv" "$SCRIPT_DIR/.venv/bin/python" -m pip install --require-hashes -r "$SCRIPT_DIR/requirements.txt" ``` 5. Configure an explicit trusted package index or an internally controlled package mirror, and review dependency updates before changing the pinned version or hashes. 6. Avoid automatically installing packages during normal execution. Keep dependency installation as an explicit setup operation and document the exact reviewed dependency set. ]]>
Vulnerability Patterns
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Behavioral ASTexec() Call, eval() Call, Dynamic Import
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (6)

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

The description claims a computer-vision image tagging skill that detects various features using Apple Vision. This code chunk is instead a post-processing/visualization tool: it calls another program to do the detection, then renders the results onto the image and saves a new annotated file. While the annotation uses the same categories mentioned in the description and is related to the same domain, the actual primary behavior of this code is image annotation rather than detection. The file-writing behavior and dependency on an external analyzer are material differences from the declared purpose.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
95% confidence
Finding

The skill invokes shell commands for installation and compilation (xcode-select, pip3 install, swiftc) but does not declare an explicit tool scope such as permissions or allowed-tools. This creates ambiguity for a host agent about what execution capabilities the skill requires, increasing the risk of unintended command execution or overbroad access when the skill is invoked.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The description uses broad invocation language such as 'any task requiring computer vision on images,' which can cause the skill to be selected for a wide range of loosely related prompts. Over-broad matching can lead to unexpected activation, unnecessary processing of user images, and expansion of the skill's effective authority beyond narrowly intended use cases.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The skill performs sensitive image analysis including face, body, hand, OCR, and barcode detection, but the documentation lacks privacy and consent warnings. In context, this increases risk because the skill is explicitly suited for surveillance-adjacent uses like posture monitoring and security, and may process personal, biometric, or confidential visual data without prompting users to consider retention, consent, or minimization.

Content

No source excerpt is available for this finding.

subprocess module call

Medium
Category
Dangerous Code Execution
Confidence
70% confidence
Finding

subprocess module calls execute external commands. Without careful input validation, this enables command injection.

Content

Scanner excerpt · scripts/annotate_image.py (reported line 93)May include surrounding context.

python
output_path = Path(output_path)
    
    # Run tagger
    result = subprocess.run(
        [str(TAGGER_BIN), str(image_path)],
        capture_output=True, text=True
    )

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The script performs broad extraction of sensitive image-derived information including faces, body pose, hand pose, OCR text, and barcodes, then emits all results as JSON without any built-in notice, consent check, minimization, or sensitivity gating. In the context of an agent skill, this can enable quiet collection of biometric and personal data from user-supplied images, increasing privacy and surveillance risk even if the implementation is technically straightforward.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.