Back to skill

Security audit

Morfeo UGC Engine

Security checks for vulnerabilities and agentic risk

Overview

The skill fits its Morfeo workflow, but it exposes an admin access token and documents privileged chat-driven actions that can change pipeline state or create publication drafts.

Review before installing. The embedded admin token should be rotated and removed from the skill, with credentials supplied through a protected environment variable or secret store. Limit this skill to trusted operators, add explicit confirmations for create, advance, regenerate, shot-selection, and Postiz draft actions, and separate PM2 maintenance commands from routine content workflow use.

Vulnerability Patterns
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (1)

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:18
Finding

Hard-Coded Administrative Bearer Token

Content
View full analysis

Vulnerability Details

File Location: SKILL.md:18-19, SKILL.md:39-40, SKILL.md:158-161, and SKILL.md:179
Vulnerability Type: Hard-coded reusable administrative credential
Risk Level: Medium

Vulnerable Code

SKILL.md:18-19:

markdown
- **Token**: `morfeo-admin-2026` (o `$MORFEO_API_TOKEN`)
- **Auth header**: `Authorization: Bearer morfeo-admin-2026`

SKILL.md:39-40:

bash
TOKEN="morfeo-admin-2026"
H_AUTH="Authorization: Bearer $TOKEN"

SKILL.md:158-161:

python
HEADERS = {
    "Authorization": "Bearer morfeo-admin-2026",
    "x-project-id": "morfeo_labs"
}

SKILL.md:179:

bash
curl -s http://localhost:3336/api/runs -H "Authorization: Bearer morfeo-admin-2026" -H "x-project-id: morfeo_labs" | python3 -c "import json,sys; print(len(json.load(sys.stdin)), 'runs')"

Technical Analysis

The Skill embeds a reusable bearer token directly in distributable documentation and command examples. Bearer tokens provide access solely based on possession, so any user or process that can read the installed Skill can recover and reuse this credential without knowing another secret.

The credential is used for both read-only and state-changing Morfeo Engine endpoints. Documented authorized operations include creating runs, regenerating script fields, selecting shots, advancing pipeline stages, inspecting logs, and submitting completed videos to Postiz as drafts. Consequently, the credential has broader authority than is necessary for status-only requests.

The API is documented as listening on localhost:3336, which limits remote exposure under the stated configuration. Nevertheless, the token remains exposed to local users, compromised processes, agents with file access, and any environment where the service is forwarded, proxied, container-exposed, or rebound to a non-loopback interface.

Attack Path

  1. An attacker, local process, or untrusted agen ...[truncated 1628 chars]
Remediation
View remediation

Remediation Suggestions

  1. Immediately rotate and revoke morfeo-admin-2026, because publishing it in the Skill must be treated as credential disclosure.
  2. Remove the literal token from every documentation example and require it to be supplied through MORFEO_API_TOKEN:
    bash
    : "${MORFEO_API_TOKEN:?MORFEO_API_TOKEN must be set}"
    H_AUTH="Authorization: Bearer $MORFEO_API_TOKEN"
    
  3. Store the token in a restricted secret manager or protected environment configuration rather than in the repository, Skill package, shell history, or command-line arguments.
  4. Replace the shared administrative credential with short-lived, per-user or per-agent credentials.
  5. Apply endpoint-specific scopes, separating read-only status access, run mutation, operational administration, and publication authorization.
  6. Require an explicit, separately authorized approval step for publication-related operations, even when the destination is a draft.
  7. Ensure the API binds exclusively to the loopback interface unless remote access is specifically required. If remote access is needed, place it behind authenticated TLS and network access controls.
  8. Enforce authorization server-side for every endpoint and validate that callers cannot gain access to another project merely by changing x-project-id.
  9. Add credential-expiration, audit logging, rate limiting, and anomaly detection for job creation, pipeline advancement, and publication requests.
  10. Add secret scanning to repository and Skill release workflows to prevent future embedded credentials.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (15)

Missing User Warnings

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

The skill embeds an administrative bearer token directly in the documentation and repeats it in example headers. Hardcoded credentials are highly dangerous because any user, tool, or downstream system reading the skill can reuse them to perform privileged API operations against the engine.

Content

No source excerpt is available for this finding.

External Script Fetching

High
Category
Supply Chain
Confidence
90% confidence
Finding

Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.

Content

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

Ver todos los runs

