Multimedia Manager
Analysis
The skill mostly matches a local media manager, but its web gallery can run without authentication and its file-serving and cleanup behavior are less safely bounded than described.
Findings (5)
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.
Checks for instructions or behavior that redirect the agent, misuse tools, execute unexpected code, cascade across systems, exploit user trust, or continue outside the intended task.
path = request.args.get("path", "")
...
if not any(abs_path.startswith(b) for b in allowed_bases):
abort(403)
return send_file(abs_path)The file API accepts a raw path parameter and checks access with a string prefix test, which can allow similarly prefixed paths outside the intended vault directory.
MAX_AGE_HOURS = 24
...
p.add_argument("--hours", type=int, default=MAX_AGE_HOURS, help="Max age in hours (default 24)")
...
p.unlink()The cleanup script deletes files older than 24 hours, while SKILL.md describes a '--days' flag with a 7-day default; this is a material mismatch for a deletion operation.
pip3 install -q Flask Pillow PyYAML 2>/dev/null || pip install -q Flask Pillow PyYAML
The setup script installs dependencies from PyPI without pinned versions or hashes; this is disclosed and central to setup, but still a supply-chain consideration.
Checks whether tool use, credentials, dependencies, identity, account access, or inter-agent boundaries are broader than the stated purpose.
AUTH_TOKEN = os.environ.get("IMAGE_VAULT_TOKEN", "")
...
if not AUTH_TOKEN:
returnIf IMAGE_VAULT_TOKEN is missing, the authentication check returns without enforcing login, even though the skill describes the gallery as token-protected.
Checks for exposed credentials, poisoned memory or context, unclear communication boundaries, or sensitive data that could leave the user's control.
gps = None if is_vid else extract_gps_from_exif(filepath) ... kwargs["latitude"] = lat kwargs["longitude"] = lng
The importer persists media metadata including EXIF GPS coordinates when present; this is purpose-aligned for a media library but sensitive.
