Back to skill

Security audit

outlit

Security checks for vulnerabilities and agentic risk

Overview

The skill is coherent for Outlit customer intelligence, but its setup instructions include an unverified remote installer piped directly into Bash.

Use the package-manager install options where possible, such as npm or Homebrew, and avoid running the curl-to-bash installer unless you trust the publisher and understand it will execute remote code on your machine. Also review Outlit API key grants carefully because the skill can access sensitive customer data and, with explicit permissions, change access, settings, integrations, and customer merges.

Vulnerability Patterns
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
Findings (1)

T03 · Remote Payload Retrieval and Execution

Error
Location
SKILL.md:169
Finding
Unverified Remote Installer Is Piped Directly into Bash## Vulnerability Details **File Location**: `SKILL.md`, line 169 **Vulnerability Type**: Remote payload retrieval and execution **Risk Level**: Critical ### Vulnerable Code ```bash curl -fsSL https://outlit.ai/install.sh | bash ``` ### Technical Analysis The installation instructions download a shell script from an external URL and immediately execute the response with Bash. The effective executable payload is not included in the audited project and can change at any time after this Skill has been reviewed. No immutable version, cryptographic signature, checksum, or content-review step is specified. HTTPS protects transport integrity and authenticates the server under the applicable certificate trust model, but it does not ensure that future responses are identical to a reviewed release. A compromise of the domain, DNS, hosting account, web application, deployment pipeline, or installer publication process could therefore turn this command into an arbitrary-code execution mechanism. Installing the declared CLI is consistent with the Skill's purpose, but unrestricted execution of a mutable shell response exceeds the minimum privileges necessary. The document already lists package-manager alternatives that offer more transparent package identity and release management. ### Attack Path 1. An attacker compromises the installer endpoint or an upstream component capable of changing its response. 2. The attacker replaces or modifies `install.sh` with commands that perform malicious actions. 3. A user or agent follows the documented installation command. 4. `curl` retrieves the modified response and streams it directly to Bash without saving, inspecting, or verifying it. 5. Bash executes the attacker's commands with all privileges available to the invoking user. 6. The payload can access credentials and data available to that account, modify files, install additional components, or establish persistence where local permissions allow. ### Impact Assessment S ...[truncated 546 chars]
Remediation
## Remediation Suggestions 1. Remove the pipe-to-shell installation command and make a trusted package manager the primary installation method, for example: ```bash npm install -g @outlit/cli ``` or: ```bash brew install outlitai/tap/outlit ``` 2. Pin the package or formula to a reviewed release where the relevant package manager supports version pinning. 3. If a standalone installer is unavoidable: - Publish it under an immutable, versioned release URL. - Download it to a local file without executing it. - Publish a checksum and a cryptographic signature through an independently protected channel. - Verify both before execution. - Allow the user to inspect the downloaded script. - Require explicit user approval before running it. - Avoid requesting elevated privileges unless a documented installation step strictly requires them. 4. Document the installer artifacts, files modified, network destinations contacted, and permissions required. 5. Protect the release pipeline with signed releases, restricted publishing credentials, multifactor authentication, audit logging, and reproducible build or provenance metadata.
Vulnerability Patterns
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
Findings (3)

External Script Fetching

High
Category
Supply Chain
Content
Install the CLI:

```bash
curl -fsSL https://outlit.ai/install.sh | bash
# Alternatives:
npm install -g @outlit/cli
brew install outlitai/tap/outlit
Confidence
95% confidence
Finding
The skill recommends installing software with `curl -fsSL https://outlit.ai/install.sh | bash`, which executes a remote script without prior inspection or integrity verification. If the hosting endpoint, CDN, DNS, TLS termination, or publisher account were compromised, an agent or user could run attacker-controlled shell commands with the privileges of the current user.

Chaining Abuse

High
Category
Tool Misuse
Content
Install the CLI:

```bash
curl -fsSL https://outlit.ai/install.sh | bash
# Alternatives:
npm install -g @outlit/cli
brew install outlitai/tap/outlit
Confidence
96% confidence
Finding
The `| bash` pattern enables command chaining from untrusted network content directly into a shell, eliminating any review step and magnifying supply-chain compromise risk. In an agent skill context, this is more dangerous because automated systems may follow setup instructions non-interactively, turning documentation into executable behavior.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
Interactive `setup` negotiates capabilities first. It can securely prompt for a credential, open a validated browser handoff, or ask the user to confirm a CRM or Mixpanel mapping.

Do not ask the user to paste provider secrets into chat. Do not put secrets in model-visible tool calls, command arguments, logs, shell history, or process listings. When automation must supply provider configuration, have the user run the command in a trusted local terminal and send one strict JSON object through stdin:

```bash
printf '%s\n' '{"credentials":{"apiKey":"<provider-api-key>"}}' \
Confidence
80% confidence
Finding
Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Static analysis

No suspicious patterns detected.