Back to skill

Security audit

Beauty Advisor

Security checks for vulnerabilities and agentic risk

Overview

The skill is coherent for makeup recommendations and virtual try-on, with privacy-sensitive but disclosed selfie processing through YouCam.

Install only if you are comfortable sending selected selfies or image URLs to Perfect Corp/YouCam for face analysis and makeup rendering. Prefer setting YOUCAM_API_KEY through an environment or platform secret instead of creating credentials.json, and avoid asking the skill to infer unrelated attributes such as age or gender.

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
  • Behavioral ASTexec() Call, eval() Call, Dynamic Import
Findings (31)

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding
If the underlying code truly supports arbitrary YouCam features, video inputs, hair/clothes workflows, and lacks actual recommendation logic, then the skill description is materially misleading. This creates a data-governance and privacy risk: users may submit face images believing they are used only for makeup recommendation, while the backend can route them through broader biometric or appearance-analysis capabilities.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding
If the underlying code truly supports arbitrary YouCam features, video inputs, hair/clothes workflows, and lacks actual recommendation logic, then the skill description is materially misleading. This creates a data-governance and privacy risk: users may submit face images believing they are used only for makeup recommendation, while the backend can route them through broader biometric or appearance-analysis capabilities.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding
If the underlying code truly supports arbitrary YouCam features, video inputs, hair/clothes workflows, and lacks actual recommendation logic, then the skill description is materially misleading. This creates a data-governance and privacy risk: users may submit face images believing they are used only for makeup recommendation, while the backend can route them through broader biometric or appearance-analysis capabilities.

Credential Access

High
Category
Privilege Escalation
Content
requirements:
  credentials:
    - name: YOUCAM_API_KEY
      source: env | credentials.json (in the skill root, next to SKILL.md)
  network:
    - yce-api-01.makeupar.com
  apis:
Confidence
84% confidence
Finding
Reading an API key from environment variables is normal, but permitting fallback to a local credentials.json in the skill root increases the chance of accidental secret exposure through overly broad file access, packaging mistakes, or prompt-induced file reads. In a skill that already uses exec, file reads, and network, local plaintext credential storage expands the blast radius if the runtime or wrapper is misused.

Credential Access

High
Category
Privilege Escalation
Content
requirements:
  credentials:
    - name: YOUCAM_API_KEY
      source: env | credentials.json (in the skill root, next to SKILL.md)
  network:
    - yce-api-01.makeupar.com
  apis:
Confidence
84% confidence
Finding
Reading an API key from environment variables is normal, but permitting fallback to a local credentials.json in the skill root increases the chance of accidental secret exposure through overly broad file access, packaging mistakes, or prompt-induced file reads. In a skill that already uses exec, file reads, and network, local plaintext credential storage expands the blast radius if the runtime or wrapper is misused.

Credential Access

High
Category
Privilege Escalation
Content
requirements:
  credentials:
    - name: YOUCAM_API_KEY
      source: env | credentials.json (in the skill root, next to SKILL.md)
  network:
    - yce-api-01.makeupar.com
  apis:
Confidence
84% confidence
Finding
Reading an API key from environment variables is normal, but permitting fallback to a local credentials.json in the skill root increases the chance of accidental secret exposure through overly broad file access, packaging mistakes, or prompt-induced file reads. In a skill that already uses exec, file reads, and network, local plaintext credential storage expands the blast radius if the runtime or wrapper is misused.

Credential Access

High
Category
Privilege Escalation
Content
requirements:
  credentials:
    - name: YOUCAM_API_KEY
      source: env | credentials.json (in the skill root, next to SKILL.md)
  network:
    - yce-api-01.makeupar.com
  apis:
Confidence
84% confidence
Finding
Reading an API key from environment variables is normal, but permitting fallback to a local credentials.json in the skill root increases the chance of accidental secret exposure through overly broad file access, packaging mistakes, or prompt-induced file reads. In a skill that already uses exec, file reads, and network, local plaintext credential storage expands the blast radius if the runtime or wrapper is misused.

Credential Access

High
Category
Privilege Escalation
Content
requirements:
  credentials:
    - name: YOUCAM_API_KEY
      source: env | credentials.json (in the skill root, next to SKILL.md)
  network:
    - yce-api-01.makeupar.com
  apis:
Confidence
84% confidence
Finding
Reading an API key from environment variables is normal, but permitting fallback to a local credentials.json in the skill root increases the chance of accidental secret exposure through overly broad file access, packaging mistakes, or prompt-induced file reads. In a skill that already uses exec, file reads, and network, local plaintext credential storage expands the blast radius if the runtime or wrapper is misused.

Credential Access

High
Category
Privilege Escalation
Content
requirements:
  credentials:
    - name: YOUCAM_API_KEY
      source: env | credentials.json (in the skill root, next to SKILL.md)
  network:
    - yce-api-01.makeupar.com
  apis:
Confidence
84% confidence
Finding
Reading an API key from environment variables is normal, but permitting fallback to a local credentials.json in the skill root increases the chance of accidental secret exposure through overly broad file access, packaging mistakes, or prompt-induced file reads. In a skill that already uses exec, file reads, and network, local plaintext credential storage expands the blast radius if the runtime or wrapper is misused.

