Back to skill

Security audit

skin-pro

Security checks for vulnerabilities and agentic risk

Overview

This skill is a disclosed face-skin analysis integration that sends user-approved face images to RageHealth and does not show hidden persistence, credential theft, or unrelated behavior.

Install only if you are comfortable sending face photos and skin-analysis data to RageHealth. Use dedicated SKIN_PRO_AK/SKIN_PRO_SK credentials, do not share keys in chat, enable face_id only when the user explicitly asks, and prefer pinned dependency versions for reproducible installs.

Vulnerability Patterns
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (13)

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/call_skin_pro.py (reported line 165)May include surrounding context.

python
try:  # pragma: no cover - optional dependency
        from dotenv import load_dotenv

        load_dotenv(os.path.join(os.path.dirname(__file__), ".env"))
        load_dotenv()  # also pick up CWD .env
    except ImportError:
        pass

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/call_skin_pro.py (reported line 166)May include surrounding context.

python
requests>=2.28
pycryptodome>=3.18
python-dotenv>=1.0  # optional: auto-load .env for local dev

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/call_skin_pro.py (reported line 175)May include surrounding context.

python
requests>=2.28
pycryptodome>=3.18
python-dotenv>=1.0  # optional: auto-load .env for local dev

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/requirements.txt (reported line 3)May include surrounding context.

text
requests>=2.28
pycryptodome>=3.18
python-dotenv>=1.0  # optional: auto-load .env for local dev

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
92% confidence
Finding

The skill instructs use of network access, environment-stored credentials, and writing output files, but it does not declare any explicit tool scope or allowed-tools policy. That creates an authorization gap where an agent may invoke broader capabilities than reviewers or platform controls expect, increasing the risk of unintended credential use, external data exfiltration, or file-system side effects when handling sensitive face images.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
78% confidence
Finding

The file’s operational instructions, trigger phrases, warnings, and examples are all presented exclusively in Chinese. Under the policy, forcing a specific language without user opt-in can be a natural-language policy violation unless the locale limitation is explicitly justified, which is not stated here.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The skill sends highly sensitive face images and derived biometric/health-adjacent skin analysis data to a third-party API, but the code contains no mechanism to ensure explicit user notice or consent before upload. In this skill context, that omission is meaningful because users may not realize their photos leave the local environment and are processed by an external provider.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
91% confidence
Finding

This markdown file presents all operational instructions and response-field explanations exclusively in Chinese. The policy requires flagging language or locale constraints when a skill forces a specific language without user opt-in, and the document does not provide an alternative language option or note that it is intentionally region-specific.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
95% confidence
Finding

Using requests>=2.28 leaves dependency resolution open to any later version, which harms reproducibility and makes it harder to ensure a reviewed, non-vulnerable release is installed. In a skill that sends user facial images to an external API, dependency uncertainty slightly increases supply-chain and runtime risk, though this file alone is not directly exploitable.

Content

Scanner excerpt · scripts/requirements.txt (reported line 1)May include surrounding context.

text
requests>=2.28
pycryptodome>=3.18
python-dotenv>=1.0  # optional: auto-load .env for local dev

Unverifiable Dependency: requests has 16 known advisory(ies) (CVE-2014-1830 (Exposure of Sensitive Information to an Unauthorized Actor in Requests); CVE-2024-47081 (Requests vulnerable to .netrc credentials leak via malicious URLs); CVE-2024-35195 (Requests `Session` object does not verify requests after making first request wi) +13 more), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
90% confidence
Finding

requests has known advisories, and because the dependency is not pinned, it is impossible to verify from this manifest whether a safe or affected version will be installed. Given this skill likely performs outbound HTTP requests with possibly sensitive face-image data, uncertainty around the HTTP client increases operational risk.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
95% confidence
Finding

Using pycryptodome>=3.18 allows unreviewed newer versions to be installed and makes builds non-reproducible. Because this package is cryptographic, version ambiguity is more sensitive than for a generic library, even though the requirements entry itself does not prove an active exploit path.

Content

Scanner excerpt · scripts/requirements.txt (reported line 2)May include surrounding context.

text
requests>=2.28
pycryptodome>=3.18
python-dotenv>=1.0  # optional: auto-load .env for local dev

Unverifiable Dependency: pycryptodome has 4 known advisory(ies) (CVE-2018-15560 (PyCryptodome integer overflow vulnerability); CVE-2023-52323 (PyCryptodome and pycryptodomex side-channel leakage for OAEP decryption); CVE-2018-15560 (PyCryptodome before 3.6.6 has an integer overflow in the data_len variable in AE) +1 more), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
89% confidence
Finding

pycryptodome has known advisories, and the unpinned spec prevents determining whether deployments use a patched release. Since cryptographic libraries are security-sensitive, unverifiable version selection is a legitimate supply-chain weakness even without proof of immediate compromise.

Content

No source excerpt is available for this finding.

Unverifiable Dependency: python-dotenv has 2 known advisory(ies) (CVE-2026-28684 (python-dotenv: Symlink following in set_key allows arbitrary file overwrite via ); CVE-2026-28684 (python-dotenv reads key-value pairs from a .env file and can set them as environ)), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
82% confidence
Finding

python-dotenv has known advisories, and because the requirement is not pinned, the manifest cannot show whether an affected version may be installed. The package is marked optional for local development, which reduces risk in production, but it still represents avoidable dependency uncertainty if used in developer environments or accidentally shipped.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.