Back to skill

Security audit

composio-cli

Security checks for vulnerabilities and agentic risk

Overview

The skill is mostly coherent for using Composio, but its setup path asks an agent to run a mutable remote installer directly in a shell with user-level persistence impact.

Install only if you trust Composio's installer endpoint and are comfortable with user-level changes under your home directory and possible shell startup-file edits. Prefer a manually downloaded, pinned, and verified release artifact if available, and keep Composio accounts limited to the apps and permissions needed for the task.

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
references/installation.md:24
Finding

Unpinned Remote Installer Is Executed Directly by a Shell

Content
View full analysis

Vulnerability Details

File Location: references/installation.md, lines 24–32
Vulnerability Type: Remote payload retrieval and execution
Risk Level: High

Vulnerable Code

markdown
Before running an installer, tell the trusted operator that the official
installer downloads and verifies a Composio release under `~/.composio`,
creates a `composio` entry point under `~/.local/bin` by default, and may add a
managed Composio block to supported shell startup files.

After the operator authorizes those host changes, run:

```bash
curl -fsSL https://composio.dev/install | sh
text

### Technical Analysis

The documented command downloads a mutable script from an external URL and sends it directly to `sh`. The response is executed without first saving it for inspection, pinning it to a reviewed version, or independently verifying a cryptographic signature or hardcoded digest.

HTTPS protects the connection under normal conditions, but it does not establish that the downloaded content is identical to the content reviewed during this audit. Compromise of the vendor publication system, domain, CDN, DNS/TLS trust path, or installer endpoint could change the effective payload at execution time.

Operator authorization helps prevent unintended installation but does not mitigate the integrity risk of executing a mutable network response. The documentation states that the installer can create files under `~/.composio` and `~/.local/bin` and modify supported shell startup files. Consequently, the fetched script is expected to receive write access to security-relevant user-level locations.

This behavior exceeds the minimum privilege and trust necessary to install the declared CLI. Installation can instead use a pinned release artifact whose integrity is verified before a separate execution step.

### Attack Path

1. An attacker compromises the installer endpoint or another component in its delivery and publication chain.
2. The trusted operator authorize
...[truncated 1503 chars]
Remediation
View remediation

Remediation Suggestions

  1. Replace the curl | sh pipeline with a pinned release artifact or an official platform package whose exact version is specified.
  2. Download the artifact to a new local file without executing it.
  3. Verify a vendor-provided cryptographic signature using a separately distributed, pinned public key. If signatures are unavailable, verify a hardcoded SHA-256 digest obtained through an independent trusted channel.
  4. Abort installation if verification fails; do not rely solely on HTTPS or a checksum downloaded from the same mutable endpoint.
  5. Inspect the downloaded installer or use a package format that exposes its file manifest before installation.
  6. Execute the verified artifact as a separate, explicitly authorized command.
  7. Disable shell startup-file modification by default. If such modification is necessary, show the exact target files and proposed changes and request specific operator approval.
  8. Document all directories and files created, their permissions, and an uninstall or rollback procedure.
  9. Continue to avoid elevated privileges and limit installation to user-owned directories.
  10. After installation, verify the executable path, ownership, permissions, version, and expected artifact digest before authentication or access to connected applications.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (4)

External Script Fetching

High
Category
Supply Chain
Confidence
96% confidence
Finding

The document instructs the agent/operator to execute a remote installer via curl ... | sh, which downloads code from the network and immediately executes it without an independently verified local review step. Even though the text adds operator-approval language and says the installer verifies a release, this pattern remains dangerous because compromise of the download endpoint, transport, installer logic, or trust assumptions could lead to arbitrary code execution in the host execution boundary.

Content

Scanner excerpt · references/installation.md (reported line 32)May include surrounding context.

After the operator authorizes those host changes, run:

bash
curl -fsSL https://composio.dev/install | sh

If execution is not authorized or the environment cannot install software,

Chaining Abuse

High
Category
Tool Misuse
Confidence
95% confidence
Finding

The | sh construct is the critical execution step that turns a network fetch into immediate shell execution, removing an opportunity for validation before running privileged host changes. In this skill context, the danger is elevated because the skill is specifically designed to enable access to external apps and may run in varied execution boundaries, so a compromised installer path could establish persistence, steal tokens, or alter agent behavior.

Content

Scanner excerpt · references/installation.md (reported line 32)May include surrounding context.

After the operator authorizes those host changes, run:

bash
curl -fsSL https://composio.dev/install | sh

If execution is not authorized or the environment cannot install software,

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
70% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · references/safety.md (reported line 49)May include surrounding context.

md
- Prefer reviewed JSON files or stdin for user-controlled structured values.
- Use slugs, toolkit names, and account selectors returned by Composio rather
  than inventing identifiers.
- Do not use `--skip-checks`, `--skip-connection-check`, or
  `--skip-tool-params-check` to force a live action past validation.
- Review `composio run` files before execution and dry-run write workflows when
  supported.

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 · references/workflow.md (reported line 128)May include surrounding context.

Use proxy only when no dedicated tool covers a known API operation:

bash
composio proxy https://api.github.com/user \
  --toolkit github \
  --account work \
  --method GET </dev/null

Static analysis

No suspicious patterns detected.