Back to skill

Security audit

Pexels

Security checks for vulnerabilities and agentic risk

Overview

The Pexels skill is mostly coherent, but its setup instructions tell an agent to run an unverified remote installer script if the required CLI is missing.

Install only if you are comfortable using OOMOL's oo CLI and Pexels connector. Avoid running the one-line remote installer directly; prefer a verified package, a pinned download with checksum or signature verification, or manually inspect the installer before executing it.

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:63
Finding
Unverified Remote Installer Execution Through Shell Pipelines<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md`, lines 63–67 **Vulnerability Type**: Remote payload retrieval and execution **Risk Level**: High ### Vulnerable Code ```bash curl -fsSL https://cli.oomol.com/install.sh | bash # macOS / Linux ``` ```powershell irm https://cli.oomol.com/install.ps1 | iex # Windows PowerShell ``` ### Technical Analysis The setup instructions download scripts from `cli.oomol.com` and immediately execute their contents with `bash` or PowerShell's `Invoke-Expression` (`iex`). The downloaded payload is not displayed, pinned to an immutable version, verified against a cryptographic checksum, or authenticated using a package signature before execution. Consequently, the code that will execute can change after this skill has been audited. Compromise of the hosting server, its deployment process, DNS resolution, TLS termination, or the installer itself could turn the documented installation command into an arbitrary-code-execution channel. Installation is ancillary to the skill's declared read-only Pexels functionality. The primary operations only require invoking an already-installed `oo` CLI through `oo connector schema` and `oo connector run`. Executing an unrestricted remote installer with all permissions of the current user therefore exceeds the minimum privileges required to search or retrieve Pexels data. The instructions limit installation to a first-time setup path after an `oo: command not found` error, which reduces exposure. HTTPS also provides transport protection under normal conditions. However, neither measure verifies the identity and integrity of the final script payload independently of the remote infrastructure. The separate network behavior used by `oo connector run` is consistent with the declared connector functionality: search terms, resource identifiers, and connector requests must be sent to the remote service to retrieve Pexels data. The reviewed file states that credentials ...[truncated 2032 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Remove direct `curl | bash` and `irm | iex` installation commands. 2. Prefer a signed, version-pinned package distributed through a trusted package manager. 3. If script-based installation is unavoidable: - Pin the download to a specific immutable release. - Download the script to a local file instead of executing the response directly. - Publish a SHA-256 or stronger checksum through a separate trusted channel. - Verify the checksum and, preferably, a cryptographic signature before execution. - Allow the user to inspect the downloaded script. - Execute it only after explicit user approval. 4. Do not let the skill automatically install software after a command failure. Return a clear error and direct the user to a reviewed installation guide. 5. Run installation with ordinary user privileges and avoid elevation unless a specific operation demonstrably requires it. 6. Document the files, network endpoints, and configuration changes performed by the installer. 7. Keep the skill's runtime permissions restricted to `oo` CLI invocations. The declared `Bash(oo *)` boundary should not be broadened to permit general shell commands merely to support installation. A safer POSIX workflow would resemble: ```bash curl -fSLo oo-install.sh "https://cli.oomol.com/releases/<pinned-version>/install.sh" echo "<published-sha256> oo-install.sh" | sha256sum --check - less oo-install.sh bash oo-install.sh ``` An equivalent PowerShell workflow should use `Invoke-WebRequest -OutFile`, verify an Authenticode signature or published cryptographic hash, request explicit approval, and only then execute the local file. ]]>
Vulnerability Patterns
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (2)

External Script Fetching

High
Category
Supply Chain
Content
- **`oo: command not found`** — install the oo CLI (other platforms: <https://cli.oomol.com/install-guide.md>):

  ```bash
  curl -fsSL https://cli.oomol.com/install.sh | bash    # macOS / Linux
  ```

  ```powershell
Confidence
98% confidence
Finding
The skill instructs users to install software via a remote script piped directly into a shell (`curl ... | bash`), which is a classic supply-chain and arbitrary code execution risk. If the install endpoint, transport, DNS, or hosting account is compromised, running the one-liner executes attacker-controlled code immediately on the user's machine.

Vague Triggers

Medium
Confidence
95% confidence
Finding
The description uses an extremely broad activation condition: 'Use this skill for ANY Pexels request' and 'Whenever a task involves Pexels, use this skill.' This lacks clear scope boundaries or exclusion conditions, increasing the chance of unintended invocation for casual mentions or loosely related tasks.

Static analysis

No suspicious patterns detected.