Back to skill

Security audit

Seo Autopilot

Security checks for vulnerabilities and agentic risk

Overview

The skill has a clear SEO automation purpose, but it runs an unpinned local executable through PATH with broad execution authority and a very broad trigger.

Review before installing. Only use this in an environment where seo-autopilot is already installed from a trusted source and PATH cannot be influenced by untrusted directories. Expect it may use local repository and network credentials to create PRs. Prefer adding an explicit confirmation step, a narrower trigger, and a pinned absolute path or bundled reviewed implementation before routine use.

Vulnerability Patterns
  • Tool Hijacking and SpoofingModifies or replaces tools so legitimate-looking calls execute attacker logic
  • 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
  • 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 (1)

T07 · Tool Hijacking and Spoofing

Error
Location
scripts/run.sh:10
Finding

Untrusted PATH Resolution Allows Executable Hijacking

Content
View full analysis

Vulnerability Details

File Location: scripts/run.sh, line 10
Vulnerability Type: Unqualified external executable invocation
Risk Level: High

Vulnerable Code

bash
OUT="$(seo-autopilot "$SITE" 2>&1 || true)"

Technical Analysis

The script invokes seo-autopilot by name without using a canonical absolute path, verifying its resolved location, or checking its integrity. The shell therefore searches the runtime PATH and executes the first matching file.

The audited project does not contain the seo-autopilot implementation or define a pinned, trusted installation source. Consequently, the actual executable and its SEO, network, repository-modification, and pull-request behavior cannot be verified from this package.

An attacker who can write to a directory that precedes the legitimate executable in PATH, or who can influence the process environment, can provide a malicious executable named seo-autopilot. Triggering the skill would then execute that program with the privileges of the agent or user running the script.

The || true construct additionally suppresses every nonzero exit status from the external executable. Although captured output remains available, the wrapper continues as if the command succeeded, which can conceal execution failures or malicious substitution from calling automation.

Attack Path

  1. The attacker gains write access to a directory that appears before the trusted tool directory in the runtime PATH, or influences PATH before the skill is launched.
  2. The attacker places an executable named seo-autopilot in that directory.
  3. A user or agent triggers the skill with an allowed site, such as boll-koll.se.
  4. The allowlist check succeeds.
  5. Line 10 resolves seo-autopilot through the attacker-influenced PATH and runs the malicious executable.
  6. The executable performs arbitrary actions under the privileges of the invoking process and can emit a plausible PR: line to impersonate l ...[truncated 834 chars]
Remediation
View remediation

Remediation Suggestions

  1. Bundle a reviewed implementation with the project and invoke it through a canonical path derived from the script directory, for example:

    bash
    SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
    TOOL="$SCRIPT_DIR/seo-autopilot"
    
    [[ -x "$TOOL" ]] || {
      echo "ERROR: trusted seo-autopilot executable is unavailable" >&2
      exit 1
    }
    
    OUT="$("$TOOL" "$SITE" 2>&1)"
    
  2. If the executable must be installed externally, document and pin its trusted source and version. Resolve its absolute path and verify that it is located in an approved, non-user-writable directory.

  3. Where practical, verify the executable against an approved cryptographic checksum or signed release before execution.

  4. Set a minimal trusted PATH inside the script and reject resolutions from writable or unexpected directories. An absolute path is preferable to relying on PATH.

  5. Remove || true. Capture and propagate failures explicitly so callers cannot mistake failed execution for success:

    bash
    if ! OUT="$("$TOOL" "$SITE" 2>&1)"; then
      printf '%s\n' "$OUT" >&2
      exit 1
    fi
    
  6. Run the external tool with least privilege and expose only the repository credentials, filesystem paths, and network access required for the SEO task.

Vulnerability Patterns
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • 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 (5)

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 15)May include surrounding context.

md
- scripts/run.sh

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 31)May include surrounding context.

md
- scripts/run.sh

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 36)May include surrounding context.

md
- scripts/run.sh

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The trigger phrase "seo" is very broad and can easily match unrelated user messages, causing the skill to run unexpectedly. Because this skill has access to the exec tool and can launch a local script, accidental invocation increases the chance of unintended code execution and repository changes.

Content

No source excerpt is available for this finding.

Unrestricted Tool Access

Medium
Category
Excessive Agency
Confidence
80% confidence
Finding

Skill grants unrestricted tool access without appropriate constraints. An agent with unfettered tool access can perform arbitrary actions including file modification, network requests, and code execution.

Content

Scanner excerpt · SKILL.md (reported line 30)May include surrounding context.

md
## Safety
Only allow: boll-koll.se, hyresbyte.se  
Never run arbitrary commands. Only run:
- scripts/run.sh <site>

## Behavior

Static analysis

No suspicious patterns detected.