Back to skill

Security audit

Geo Seo

Security checks for vulnerabilities and agentic risk

Overview

The skill is a coherent GEO SEO reference, but it gives users copy-paste automation that can run unverified third-party code and create persistent monitoring with weak storage safeguards.

Install only if you are comfortable reviewing and hardening the example automation. Pin and inspect any third-party repository before running it, avoid running the cron job as root, store reports in a private user-owned directory, and keep WordPress analytics outside the public web root or protect them with server rules.

Vulnerability Patterns
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • 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
Findings (3)

T03 · Remote Payload Retrieval and Execution

Error
Location
scripts/script.sh:213
Finding

Unpinned Third-Party Repository Is Retrieved and Executed

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/script.sh:245
Finding

Predictable Shared Temporary Files Permit Symlink-Based File Overwrite

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/script.sh:434
Finding

WordPress Bot Analytics Are Stored in a Potentially Public Web Directory

Content
View full analysis
0, 'bots' => array(), 'pages' => array()); } $data[$date]['total']++; $data[$date]['bots'][$matched] = ($data[$date]['bots'][$matched] ?? 0) + 1; $data[$date]['pages'][$uri] = ($data[$date]['pages'][$uri] ?? 0) + 1; // Keep 30 days $cutoff = date('Y-m-d', strtotime('-30 days')); foreach (array_keys($data) as $k) { if ($k < $cutoff) unset($data[$k]); } file_put_contents($log, json_encode($data, JSON_PRETTY_PRINT)); ``` ### Technical Analysis The suggested WordPress must-use plugin writes analytics to `WP_CONTENT_DIR/ai-bot-log.json`. In common WordPress deployments, `wp-content` resides under the public document root and static JSON files can be downloaded directly unless the web server has an explicit deny rule. The log records dates, detected crawler identities, request counts, and requested URL paths. Although query strings are removed with `parse_url(..., PHP_URL_PATH)`, the paths themselves may disclose unpublished, obscure, administrative-looking, or operational endpoints. No access-control configuration, authentication requirement, placement outside the document root, or restrictive file-permission setup accompanies the example. ### Attack Path 1. An administrator installs the suggested tracker as a WordPress must-use plugin. 2. AI crawler requests are recorded in `wp-content/ai-bot-log.json`. 3. The web server serves files fro ...[truncated 826 chars]
Remediation
View remediation
Vulnerability Patterns
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • 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 (1)

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
70% confidence
Finding

Without declared permissions the skill's intent is opaque and cannot be validated.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.