Multimedia Manager

Security checks across malware telemetry and agentic risk

Overview

The skill is mostly a coherent local media gallery, but its web server can run without authentication and exposes file-serving and deletion APIs, so users should review it before installing.

Install only if you are comfortable running a local web gallery and storing a searchable media database on your machine. Run setup so a token is generated, do not bind the server to public interfaces unless you have reviewed and hardened authentication, and review the cleanup script before using it.

VirusTotal

VirusTotal findings are pending for this skill version.

View on VirusTotal

Risk analysis

Artifact-based informational review of SKILL.md, metadata, install specs, static scan signals, and capability signals. ClawScan does not execute the skill or run runtime probes.

#
ASI02: Tool Misuse and Exploitation
Medium
What this means

If the gallery is started without the generated token, anyone who can reach the server could use its APIs without logging in; if the host is changed from localhost, this could affect remote users too.

Why it was flagged

The server disables authentication entirely when the token is missing, while still exposing state-changing endpoints such as image deletion.

Skill content
AUTH_TOKEN = os.environ.get("IMAGE_VAULT_TOKEN", "") ... if not AUTH_TOKEN: return ... @app.route("/api/images/<int:image_id>", methods=["DELETE"])
Recommendation

Require a non-empty token before starting the server, fail closed if it is missing, and clearly warn users not to bind the server to non-local interfaces without strong authentication.

#
ASI02: Tool Misuse and Exploitation
Medium
What this means

A boundary mistake in this endpoint could expose local files outside the intended media vault, especially if authentication is missing or the server is made reachable beyond localhost.

Why it was flagged

The file-serving endpoint accepts a client-supplied path and uses a simple string prefix check for containment, which is weaker than a real path-boundary check.

Skill content
path = request.args.get("path", "") ... allowed_bases = [os.path.abspath(VAULT_DIR), os.path.abspath(_DATA_DIR)] ... if not any(abs_path.startswith(b) for b in allowed_bases): abort(403) ... return send_file(abs_path)
Recommendation

Serve files by database ID rather than arbitrary paths, use pathlib/os.path commonpath containment checks, and keep the endpoint behind mandatory authentication.

#
ASI09: Human-Agent Trust Exploitation
Low
What this means

Users may believe the gallery is always protected when it can actually run open if setup was skipped or the token is absent.

Why it was flagged

The documentation presents token protection as required, but the reviewed server code allows all requests when the token is empty.

Skill content
| **Local HTTP server** | Web gallery UI on `127.0.0.1` | Localhost only, token-protected | ... `IMAGE_VAULT_TOKEN` | **Yes** | Authentication token for the web gallery.
Recommendation

Update the code and documentation so they match: either enforce the token as required or prominently document the unauthenticated mode and its risks.

#
ASI02: Tool Misuse and Exploitation
Low
What this means

If a user runs the cleanup script based on the documentation, it may delete inbound files sooner than expected.

Why it was flagged

The cleanup script can delete files from a chosen directory and defaults to 24 hours, while SKILL.md describes a `--days` flag with a 7-day default.

Skill content
MAX_AGE_HOURS = 24 ... p.add_argument("--dir", default=default_inbound ... p.add_argument("--hours", type=int, default=MAX_AGE_HOURS ... p.unlink()
Recommendation

Fix the documentation or script defaults, keep dry-run guidance prominent, and restrict cleanup to the vault inbound folder unless the user explicitly confirms another path.

#
ASI04: Agentic Supply Chain Vulnerabilities
Low
What this means

Install behavior depends on whatever package versions PyPI resolves at setup time.

Why it was flagged

The setup script installs packages from PyPI without exact version pins or hashes. This is disclosed and purpose-aligned, but it leaves dependency provenance to the current package index state.

Skill content
pip3 install -q Flask Pillow PyYAML 2>/dev/null || pip install -q Flask Pillow PyYAML
Recommendation

Pin dependency versions, consider hashes or a lockfile, and keep the manual install option documented.

#
ASI03: Identity and Privilege Abuse
Low
What this means

Users need to manage a local gallery token that may not be visible from the registry’s credential summary.

Why it was flagged

The skill uses a local authentication token even though the registry metadata lists no primary credential or environment variable declarations.

Skill content
`IMAGE_VAULT_TOKEN` | **Yes** | Authentication token for the web gallery. Auto-generated by `setup.sh`.
Recommendation

Declare the local auth token in registry metadata and avoid running the server if the token is missing.

#
ASI06: Memory and Context Poisoning
Low
What this means

The vault database may contain sensitive information about private photos, filenames, locations, and people, even though images themselves are not stored in the database.

Why it was flagged

The local database persists searchable metadata including original paths, face-name fields, and GPS coordinates when available.

Skill content
original_path TEXT ... face_names TEXT DEFAULT '[]' ... ALTER TABLE images ADD COLUMN latitude REAL; ALTER TABLE images ADD COLUMN longitude REAL; ... CREATE VIRTUAL TABLE IF NOT EXISTS images_fts
Recommendation

Keep the vault directory private, document location metadata storage clearly, and provide a way to purge or disable sensitive metadata extraction if desired.