Back to skill

Security audit

Skin Analysis Expert

Security checks for vulnerabilities and agentic risk

Overview

The skill appears intended for real YouCam skin analysis, but its bundled runner is broader than the single-selfie use case and handles sensitive face images with limited privacy scoping.

Review before installing. This skill will upload face/selfie data to YouCam/Perfect Corp for analysis using your API key. Use a single local selfie only, avoid URL/reference/video inputs, prefer the YOUCAM_API_KEY environment variable over a credentials.json file, and check the provider’s privacy and retention terms before processing sensitive images.

Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • System Prompt LeakageDirect Leakage, Indirect Extraction, Tool-Based Exfiltration
  • Rogue AgentSelf-Modification, Session Persistence
Findings (33)

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding
The stated purpose is a single-selfie skin report, but the underlying engine reportedly accepts remote URLs, videos, multiple inputs, optional reference files, arbitrary versions, and arbitrary feature parameters. That makes the context more dangerous because a seemingly simple biometric analysis skill may become a general data-ingestion and exfiltration path to an external API.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding
The stated purpose is a single-selfie skin report, but the underlying engine reportedly accepts remote URLs, videos, multiple inputs, optional reference files, arbitrary versions, and arbitrary feature parameters. That makes the context more dangerous because a seemingly simple biometric analysis skill may become a general data-ingestion and exfiltration path to an external API.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding
The stated purpose is a single-selfie skin report, but the underlying engine reportedly accepts remote URLs, videos, multiple inputs, optional reference files, arbitrary versions, and arbitrary feature parameters. That makes the context more dangerous because a seemingly simple biometric analysis skill may become a general data-ingestion and exfiltration path to an external API.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding
The stated purpose is a single-selfie skin report, but the underlying engine reportedly accepts remote URLs, videos, multiple inputs, optional reference files, arbitrary versions, and arbitrary feature parameters. That makes the context more dangerous because a seemingly simple biometric analysis skill may become a general data-ingestion and exfiltration path to an external API.

Direct Prompt Extraction

High
Category
System Prompt Leakage
Content
It returns scores. Interpret them with `references/interpretation.md` (note the direction
of `ui_score` vs `raw_score`) and assemble the report with `references/output-format.md`.

## Output rules
* Follow the structure in `references/output-format.md` exactly:
  1. **3 lowest-scoring concerns** (worst first) — with scores, star ratings, actionable advice, and their images.
  2. **3 highest-scoring concerns** (best first) — with scores, star ratings, positive note, and their images.
Confidence
85% confidence
Finding
Skill contains instructions that could directly expose system prompts, internal rules, or hidden instructions to users or external parties.

Credential Access

High
Category
Privilege Escalation
Content
"""Shared constants and path resolution for the youcam_core scripts.

- `SKILL_SCRIPT_ROOT` is this `scripts/` folder in a agent skill.
- Everything the engine reads/writes lives here except credentials.json, which stays one level up
(a skill's root next to SKILL.md) instead of following the code.
"""
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
"""Shared constants and path resolution for the youcam_core scripts.

- `SKILL_SCRIPT_ROOT` is this `scripts/` folder in a agent skill.
- Everything the engine reads/writes lives here except credentials.json, which stays one level up
(a skill's root next to SKILL.md) instead of following the code.
"""
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
"""Shared constants and path resolution for the youcam_core scripts.

- `SKILL_SCRIPT_ROOT` is this `scripts/` folder in a agent skill.
- Everything the engine reads/writes lives here except credentials.json, which stays one level up
(a skill's root next to SKILL.md) instead of following the code.
"""
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
"""Shared constants and path resolution for the youcam_core scripts.

- `SKILL_SCRIPT_ROOT` is this `scripts/` folder in a agent skill.
- Everything the engine reads/writes lives here except credentials.json, which stays one level up
(a skill's root next to SKILL.md) instead of following the code.
"""
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
"""Shared constants and path resolution for the youcam_core scripts.

- `SKILL_SCRIPT_ROOT` is this `scripts/` folder in a agent skill.
- Everything the engine reads/writes lives here except credentials.json, which stays one level up
(a skill's root next to SKILL.md) instead of following the code.
"""
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
"""Shared constants and path resolution for the youcam_core scripts.

- `SKILL_SCRIPT_ROOT` is this `scripts/` folder in a agent skill.
- Everything the engine reads/writes lives here except credentials.json, which stays one level up
(a skill's root next to SKILL.md) instead of following the code.
"""
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
"""Shared constants and path resolution for the youcam_core scripts.

- `SKILL_SCRIPT_ROOT` is this `scripts/` folder in a agent skill.
- Everything the engine reads/writes lives here except credentials.json, which stays one level up
(a skill's root next to SKILL.md) instead of following the code.
"""
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
"""Shared constants and path resolution for the youcam_core scripts.

- `SKILL_SCRIPT_ROOT` is this `scripts/` folder in a agent skill.
- Everything the engine reads/writes lives here except credentials.json, which stays one level up
(a skill's root next to SKILL.md) instead of following the code.
"""
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
"""Shared constants and path resolution for the youcam_core scripts.

- `SKILL_SCRIPT_ROOT` is this `scripts/` folder in a agent skill.
- Everything the engine reads/writes lives here except credentials.json, which stays one level up
(a skill's root next to SKILL.md) instead of following the code.
"""
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Lp3

