Back to skill

Security audit

Faces

Security checks for vulnerabilities and agentic risk

Overview

The skill is mostly a coherent Faces Platform CLI guide, but it asks agents to use credentials, uploads, billing, OAuth, and persistent persona data with several under-disclosed or overbroad behaviors.

Review this skill carefully before installing. Use it only if you are comfortable sending selected documents, transcripts, prompts, profile attributes, and account operations to the Faces Platform. Avoid entering passwords, API keys, SSNs, tax IDs, private addresses, or third-party personal data in command lines or persona attributes. Prefer scoped, expiring API keys, confirm every upload/import, disable or review local catalog persistence if privacy-sensitive, and verify the exact `faces-cli` package version and publisher before global installation.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • 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
Findings (4)

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:20
Finding

Automatic Configuration Inspection May Expose Authentication Material

Content
View full analysis
/dev/null || echo "(no config saved)"` ``` ### Technical Analysis The embedded command executes when the skill is loaded and invokes `faces config:show` without requiring a user operation. According to `references/AUTH.md:142-149`, the Faces configuration can contain a JWT or API key stored in `~/.faces/config.json`. The reviewed project does not establish that `faces config:show` reliably redacts authentication values. If the command returns credentials or other sensitive account settings, its output can enter the agent context, execution logs, or debugging telemetry. Even if the current CLI release redacts secrets, automatically inspecting configuration expands the skill's access beyond what is necessary at load time and relies on an unaudited external executable to enforce redaction. ### Attack Path 1. A user has previously authenticated with the Faces CLI, causing a JWT or API key to be stored in `~/.faces/config.json`. 2. The skill is loaded, and the embedded command automatically invokes `faces config:show`. 3. The third-party CLI reads the saved configuration. 4. If sensitive fields are not redacted, their values are returned in command output. 5. The output becomes available in the agent context or associated logs. 6. Anyone with access to that context or logging channel may reuse the exposed credential against the Faces API. ### Impact Assessment A disclosed JWT may permit account-level operations supported by the authenticated user, including API-key management and authentication commands. A disclosed API key may permit inference, compilation, or access to allowed Faces within its configured face, model, budget, and expiration restrictions. The exact scope depends on the exposed credential's permiss ...[truncated 163 chars]
Remediation
View remediation

T08 · Insecure Dependencies

Error
Location
SKILL.md:25
Finding

Unpinned Global Installation of an Unaudited npm Dependency