Credential Access

High
Category
Privilege Escalation
Content
requirements:
  credentials:
    - name: YOUCAM_API_KEY
      source: env | credentials.json (in the skill root, next to SKILL.md)
  network:
    - yce-api-01.makeupar.com
  apis:
Confidence
84% confidence
Finding
Reading an API key from environment variables is normal, but permitting fallback to a local credentials.json in the skill root increases the chance of accidental secret exposure through overly broad file access, packaging mistakes, or prompt-induced file reads. In a skill that already uses exec, file reads, and network, local plaintext credential storage expands the blast radius if the runtime or wrapper is misused.

Credential Access

High
Category
Privilege Escalation
Content
requirements:
  credentials:
    - name: YOUCAM_API_KEY
      source: env | credentials.json (in the skill root, next to SKILL.md)
  network:
    - yce-api-01.makeupar.com
  apis:
Confidence
84% confidence
Finding
Reading an API key from environment variables is normal, but permitting fallback to a local credentials.json in the skill root increases the chance of accidental secret exposure through overly broad file access, packaging mistakes, or prompt-induced file reads. In a skill that already uses exec, file reads, and network, local plaintext credential storage expands the blast radius if the runtime or wrapper is misused.

Direct Prompt Extraction

High
Category
System Prompt Leakage
Content
(each `effects` item is one category; see the doc's category schema and pattern catalogs)
4. The generation returns a result image URL in `data.results.url`.

## Output rules
* **Return the result image URL exactly as given** (you may make it a hyperlink, but do not
  modify or shorten it).
* Explain the recommendation (why this look suits their face shape / skin tone).
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
96% confidence
Finding
The fallback spec exposes face-attribute analysis features that go beyond the skill’s declared purpose of recommending and previewing makeup looks. Including age, gender, hair color, and detailed facial ratio analysis creates unnecessary collection and processing of sensitive biometric and inferred personal data, increasing privacy risk and enabling function creep beyond user expectations.

Description-Behavior Mismatch

High
Confidence
97% confidence
Finding
The file is a shared CLI for arbitrary YouCam features, while the declared skill scope is limited to makeup recommendation and virtual makeup try-on. Because the `--feature` argument is unrestricted, an agent or caller can invoke unrelated capabilities such as skin analysis or other off-manifest functions, creating a scope-break that can lead to unauthorized biometric/appearance processing beyond what the user requested.

Context-Inappropriate Capability

High
Confidence
93% confidence
Finding
The `run` path accepts `ref_file` and `ref_files`, explicitly enabling reference-image workflows intended for hair-transfer, clothes, and other non-makeup operations that the skill metadata forbids. In this skill context, that broad input surface materially increases the chance of processing unrelated personal images and invoking disallowed appearance-modification features.

Description-Behavior Mismatch

High
Confidence
98% confidence
Finding
The wrapper exposes an arbitrary `feature` parameter and loads contracts dynamically, allowing callers to invoke YouCam capabilities beyond the skill's declared makeup-only scope. In this skill context, that expands the agent from virtual makeup into prohibited domains such as skin analysis or other appearance-processing features, creating a scope-control failure and possible privacy/compliance issues.

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
93% confidence
Finding
The spec explicitly supports sending publicly accessible selfie URLs or file IDs to an external face-analysis and virtual try-on service, but the skill description provides no user-facing warning that sensitive facial imagery and biometric-derived data will be processed by a third party. In this context, the data is especially sensitive because the skill analyzes facial characteristics from selfies, so lack of clear disclosure and consent materially increases privacy and compliance risk.

Context-Inappropriate Capability

Medium
Confidence
87% confidence
Finding
The look-vto capability is broader than the stated makeup-only scope and may allow use of predefined templates that alter or infer aspects outside the promised function. This mismatch expands the operational surface area and can lead to unauthorized or unexpected image transformations, undermining user consent and policy boundaries.

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.

Intent-Code Divergence

Medium
Confidence
95% confidence
Finding
The docstrings explicitly reference unrelated features like `skin-analysis`, which normalizes and encourages use of prohibited non-makeup capabilities. In a beauty-advisor skill that must not perform skin-condition scoring, this increases the likelihood that downstream developers or agents call disallowed APIs despite product constraints.

Missing User Warnings

Medium
Confidence
96% confidence
Finding
The function uploads local files directly to an external API with no user-visible notice in this component. In a selfie-processing skill, that means sensitive biometric/appearance data may leave the local environment without sufficiently explicit disclosure, which is a meaningful privacy risk even if functionally expected.

Missing User Warnings

Medium
Confidence
94% confidence
Finding
When given remote URLs, the code fetches the content server-side and re-uploads it to the external YouCam API without any user-facing disclosure or consent flow. This can cause silent transmission of third-party or user-sensitive images to external services and also lets untrusted URLs trigger outbound requests, raising privacy and SSRF-style concerns depending on deployment context.

Static analysis

No suspicious patterns detected.