Back to skill

Security audit

Forem

Security checks for vulnerabilities and agentic risk

Overview

This Forem connector skill is mostly coherent, but its first-time setup tells agents to run an unverified remote installer script, which deserves review before installation.

Install only if you are comfortable trusting OOMOL’s oo CLI and its remote installer source. Prefer manually reviewing official installation instructions or using a pinned, verifiable package before running setup commands, and confirm exact payloads before creating or updating Forem content.

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:64
Finding
Unverified Remote Installer Scripts Executed Directly by Shells<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md`, lines 64–68 **Vulnerability Type**: Remote payload retrieval and immediate 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 retrieve mutable scripts from external URLs and pass their contents directly to command interpreters. The POSIX instruction pipes the response into `bash`, while the Windows instruction passes it to PowerShell's `Invoke-Expression`. No version pinning, cryptographic signature verification, checksum validation, or manual inspection step occurs before execution. HTTPS protects the connection in transit but does not establish that the delivered script is a specific audited version. Compromise of the distribution server, DNS or account infrastructure, or the hosted installer itself could therefore turn these documented installation commands into an arbitrary-code-execution channel. Installing the required CLI is related to the Skill's functionality, but immediate execution of an unverified and mutable remote payload exceeds the minimum mechanism necessary to perform that installation. A pinned, signed package or separately downloaded and verified release artifact would provide the same capability with a smaller trust boundary. The audit did not establish that the currently hosted scripts are malicious. The vulnerability is that their effective behavior can change after the Skill has been reviewed, without any corresponding change to this repository. ### Attack Path 1. The `oo` command is unavailable on a user's system. 2. The user or agent follows the documented first-time setup instructions. 3. The shell requests the current `install.sh` or `install.ps1` payload from `cli.oomol.com`. 4. A compromised or subsequently modified remote payload is retur ...[truncated 865 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Replace pipe-to-shell and `Invoke-Expression` installation commands with installation through a trusted platform package manager or a pinned release artifact. 2. Pin the CLI to a specific version rather than retrieving a mutable installer with unspecified contents. 3. Publish cryptographic checksums and, preferably, signed release artifacts. Verify the signature or checksum locally before execution. 4. Separate download, verification, inspection, and execution into distinct commands. For example, download the installer to a local file, validate it, and only then execute it. 5. Document the expected publisher identity, release location, required permissions, installed files, and configuration changes. 6. Avoid requesting administrative privileges unless a documented installation operation strictly requires them. 7. If remote installer scripts must remain available, treat them as a fallback rather than the primary installation method and clearly warn users that they execute code from an external source. ]]>
Vulnerability Patterns
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • 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
- **`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 the agent to install software by piping a remote script directly into `bash`, which is a classic arbitrary code execution pattern. If the remote endpoint, transport chain, or hosting account is compromised, or if an agent executes this automatically in response to a missing binary, the system could run attacker-controlled code with the user's privileges.

Vague Triggers

Medium
Confidence
97% confidence
Finding
The phrase 'Use this skill for ANY Forem request' is overly broad and can force routing to this skill even when a safer, narrower, or more appropriate path exists. Broad invocation language increases the chance an agent will over-trust the skill and follow its embedded operational instructions, including shell execution and setup steps, in contexts where that may be unnecessary or risky.

Intent-Code Divergence

Low
Confidence
96% confidence
Finding
At L43, `get_comment` is documented as `Retrieve one Forem comment thread by numeric ID. [write]`, which conflicts with both its verb and description as a read operation. This is reinforced by L53-L55, which state that untagged get/list/search actions are reads and `[write]` means the action changes Forem state, creating an active documentation contradiction about the action's effect.

Static analysis

No suspicious patterns detected.