Content
View full analysis
Remediation
View remediation
``` 2. Publish and verify the expected npm integrity digest and package provenance. 3. Prefer a project-local installation with a committed lockfile over a global installation. 4. Review and publish the CLI source corresponding exactly to the pinned package release. 5. Run installation with lifecycle scripts disabled when compatible: ```bash npm install --ignore-scripts faces-cli@ ``` 6. Execute the CLI in a restricted environment with minimal filesystem and network access. 7. Add a dependency-update process requiring security review before changing the pinned version. 8. Verify the package publisher, source repository, release signature, and npm provenance before installation. ]]>

T09 · Insecure Skill Coding Practices

Warning
Location
references/SCOPE.md:3
Finding

Security Scope Statement Contradicts Documented Local File Access and Persistence

Content
View full analysis
--file report.pdf --kind document --json | jq -r '.document_id // .id') faces compile:doc:make "$DOC_ID" # Uploa ...[truncated 2394 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
references/ATTRIBUTES.md:119
Finding

Highly Sensitive Personal Data Can Be Submitted Without Effective Safeguards

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Rogue AgentSelf-Modification, Session Persistence
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (14)

Vague Triggers

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

The skill’s activation criteria are extremely broad, covering not only direct Faces Platform operations but also loosely related concepts like persona compilation, cognitive primitives, and account management. This increases the chance the agent invokes the skill in contexts where the user did not clearly consent to external service usage, credentialed operations, or data handling, which can lead to unintended API calls, account changes, or disclosure of local/user content to the Faces service.

Content

No source excerpt is available for this finding.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 169)May include surrounding context.

md
See [references/TEMPLATES.md](references/TEMPLATES.md) for full details and rules.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 193)May include surrounding context.

md
See [references/TEMPLATES.md](references/TEMPLATES.md) for full details and rules.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The skill instructs the agent to upload files, import YouTube content, compile documents, and chat via api.faces.sh, but it does not require an explicit warning or consent step before transmitting potentially sensitive user data to an external service. In this context, the risk is elevated because the skill also supports account, billing, and key-management workflows, making it plausible that private local files, transcripts, or prompts could be sent off-system without clear user awareness.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

This reference file enumerates a broad set of highly sensitive personal-data fields, including direct identifiers, government IDs, location history, family details, immigration status, religion, sexual orientation, and health-related attributes, with only minimal caution for a few fields. In the context of a persona-compilation platform, this materially increases the risk that users or downstream tooling will collect, store, and process excessive personal data without clear consent, minimization, retention, or handling safeguards.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
84% confidence
Finding

This markdown file documents that JWTs are saved automatically to ~/.faces/config.json and shows API keys being set directly in config files or environment variables. Because the file is user-facing documentation, it should warn that these credentials grant account access and may be exposed via shell history, local filesystem access, or shared environments.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The document tells the agent/human that OAuth tokens are stored server-side and that the agent will not ask again, but it does not clearly warn that future requests may continue using the linked personal ChatGPT account. In a skill that can manage accounts and route inference, this creates a meaningful consent, privacy, and billing transparency risk because users may not realize ongoing access persists after the initial approval.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The statement that fallback to a system key happens silently if the OAuth token is invalid is dangerous because it changes the trust, billing, and privacy boundary without explicit notice. A user may believe requests are going through their own subscription, while in reality prompts could be processed under a different account or billing context, undermining informed consent and auditability.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The quickstart instructs users to supply --password 'USER_PASSWORD' directly on the command line. Command-line arguments are commonly exposed via shell history, terminal logs, process listings, and CI/job telemetry, so this can leak account credentials to other local users or monitoring systems. In this skill's context, the risk is heightened because the same guide also covers account, billing, and API-key management for a hosted platform.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
85% confidence
Finding

The quickstart encourages uploading local files and importing YouTube content to build personas, but does not warn that source material may contain sensitive personal, proprietary, or copyrighted information that will be transmitted to the service. Users may unknowingly disclose private documents or third-party content, especially since this skill is specifically designed to compile human-like personas from source material, making the privacy sensitivity unusually high.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The reference explicitly documents passing credentials via --password, --token, --api-key, and environment variables without warning that command-line arguments may be exposed through shell history, process listings, logs, or screenshots. In a skill centered on account management and API usage, normalizing insecure secret handling increases the chance users will leak authentication material during routine use.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

The document lists destructive operations such as face:delete, compile:doc:delete, compile:thread:delete, keys:revoke, and config clearing with minimal indication of irreversibility or data loss. In an agent skill, terse references can be executed mechanically, so lack of warnings makes accidental destructive actions more likely.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

Commands like face:upload and compile:import --url YOUTUBE_URL send local files or remote content to external services, but the reference does not warn users that potentially sensitive data leaves the local environment. Because this skill is specifically for persona compilation from source material, users may upload personal, proprietary, or regulated content without realizing the transmission and retention implications.

Content

No source excerpt is available for this finding.

Session Persistence

Medium
Category
Rogue Agent
Confidence
60% 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.

Content

Scanner excerpt · references/REFERENCE.md (reported line 76)May include surrounding context.

The --default-model flag on face:create and face:update sets the LLM used when no --llm override is provided to chat:chat. Without a default model, chat:chat requires --llm on every call.

bash
faces face:create --name "Ada" --username ada --default-model gpt-5-nano
faces chat:chat ada -m "hello"    # uses gpt-5-nano automatically

Static analysis

No suspicious patterns detected.