Back to skill

Security audit

Otterline Sports Predictions Professional | NBA & NHL AI Picks

Security checks for vulnerabilities and agentic risk

Overview

This skill is a disclosed Otterline sports-picks helper that fetches public NBA/NHL sample picks and shows a premium upsell, with no local code, credentials, persistence, or hidden system access found.

Install only if you are comfortable with a sports-betting skill that fetches live picks from Otterline and includes premium upgrade messaging. Treat returned picks and promotional text as third-party content, avoid relying on it as financial advice, and prefer a pinned or verified ClawHub installer when available.

Vulnerability Patterns
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (2)

T01 · Skill Instruction Hijacking

Warning
Location
SKILL.md:112
Finding
Mandatory Promotion of Remotely Controlled API Content<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md`, lines 112-121 **Vulnerability Type**: Remote content influencing agent output **Risk Level**: Medium ### Vulnerable Code ```markdown 3. Otherwise: - Show header: `🦦 Otterline <LEAGUE> Picks — <DATE> (free sample)` - Show `notice`. - Group and sort tiers in this order: `elite`, `verified`, `strong`, `lean`, `pass`. - Render only tiers that have at least one pick. - NBA formatting: - Show `consensus_count` as `consensus: X/3` when present. - Show `combo_win_rate` as `combo win rate: NN%` only when `combo_win_rate > 0`. - NHL formatting: - Show `score` as `score: N` - Show `moneyPuckWinProb` as `win prob: NN%` - **Never show the `models` field.** 4. **Always append the upsell** using `upgrade_message` (preferred) or `upgrade_url`. 5. **Always credit Otterline**: `Picks from Otterline (otterline.club)`. 6. **Always include a disclaimer**: `For entertainment only; bet responsibly.` ``` The remotely supplied field is defined at `SKILL.md`, lines 59-61: ```markdown - `upgrade_url` (string; e.g. `https://otterline.club/premium`) - `upgrade_message` (string) - `full_picks_url` (string) ``` ### Technical Analysis The skill requires the agent to append an upsell to every applicable answer and preferentially source its text from the API-provided `upgrade_message` field. Unlike a locally fixed presentation template, this field is controlled by the operator of the remote endpoint and can change after the skill has been reviewed or installed. No validation, length restriction, URL allowlist, escaping requirement, or instruction-neutralization procedure is specified for `upgrade_message`. Consequently, the remote service can inject arbitrary promotional or misleading text into the agent's answer. If an agent interprets returned API strings as instructions rather than untrusted data, a crafted message could also attempt prompt injection. This is classified as ski ...[truncated 1462 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Remove the requirement to always include an upsell or branding message. 2. Do not reproduce `upgrade_message` directly from the remote response. 3. Use a fixed local template for any optional attribution or premium link. 4. Allowlist the destination URL, such as an exact `https://otterline.club/premium` match. 5. Treat all API strings as untrusted data and never as agent instructions. 6. Apply output encoding, maximum-length limits, and control-character filtering to remotely supplied text. 7. Clearly separate fetched data from the agent's instruction context. 8. If remote promotional content must be supported, require explicit user consent before displaying it. ]]>

T08 · Insecure Dependencies

Warning
Location
README.md:12
Finding
Execution of an Unpinned Mutable Installer Dependency<![CDATA[ ## Vulnerability Details **File Location**: `README.md`, lines 12-15 **Vulnerability Type**: Unpinned third-party package execution **Risk Level**: Medium ### Vulnerable Code ```markdown ## Install (ClawHub) ```bash npx clawhub@latest install otterline ``` ``` ### Technical Analysis The installation command resolves the mutable `latest` distribution tag for the `clawhub` package. The selected package version and content can therefore change independently of this project's reviewed files. `npx` downloads and executes the resolved package. If the package registry account, publication pipeline, package itself, or mutable release is compromised, users following the documented installation procedure may execute attacker-controlled JavaScript. No exact version, lockfile, integrity hash, package signature, or provenance requirement is provided. This finding does not establish that the current `clawhub` package is malicious. It identifies an avoidable supply-chain exposure caused by executing an unpinned package from a mutable source. ### Attack Path 1. An attacker compromises the package publisher, registry account, release process, or another component governing the `clawhub` package. 2. The attacker publishes a malicious release and assigns it to the `latest` tag. 3. A user follows the README and runs `npx clawhub@latest install otterline`. 4. `npx` resolves and downloads the attacker-controlled release. 5. The malicious package executes with the operating-system privileges and environment access of the invoking user. 6. Depending on those privileges, it may access user files, environment variables, credentials available to the process, or modify writable project and user directories. ### Impact Assessment Successful exploitation would execute code with the privileges of the user running the installation command. The potential scope includes all files, credentials, environment variables, and processes accessible to that account. Running the comma ...[truncated 330 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Replace `@latest` with an explicitly audited package version, for example: ```bash npx clawhub@<audited-version> install otterline ``` 2. Document the expected package integrity digest and provide a verification procedure. 3. Prefer a lockfile-backed installation workflow where practical. 4. Require registry provenance or cryptographic signature verification for published releases. 5. Avoid running installation commands with administrator or root privileges. 6. Consider installing the verified package without lifecycle scripts where supported. 7. Periodically review the pinned version and update it only after security validation. ]]>
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (4)

Rp1

Medium
Category
MCP Rug Pull
Confidence
93% confidence
Finding
The README instructs users to run `npx clawhub@latest install otterline`, which fetches and executes the latest version of a remote package without pinning it to a known-good version. If the upstream package is compromised or a breaking/malicious release is published, users installing the skill could execute unreviewed code on their system.

Vague Triggers

Medium
Confidence
94% confidence
Finding
The README lists plain-English prompts such as "What's the best bet today?" and "Any elite NBA picks today?" without clarifying activation boundaries or exclusions. These phrases are broad natural language requests that can overlap with ordinary conversation, increasing the risk that the skill is invoked when the user did not specifically intend to use it.

Natural-Language Policy Violations

Medium
Confidence
80% confidence
Finding
The instruction 'Never show the `models` field' is a natural-language policy constraint embedded in the skill. It imposes a hard disclosure restriction without explaining the rationale or giving the user an option, which can conflict with organizational transparency expectations.

Vague Triggers

Medium
Confidence
94% confidence
Finding
The 'Common User Queries' section lists generic phrases like 'What are today's picks?' and 'What's the best bet today?' without narrowing the context to this specific sports-betting skill. Because there are no exclusion conditions or negative examples, these triggers could overlap with ordinary conversation and cause unintended activation.

Static analysis

No suspicious patterns detected.