Back to skill

Security audit

orca-control

Security checks for vulnerabilities and agentic risk

Overview

The skill is mostly an Orca control guide, but it exposes and mishandles sensitive credentials in ways users should review before installing.

Review this skill carefully before installing. Do not paste Habilis, GitHub, OpenAI, Meta, Stripe, or other live tokens into chat, rotate any credential that matches the published admin password or was used in a URL, and avoid copying root GitHub credentials into the orca account. Use dedicated low-privilege tokens and confirm any service restart, worktree removal, terminal-send, or worker-control action before running it.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • 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
Findings (5)

T09 · Insecure Skill Coding Practices

Error
Location
references/habilis_saas_mcp_gateway.md:16
Finding
Production Administrative Password Disclosed in Skill Documentation<![CDATA[ ## Vulnerability Details **File Location**: `references/habilis_saas_mcp_gateway.md`, lines 16-17 and 42-52 **Vulnerability Type**: Hardcoded administrative credential **Risk Level**: Critical ### Vulnerable Code ```markdown 1. **Hidden Admin Console**: The `/admin` link is **strictly omitted from the public Navbar/Header** to prevent malicious bot scanning and unauthorized discovery. Access is direct via URL (`https://xvix.com.br/admin`). 2. **Admin Authentication**: Protected by administrative password (`Ramel@2026`). ``` ```env # Stripe Production Keys STRIPE_SECRET_KEY=sk_live_... NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=pk_live_... STRIPE_WEBHOOK_SECRET=whsec_... # App URL & Server Base NEXT_PUBLIC_APP_URL=https://xvix.com.br SERVER_BASE_URL=https://xvix.com.br ADMIN_PASSWORD=Ramel@2026 ``` ### Technical Analysis The project discloses both a publicly reachable administrative endpoint and its purported production password. Omitting an administrative link from navigation is security through obscurity and does not prevent endpoint discovery or direct access. Although the Stripe values are placeholders, `ADMIN_PASSWORD` is presented as a concrete value in both narrative documentation and an environment configuration example. Repository access, package distribution, generated documentation, caches, and repository history can therefore expose the credential. ### Attack Path 1. An attacker downloads or inspects the published Skill package. 2. The attacker discovers the administrative endpoint at `https://xvix.com.br/admin`. 3. The attacker extracts the disclosed password from the documentation. 4. The attacker attempts to authenticate using that password. 5. If the credential is active or reused, the attacker accesses administrative functions and abuses the gateway, Skill-generation, customer, or integration capabilities available there. ### Impact Assessment Successful exploitation could grant administrative access to the Habilis service. The exact ...[truncated 465 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Immediately rotate the disclosed administrative password anywhere it may be active or reused. 2. Remove the password from the current files and purge it from repository history and published package versions. 3. Store administrative credentials in a secret manager or protected runtime environment, never in Skill documentation. 4. Require a unique, randomly generated credential and multifactor authentication for administrative access. 5. Add rate limiting, failed-login monitoring, session expiration, and alerting for the administrative endpoint. 6. Consider restricting the endpoint through an identity-aware proxy, VPN, or network allowlist. 7. Review administrative access logs for attempts involving the disclosed credential. 8. Scan the repository history for additional production credentials and rotate all affected secrets. ]]>

T09 · Insecure Skill Coding Practices

Error
Location
SKILL.md:29
Finding
Mandatory Onboarding Instructs the Agent to Solicit Bearer Tokens in Chat<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md`, lines 29-58 **Vulnerability Type**: Unsafe credential collection through conversational context **Risk Level**: High ### Vulnerable Code ```markdown > 💡 **DIRETRIZ OBRIGATÓRIA PARA A IA / ASSISTENTE:** > Quando o usuário executar ou instalar a skill do Orca pela primeira vez: > 1. **Verifique se o ambiente local do Orca ou as credenciais do Habilis MCP estão acessíveis.** > 2. **Se o serviço não responder ou faltarem parâmetros de conexão:** > - Inicie imediatamente um diálogo de Onboarding amigável e intuitivo. > - Apresente o checklist de requisitos e onde configurá-los. > 3. **Execute um Health Check automático** (`bash scripts/orca-env-check.sh` ou tool `orca_get_system_status`) para validar o status dos agentes e workspaces. ``` ```text 👋 Olá! Bem-vindo ao Orca Multi-Agent Orchestrator! Para começarmos a orquestrar seus agentes, projetos e worktrees com precisão, preciso de apenas uma confirmação rápida: 1️⃣ Você está usando o Orca via Gateway Habilis MCP (`hab_live_...`) ou diretamente neste servidor Linux? 👉 Para começar: • Se via MCP, me passe seu token Habilis ou salve no seu `.env`. • Se via servidor local, executarei um autodiagnóstico agora mesmo! ``` ### Technical Analysis The Skill marks the onboarding directive as mandatory and explicitly tells the user to provide a Habilis bearer token to the assistant. Conversation channels are unsuitable for secret collection because prompts and responses may be retained in transcripts, debugging logs, observability systems, model context, backups, or third-party integrations. A bearer token generally grants access based on possession alone. Any party that obtains the conversational record may be able to replay the token. This behavior also conflicts with the project’s claim that customer secrets are never exposed in chat transcripts. ### Attack Path 1. A user installs or invokes the Skill for the first time. 2. The mandatory o ...[truncated 1017 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Remove every instruction asking users to paste tokens into chat. 2. Direct users to configure credentials through an OS keychain, secret manager, protected environment variable, or local file with restrictive permissions. 3. If interactive setup is necessary, use a local hidden-input prompt that does not echo or return the secret to the model. 4. Allow the Skill to check only whether a credential is present; never read or print its value. 5. Redact authorization headers and token-shaped strings from diagnostic output and logs. 6. Warn users not to place secrets in prompts, command history, screenshots, or support transcripts. 7. Provide token revocation and rotation instructions for users who previously supplied credentials through chat. 8. Use short-lived, narrowly scoped tokens where the gateway supports them. ]]>

T05 · Unauthorized Access and Privilege Escalation

Error
Location
references/github_integration_and_preflight.md:15
Finding
Root GitHub Credentials Are Copied into the Orca Service Account<![CDATA[ ## Vulnerability Details **File Location**: `references/github_integration_and_preflight.md`, lines 15-29 **Vulnerability Type**: Credential transfer across a privilege boundary **Risk Level**: High ### Vulnerable Code ```bash # Option A: Login directly as user orca su - orca -s /bin/bash -c "gh auth login" # Option B: Copy existing hosts.yml from root mkdir -p /home/orca/.config/gh cp /root/.config/gh/hosts.yml /home/orca/.config/gh/hosts.yml chown -R orca:orca /home/orca/.config/gh chmod 600 /home/orca/.config/gh/hosts.yml # Setup Git credential helper for user orca su - orca -s /bin/bash -c "gh auth setup-git" ``` ### Technical Analysis Option B copies GitHub CLI credentials from root’s configuration into a service account and changes ownership so that the `orca` account can use them. File mode `600` protects the copied file from unrelated local users, but it does not correct the underlying privilege problem: the Orca service account inherits the authorization scope of root’s GitHub token. The Skill’s declared functionality includes starting workers, sending commands to terminals, reading terminal output, controlling worktrees, and operating repositories. Any process or supervised worker running as `orca` may consequently gain access to the copied credential. This exceeds minimum privilege because the service account should receive its own repository-limited identity rather than inheriting an administrator’s existing credentials. ### Attack Path 1. An administrator follows Option B and copies `/root/.config/gh/hosts.yml`. 2. Ownership is transferred to `orca:orca`. 3. The Orca runtime, a worker, or a terminal process running as `orca` can use the copied GitHub token through `gh` or read the credential file directly. 4. A malicious task, compromised worker, or unauthorized terminal instruction extracts or uses the token. 5. The attacker performs GitHub operations with the original token’s repository or organization permissions. ### Impact ...[truncated 538 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Remove the credential-copying option from the documentation. 2. Authenticate the `orca` account using a separate identity with the minimum required permissions. 3. Prefer a GitHub App installation token or a fine-grained personal access token restricted to specific repositories and operations. 4. Do not reuse root or administrator credentials for daemon accounts. 5. Store the service credential using an appropriate secret manager or protected credential mechanism. 6. Prevent untrusted workers and terminal sessions from reading credential files or inheriting unnecessary authentication variables. 7. Rotate any GitHub token that has already been copied to the Orca account. 8. Audit GitHub logs for activity performed using affected tokens. 9. Establish explicit authorization controls and user confirmation before workers perform write operations on repositories. ]]>

T08 · Insecure Dependencies

Error
Location
references/thin_skill_distribution_pattern.md:44
Finding
Unpinned Package Is Automatically Downloaded and Executed with a Bearer Token<![CDATA[ ## Vulnerability Details **File Location**: `references/thin_skill_distribution_pattern.md`, lines 44-58 **Vulnerability Type**: Unpinned remote dependency execution **Risk Level**: High ### Vulnerable Code ```json { "mcpServers": { "<service-id>": { "command": "npx", "args": [ "-y", "mcp-remote-client", "--url", "https://<your-domain>/api/mcp", "--header", "Authorization=Bearer <CLIENT_TOKEN>" ] } } } ``` ### Technical Analysis The configuration uses `npx -y mcp-remote-client` without an exact version or integrity constraint. When executed, `npx` may retrieve the currently published package and execute it without interactive confirmation. The effective executable can therefore change after the Skill has been reviewed. This creates a supply-chain boundary in which package-account compromise, a malicious release, dependency compromise, or unexpected upstream changes can introduce arbitrary local code. The invoked package also receives the bearer token as a command-line argument, giving it direct access to the credential. ### Attack Path 1. A user copies the generated MCP configuration. 2. The MCP client launches `npx -y mcp-remote-client`. 3. `npx` resolves and downloads the package version available at execution time. 4. A compromised or malicious package executes on the user’s machine. 5. The package reads its arguments, including `Authorization=Bearer <CLIENT_TOKEN>`, and may also access local files and environment variables available to the process. 6. The attacker exfiltrates the token or performs arbitrary actions with the launching user’s privileges. 7. The stolen token is replayed against the configured MCP gateway. ### Impact Assessment A compromised dependency can execute code with the privileges of the user running the MCP client. Potential impact includes local file access, credential theft, modification of development files, arbitrary network communicatio ...[truncated 283 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Pin the package to an exact, reviewed version rather than resolving the latest release. 2. Use a lockfile and verified integrity hash where supported. 3. Install the dependency through a controlled deployment process instead of automatically downloading it on every launch. 4. Verify package provenance, publisher identity, release signatures, and dependency history. 5. Monitor the package and its transitive dependencies for compromise and known vulnerabilities. 6. Do not pass bearer tokens in command-line arguments, which may be visible in process listings and logs. 7. Supply credentials through a protected secret mechanism supported by the client, with strict redaction. 8. Run the MCP client under a restricted account or sandbox with only the filesystem and network permissions it requires. ]]>

T09 · Insecure Skill Coding Practices

Error
Location
references/habilis_saas_mcp_gateway.md:56
Finding
Bearer Token Is Transmitted in a Skill-Generator URL Query String<![CDATA[ ## Vulnerability Details **File Location**: `references/habilis_saas_mcp_gateway.md`, lines 56-59 **Vulnerability Type**: Sensitive credential exposure through URL logging **Risk Level**: High ### Vulnerable Code ```markdown - **Universal MCP Gateway**: `https://xvix.com.br/api/mcp` (JSON-RPC 2.0 / SSE) - **Stripe Checkout**: `https://xvix.com.br/api/checkout` - **Stripe Webhook Listener**: `https://xvix.com.br/api/webhooks/stripe` (Events: `checkout.session.completed`, `invoice.payment_succeeded`, `customer.subscription.deleted`) - **Skill Generator API**: `https://xvix.com.br/api/skills/generate?serviceId=<id>&token=<token>&format=hermes` ``` ### Technical Analysis The documented Skill-generator endpoint places an authentication token in the URL query string. TLS protects a URL while it is in transit, but it does not prevent the full URL from being stored by clients or infrastructure. Query strings may be recorded in browser history, reverse-proxy logs, application access logs, monitoring platforms, analytics systems, error reports, and copied support material. They can also leak through referrer behavior depending on navigation and referrer policy. A reusable bearer token recovered from any of these sources can be replayed independently of the original user. ### Attack Path 1. A user invokes the documented generator endpoint with a valid token in the query string. 2. A browser, reverse proxy, application server, monitoring agent, or analytics system records the complete URL. 3. An attacker or unauthorized operator gains access to the relevant history or log record. 4. The attacker extracts the token from the `token` parameter. 5. The attacker replays the token against the generator or other gateway endpoints accepted by that credential. ### Impact Assessment The attacker obtains the privileges associated with the exposed token. This could permit generation of authenticated Skill bundles or access to other MCP functionality if the same token ...[truncated 312 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Remove the token query parameter from the endpoint design and documentation. 2. Transmit bearer credentials only in the HTTPS `Authorization` header. 3. Configure reverse proxies, application servers, monitoring systems, and analytics tools to redact authorization information. 4. Apply an appropriate `Referrer-Policy` and avoid placing any secret in a URL. 5. Use short-lived, endpoint-specific, narrowly scoped tokens. 6. Rotate any token that may previously have been used through the documented URL. 7. Review access logs, browser-based workflows, and monitoring records for historical token exposure. 8. Ensure generated Skill bundles do not embed reusable bearer tokens in plaintext. ]]>
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
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (21)

Natural-Language Policy Violations

Critical
Confidence
100% confidence
Finding
A hardcoded administrative password is exposed directly in natural-language documentation. Anyone with access to this file, including AI agents or users who can retrieve references, can attempt immediate admin access, making compromise highly likely if the password is valid.

Natural-Language Policy Violations

Critical
Confidence
100% confidence
Finding
The environment configuration example contains the same hardcoded administrative password, reinforcing and duplicating credential exposure. Including real credentials in config examples is dangerous because such files are commonly indexed, copied, and ingested by tools and agents.

Credential Access

High
Category
Privilege Escalation
Content
### 🚀 Quick Onboarding & First-Time Setup
1. **Get your Habilis MCP Token**:
   - Access the developer portal at [https://xvix.com.br](https://xvix.com.br) to generate your access token.
2. **Configure Environment Variables**:
   ```bash
   export HABILIS_API_KEY="hab_live_..."
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Missing User Warnings

High
Confidence
99% confidence
Finding
The sample welcome message instructs the user to pass their Habilis token directly to the assistant, which is a clear secret-handling anti-pattern. Because this skill controls orchestration, terminals, accounts, and automations, exposure of a live bearer token could grant broad operational access and facilitate account takeover or abuse of managed infrastructure.

Missing User Warnings

High
Confidence
96% confidence
Finding
Line L42 lists `orca worktree rm <id>`, and the inline comment says 'Remove worktree', indicating a destructive operation. The cheatsheet does not include any caution about potential data loss, cleanup effects, or the need to confirm the target before removal.

Context-Inappropriate Capability

High
Confidence
99% confidence
Finding
The document discloses a live administrative password and references bearer tokens and protected admin paths in plain documentation. In the context of an agent skill, this is especially dangerous because the content can be surfaced to users or downstream agents, directly enabling unauthorized access attempts and credential misuse.

Credential Access

High
Category
Privilege Escalation
Content
1. **Hidden Admin Console**: The `/admin` link is **strictly omitted from the public Navbar/Header** to prevent malicious bot scanning and unauthorized discovery. Access is direct via URL (`https://xvix.com.br/admin`).
2. **Admin Authentication**: Protected by administrative password (`Ramel@2026`).
3. **Thin-Skill Isolation**: Client AI agents receive only lightweight endpoints and Bearer tokens (`hab_live_...`). Proprietary prompts, CPA heuristics, and safe-margin rendering (1080x1080) execute server-side.
4. **BYOK (Bring Your Own Keys) Vault**: Client ad account secrets (Meta Access Tokens, Pixel IDs, OpenAI API Keys) are encrypted in the local vault and never exposed in chat transcripts.

### C. Default Language Standard (EN First)
- **Default Locale**: Interface and pages (`/`, `/dashboard`, `/admin`, and `<html lang="en">`) default to **English (`EN`)**.
Confidence
93% confidence
Finding
The text describes bearer token usage and sensitive third-party secrets in a way that exposes credential patterns, protected resource locations, and the presence of exploitable authentication material. In an agent skill reference, this broadens the attack surface because downstream consumers may reveal or act on these details, facilitating credential access and privilege abuse.

Context-Inappropriate Capability

High
Confidence
98% confidence
Finding
The reference includes production secret-bearing configuration for Stripe and administrative settings that are outside the narrow scope of Orca IDE/runtime orchestration. Even where some values are partially redacted, documenting live secret names, deployment endpoints, and a real admin password materially increases the risk of credential theft, targeting of payment infrastructure, and follow-on attacks.

Missing User Warnings

Medium
Confidence
94% confidence
Finding
The onboarding protocol explicitly tells the assistant to check whether local Orca environment access or Habilis MCP credentials are accessible, but it does not require informed user consent or a warning that secrets may be inspected. In a skill that manages local services, accounts, and agent infrastructure, this can normalize silent credential discovery and increase the chance that tokens or environment secrets are accessed or surfaced unnecessarily.

Missing User Warnings

Medium
Confidence
97% confidence
Finding
The documentation asks for a Habilis bearer token and even gives its format, but provides no privacy guidance, redaction requirement, or secure-handling instructions. This is dangerous because users may paste a live bearer token into chat or logs, enabling unauthorized access to the MCP gateway if the conversation is stored, exposed, or replayed.

Ssd 3

Medium
Confidence
99% confidence
Finding
This text directly instructs the assistant to solicit an access token in chat, which creates a straightforward path for credential disclosure to the model interface and any downstream logging systems. The surrounding skill context makes this more dangerous because the token appears to unlock remote control functionality over the Orca/Habilis environment.

Missing User Warnings

Medium
Confidence
90% confidence
Finding
Line L30 documents `systemctl restart orca-serve`, which can disrupt running service state and affect availability, but the cheatsheet provides no warning, confirmation note, or caution about impact. In a markdown file, safety-relevant operational commands that may affect system integrity or service continuity should be accompanied by a clear warning.

Missing User Warnings

Medium
Confidence
86% confidence
Finding
This command allows arbitrary text to be injected into a live terminal and executed, which is effectively remote command execution within the context of the controlled terminal session. In a multi-agent orchestration skill, exposing this primitive without strong warnings, trust boundaries, or approval guidance is dangerous because it can be used to run destructive shell commands, alter repositories, or exfiltrate data through an agent-controlled terminal.

Missing User Warnings

Medium
Confidence
84% confidence
Finding
Line L71 documents `orca terminal close --terminal <terminal_id>`, which can end an active terminal session and potentially interrupt running processes or lose transient session state. The cheatsheet does not warn users about this operational impact.

Missing User Warnings

Medium
Confidence
94% confidence
Finding
The document instructs operators to copy GitHub CLI credential material (`hosts.yml`) from one account context to another without warning about token sensitivity, scope review, or least-privilege handling. This can lead to unintended credential duplication, broader access than intended for the `orca` service account, and persistence of highly privileged tokens in another user's home directory.

Sudo/Root Execution

Medium
Category
Privilege Escalation
Content
mkdir -p /home/orca/.config/gh
cp /root/.config/gh/hosts.yml /home/orca/.config/gh/hosts.yml
chown -R orca:orca /home/orca/.config/gh
chmod 600 /home/orca/.config/gh/hosts.yml

# Setup Git credential helper for user orca
su - orca -s /bin/bash -c "gh auth setup-git"
Confidence
80% confidence
Finding
Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Vague Triggers

Medium
Confidence
80% confidence
Finding
Line L29 states that 'when an admin or client generates a skill' bundles are automatically produced, but it does not define what exact action, command, or context causes that generation. In a markdown/reference file, this ambiguity can lead to unclear or overly broad invocation expectations.

Missing User Warnings

Medium
Confidence
84% confidence
Finding
This shell script outputs registered repositories and live worktrees directly to stdout via `orca repo list` and `orca worktree list`. Those results can reveal project names, paths, or other workspace metadata, but the script provides no explicit warning that potentially sensitive local project information will be displayed.

Excessive Permissions

Low
Category
Privilege Escalation
Content
## ⚠️ Pitfalls & Pro Tips

1. **User Permissions:** Ensure files created in `/home/orca/` belong to `orca:orca` (`chown -R orca:orca /home/orca/orca/projects/`).
2. **Sender Terminal Resolution:** When invoking `orca orchestration` outside of an interactive terminal session, pass `--from <terminal_handle>` (discoverable via `orca terminal list`).
3. **Daemon Safety:** Use `systemctl restart orca-serve` instead of killing Electron PIDs directly to prevent stale lockfiles.
Confidence
80% confidence
Finding
Skill requests more permissions than appear necessary for its stated functionality. Review if elevated access is justified.

Missing User Warnings

Low
Confidence
78% confidence
Finding
Line L38 documents `orca project setup-clone <url>`, which implies cloning a repository and therefore creating local files, but the markdown does not warn that it will write data into the workspace. For markdown guidance, commands that modify the local filesystem should disclose that behavior so users understand the impact before running them.

Natural-Language Policy Violations

Low
Confidence
92% confidence
Finding
Line L028 specifies that the generated description should be "in PT-BR or EN," which constrains language output to specific languages without stating that the user or client may choose freely. This is a natural-language policy concern because it hard-codes locale expectations rather than presenting them as optional or user-selected.

Static analysis

No suspicious patterns detected.