bash
curl -s "$BASE/api/runs" -H "$H_AUTH" -H "$H_PROJ" | python3 -c "
import json,sys
runs = json.load(sys.stdin)
for r in runs[:10]:

External Script Fetching

High
Category
Supply Chain
Confidence
90% confidence
Finding

Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.

Content

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

Crear run nuevo (elegir marca aleatoria del catálogo)

bash
curl -s -X POST "$BASE/api/queue/add" \
  -H "$H_AUTH" -H "$H_PROJ" -H "Content-Type: application/json" \
  -d '{"marca_id": null}'  # null = aleatoria

External Script Fetching

High
Category
Supply Chain
Confidence
90% confidence
Finding

Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.

Content

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

text
Luego crear run:
```bash
curl -s -X POST "$BASE/api/queue/add" \
  -H "$H_AUTH" -H "$H_PROJ" -H "Content-Type: application/json" \
  -d "{\"marca_id\": \"havanna\"}"

External Script Fetching

High
Category
Supply Chain
Confidence
90% confidence
Finding

Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.

Content

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

Verificar que la API está levantada

bash
curl -s http://localhost:3336/api/runs -H "Authorization: Bearer morfeo-admin-2026" -H "x-project-id: morfeo_labs" | python3 -c "import json,sys; print(len(json.load(sys.stdin)), 'runs')"

Levantar API si está caída

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The README describes the skill and all invocation examples exclusively in Spanish, including imperative trigger phrases, with no indication that other languages are supported or that Spanish is an intentional opt-in requirement. This can violate language/locale policy when a specific language is imposed without user choice or explicit justification.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
84% confidence
Finding

The README advertises a command to publish a video but provides no warning that the action may trigger an external side effect, such as posting content or making an irreversible state change. In an agent/chat-driven workflow, users may invoke this casually, increasing the risk of unintended publication, reputational harm, or unauthorized release of content.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

La descripción y el contenido de la skill están definidos para "marcas argentinas" y redactados íntegramente en español sin indicar que el idioma sea configurable o dependiente de la preferencia del usuario. Según la política indicada, forzar una lengua o locale sin opt-in constituye una violación de política lingüística.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The activation condition 'Cualquier operación sobre el Morfeo UGC Engine' is overly broad, allowing the skill to be selected for undefined or high-impact actions. Broad triggers are dangerous in agent systems because they can cause privileged capabilities to activate without clear user intent boundaries.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

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

Crear run nuevo (elegir marca aleatoria del catálogo)

bash
curl -s -X POST "$BASE/api/queue/add" \
  -H "$H_AUTH" -H "$H_PROJ" -H "Content-Type: application/json" \
  -d '{"marca_id": null}'  # null = aleatoria

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

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

Crear run nuevo (elegir marca aleatoria del catálogo)

bash
curl -s -X POST "$BASE/api/queue/add" \
  -H "$H_AUTH" -H "$H_PROJ" -H "Content-Type: application/json" \
  -d '{"marca_id": null}'  # null = aleatoria

External Transmission

Medium
Category
Data Exfiltration
Confidence
78% confidence
Finding

Advancing a run changes workflow state and may trigger costly downstream generation steps or publication-adjacent actions. In context, exposing a one-step state transition command without strong confirmation or role restrictions makes accidental or unauthorized progression more likely.

Content

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

Avanzar run a la siguiente etapa

bash
curl -s -X POST "$BASE/api/runs/$RUN_ID/advance" \
  -H "$H_AUTH" -H "$H_PROJ" -H "Content-Type: application/json"

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The skill describes publishing-related and other state-changing workflow steps without strong, upfront warnings that they mutate pipeline state and create external drafts. In practice, this can lead an agent to perform irreversible or externally visible actions without adequate user confirmation.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The skill includes PM2 restart/start and live log access commands that extend beyond ordinary run supervision into host/process administration. In an agent setting, these capabilities can be invoked to alter local service state or expose potentially sensitive operational data, increasing blast radius if the skill is misused or triggered unexpectedly.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Low
Category
Not specified by scanner
Confidence
83% confidence
Finding

The skill discloses local source and output paths, enabling filesystem inspection outside the narrow run-management purpose. While not an exploit by itself, exposing internal layout and output locations provides unnecessary environment intelligence and may facilitate later access to sensitive artifacts or code.

Content

No source excerpt is available for this finding.

Static analysis

Detected: suspicious.exposed_secret_literal

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
SKILL.md:24