Medium
Category
MCP Least Privilege
Confidence
70% confidence
Finding
Without declared permissions the skill's intent is opaque and cannot be validated.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The skill instructs the agent to send a user's selfie to a third-party API, but the description does not clearly disclose that biometric/face-adjacent image data will be transmitted off-platform. This is dangerous because users may share sensitive personal images without informed consent about external processing, retention, or privacy implications.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
This skill sends user selfies to an external facial-analysis provider for biometric/health-adjacent processing, yet the manifest excerpt contains no privacy notice, consent requirement, retention guidance, or data-handling disclosure. In this context, the omission is dangerous because users may not realize their face image is transmitted off-platform to a third party, creating privacy, compliance, and trust risks around sensitive personal data.

Description-Behavior Mismatch

Medium
Confidence
96% confidence
Finding
The CLI accepts arbitrary --feature values and dispatches them to shared YouCam API operations, even though this skill is described as a single-purpose skin-analysis tool. That creates a scope-expansion issue: any caller able to invoke this script can access unrelated YouCam capabilities through the skill’s bundled credentials and infrastructure, increasing the chance of unauthorized data processing or policy bypass.

Context-Inappropriate Capability

Medium
Confidence
92% confidence
Finding
The code permits ref_file, ref_files, and multiple src_files even though the skill promises analysis from a single selfie only. This broader input surface enables unintended multi-image or reference-image workflows that may process extra personal images, invoke other model behaviors, or bypass product constraints communicated to users.

subprocess module call

Medium
Category
Dangerous Code Execution
Content
print(f"[setup] virtual environment already exists at {_VENV_DIR}")
    else:
        print(f"[setup] creating virtual environment at {_VENV_DIR} ...")
        subprocess.run([sys.executable, "-m", "venv", _VENV_DIR], check=True)

    venv_python = _venv_python(_VENV_DIR)
    print(f"[setup] installing dependencies from {_REQUIREMENTS} ...")
Confidence
70% confidence
Finding
subprocess module calls execute external commands. Without careful input validation, this enables command injection.

subprocess module call

Medium
Category
Dangerous Code Execution
Content
venv_python = _venv_python(_VENV_DIR)
    print(f"[setup] installing dependencies from {_REQUIREMENTS} ...")
    subprocess.run([venv_python, "-m", "pip", "install", "--upgrade", "pip"], check=True)
    subprocess.run([venv_python, "-m", "pip", "install", "-r", _REQUIREMENTS], check=True)

    activate_hint = (
Confidence
70% confidence
Finding
subprocess module calls execute external commands. Without careful input validation, this enables command injection.

subprocess module call

Medium
Category
Dangerous Code Execution
Content
venv_python = _venv_python(_VENV_DIR)
    print(f"[setup] installing dependencies from {_REQUIREMENTS} ...")
    subprocess.run([venv_python, "-m", "pip", "install", "--upgrade", "pip"], check=True)
    subprocess.run([venv_python, "-m", "pip", "install", "-r", _REQUIREMENTS], check=True)

    activate_hint = (
        rf"{_VENV_DIR}\Scripts\activate" if os.name == "nt" else f"source {_VENV_DIR}/bin/activate"
Confidence
70% confidence
Finding
subprocess module calls execute external commands. Without careful input validation, this enables command injection.

Missing User Warnings

Medium
Confidence
90% confidence
Finding
The code fetches arbitrary user-supplied URLs server-side and then uploads the retrieved content to a third-party API. This creates an SSRF-style network pivot and privacy risk: an attacker can cause the system to make outbound requests to internal or sensitive endpoints, or silently relay private remote content to YouCam.

Session Persistence

Medium
Category
Rogue Agent
Content
Args:
        contract: The feature's loaded API contract, e.g. from load_contract().
        feature: Which YouCam feature to create a task for, e.g. "skin-analysis".
        body: The request payload, e.g. file_id(s)/url(s) and any feature-specific params.
        key: The API key to authenticate the request with.
        version: Which version of the feature to call. Defaults to the standard version.
Confidence
80% confidence
Finding
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Description-Behavior Mismatch

Medium
Confidence
93% confidence
Finding
The manifest says this skill is for analyzing a person's skin from a single selfie, but `run()` is a generic dispatcher for any `feature` and its docstring explicitly describes broader photo/video use cases such as hair transfer, clothes try-on, and multi-photo workflows. This is broader behavior than the skill's declared purpose and indicates the file can drive multiple non-skin YouCam capabilities.

Static analysis

No suspicious patterns detected.