Back to skill

Security audit

Facial Consultant

Security checks for vulnerabilities and agentic risk

Overview

The skill is mostly coherent, but it should be reviewed because it sends face images to a third-party API and its helper code exposes broader inputs and facial-analysis options than the stated single-selfie flow.

Review this skill before installing if you are comfortable sending identifiable selfie images and derived facial attributes to Perfect Corp/YouCam. Use a dedicated YouCam API key, prefer local jpg/jpeg files over public URLs, avoid requesting age or gender fields, and treat the generic helper as broader than the stated single-selfie report unless the publisher narrows it with runtime allowlists and clearer consent text.

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
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
Findings (34)

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding
The described behavior promises a single-selfie readable report, but the referenced execution path appears to be a generic upload/task client that may support multiple file types, reference inputs, and unrelated domains. In practice, this undermines user consent and policy enforcement because the apparent niche skill can act as a broader media-processing gateway.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding
The described behavior promises a single-selfie readable report, but the referenced execution path appears to be a generic upload/task client that may support multiple file types, reference inputs, and unrelated domains. In practice, this undermines user consent and policy enforcement because the apparent niche skill can act as a broader media-processing gateway.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding
The described behavior promises a single-selfie readable report, but the referenced execution path appears to be a generic upload/task client that may support multiple file types, reference inputs, and unrelated domains. In practice, this undermines user consent and policy enforcement because the apparent niche skill can act as a broader media-processing gateway.

Missing User Warnings

High
Confidence
97% confidence
Finding
The workflow instructs the agent to upload a user's selfie to an external API but does not require an explicit privacy disclosure or consent step before transmission. Because selfies are sensitive biometric/face data, silent third-party sharing materially increases privacy and compliance risk.

Direct Prompt Extraction

High
Category
System Prompt Leakage
Content
Interpret colors and features with `references/guide.md`, and do the golden-ratio bucketing
yourself (buckets and golden targets are in that file).

## Output rules
* For colors, report colors only; do not infer an undertone that was not returned.
* Ratios drift slightly between runs and `faceShape` may not be returned; label ratios as
  approximate and skip missing values instead of filling them in.
Confidence
85% confidence
Finding
Skill contains instructions that could directly expose system prompts, internal rules, or hidden instructions to users or external parties.

Context-Inappropriate Capability

High
Confidence
98% confidence
Finding
Age and gender inference from face images is not necessary for the stated use case and materially expands the sensitivity of the processing. If invoked, the skill could perform demographic profiling on biometric-like image data without clear necessity, user expectation, or safeguards, increasing privacy, fairness, and compliance risk.

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.

Description-Behavior Mismatch

High
Confidence
96% confidence
Finding
The file is a shared, generic YouCam CLI that can invoke arbitrary features via user-supplied --feature values, while the skill manifest claims a narrowly scoped single-selfie facial-attribute capability. This creates a scope-bypass risk: an agent or user can access unrelated API capabilities not approved for this skill, undermining policy boundaries and enabling misuse of more sensitive or disallowed features.

Description-Behavior Mismatch

High
Confidence
97% confidence
Finding
The file exposes a generic `run(feature, ...)` wrapper that can load arbitrary YouCam feature contracts and execute features well beyond the manifest’s stated facial-consultant scope. In an agent setting, this creates a capability/permission mismatch: a caller that can reach this helper may invoke excluded features such as skin analysis or virtual try-on, causing unauthorized collection or inference on biometric/sensitive image data.

Lp3

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

Vague Triggers

Medium
Confidence
92% confidence
Finding
The trigger section says to activate when the user wants skin tone, facial features, face shape, or facial proportions, which is a wide natural-language scope. It provides only one exclusion for skin-condition scores, but does not clearly limit activation boundaries or give negative examples for adjacent requests, increasing the chance of unintended invocation.

Missing User Warnings

Medium
Confidence
92% confidence
Finding
Requiring a publicly accessible source file URL for a selfie encourages exposure of user images to the public internet or broadly reachable storage. Because the input is a facial image, this creates unnecessary privacy risk, including unintended disclosure, scraping, retention by third parties, and correlation with identity.

Missing User Warnings

Medium
Confidence
90% confidence
Finding
The spec advertises extensive facial analysis and color/ratio extraction from selfies without any warning that this may involve biometric or other sensitive personal data processing. In this skill context, users may provide identifiable face images, so omitting privacy and consent guidance increases the chance of unsafe collection and misuse.

Description-Behavior Mismatch

Medium
Confidence
96% confidence
Finding
The fallback API explicitly exposes age and gender inference even though the skill description is limited to skin tone and facial attributes for cosmetic-style analysis. Collecting or enabling demographic inference beyond the declared purpose creates a data-minimization and scope-creep problem, especially because age and gender are sensitive personal inferences from a selfie.

Context-Inappropriate Capability

Medium
Confidence
92% confidence
Finding
The run command accepts multiple source files and reference images even though this skill is described as analyzing a single selfie only. Those extra inputs expand the operational scope into workflows like comparison, transfer, or multi-angle processing that are not justified by the declared skill purpose, increasing the chance of unintended data handling and policy violations.

Intent-Code Divergence

Medium
Confidence
94% confidence
Finding
The argument help text says the reference image is for `hair-transfer/cloth-v4's reference image`, which directly points users toward appearance-transfer capabilities outside this skill's declared purpose. That documentation conflicts with the manifest's explicit statement not to use the skill for makeup or hair try-on.

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.

Static analysis

No suspicious patterns detected.