Back to skill

Security audit

seo-google

Security checks for vulnerabilities and agentic risk

Overview

This skill is a disclosed Google SEO API helper with no hidden execution or exfiltration found, but users should treat its Google credentials and optional paid/broader APIs carefully.

Install only if you are comfortable giving the skill access to the specific Google properties and APIs you configure. Use a dedicated Google Cloud project and service account, restrict API keys, avoid Owner access unless you need Indexing API operations, and set credential files to owner-only permissions.

Vulnerability Patterns
  • 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
  • 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)

T09 · Insecure Skill Coding Practices

Warning
Location
references/auth-setup.md:82
Finding

Credential Files Are Stored Without Enforced Restrictive Permissions

Content
View full analysis

Vulnerability Details

File Location: references/auth-setup.md, lines 46 and 82–96
Vulnerability Type: Insecure local credential storage
Risk Level: Medium

Complete Vulnerable Snippet

text
5. Download the JSON file and store it securely (e.g., `~/.config/seo-geo-skill/service_account.json`)
bash
mkdir -p ~/.config/seo-geo-skill
text
Save to `~/.config/seo-geo-skill/google-api.json`:
json
{
  "service_account_path": "~/.config/seo-geo-skill/service_account.json",
  "api_key": "<GOOGLE_API_KEY>",
  "default_property": "sc-domain:example.com",
  "ga4_property_id": "properties/123456789"
}

Technical Analysis

The setup instructions place an API key and a service-account JSON file under the user's home directory but do not enforce restrictive permissions on either the directory or the files. A Google service-account JSON file contains a private key, while google-api.json contains an API key and the path to that private key.

The command mkdir -p applies permissions according to the user's current umask. It does not guarantee that the directory is accessible only by its owner. Likewise, files created by an editor, redirection, or another setup process may be group-readable or world-readable under a permissive umask.

This issue does not itself transmit credentials to an unrelated endpoint. The Skill's network access is directed toward documented Google APIs and is necessary for its declared SEO functionality. The weakness is the lack of local access-control hardening around those credentials.

Attack Path

  1. A user follows the documented setup and creates ~/.config/seo-geo-skill.
  2. The user saves google-api.json and the service-account JSON file without explicitly setting permissions.
  3. The system or account has a permissive umask, shared home directory, backup exposure, or another local account capable of reading those files.
  4. The attacker obtains the API key or service-account private ...[truncated 1420 chars]
Remediation
View remediation

Remediation Suggestions

Create the credential directory with owner-only access:

bash
install -d -m 700 ~/.config/seo-geo-skill

After creating the configuration and service-account files, explicitly restrict them:

bash
chmod 600 ~/.config/seo-geo-skill/google-api.json
chmod 600 ~/.config/seo-geo-skill/service_account.json

The setup guide should also:

  1. Instruct users to verify permissions with stat or ls -l.
  2. Recommend restricting API keys to the minimum required APIs and, where feasible, applicable client restrictions.
  3. Use separate service accounts for read-only Search Console and GA4 reporting versus Indexing API operations.
  4. Avoid granting Search Console Owner access unless the user explicitly needs eligible Indexing API operations.
  5. State that the service account should receive no project-level IAM roles unless independently required.
  6. Recommend credential rotation after suspected exposure.
  7. Warn against committing either JSON file to version control, placing it in shared directories, or including it in unencrypted backups.
  8. Prefer a managed secret store or short-lived credentials where the deployment environment supports them.
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Rogue AgentSelf-Modification, Session Persistence
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
Findings (17)

Anti-Refusal Statement

High
Category
Anti-Refusal
Confidence
85% confidence
Finding

Skill instructs the agent to omit warnings, disclaimers, or ethical commentary. Stripping safety caveats hides risk from the user and is a common jailbreak preamble.

Content

Scanner excerpt · references/dma-consent-mode-v2.md (reported line 27)May include surrounding context.

md
has `eu_data_collection_disabled` or denies ad_storage by default,
   note "EU traffic counts are conservative; conversion-modelled
   uplift may apply."
3. **Do not lecture the user on cookie consent UX** — that's a legal
   team / engineering concern outside SEO scope. Just attach the
   diagnostic note.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The manifest description materially understates the skill’s actual capabilities. A caller or orchestrator may route this skill under the assumption that it only performs SEO telemetry, while the body also exposes YouTube search, NLP analysis, Google Ads keyword research, Knowledge Graph lookup, Web Risk checks, and report generation, expanding data access and action surface beyond what is declared.

Content

No source excerpt is available for this finding.

Session Persistence

Medium
Category
Rogue Agent
Confidence
60% confidence
Finding

Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Content

Scanner excerpt · references/auth-setup.md (reported line 33)May include surrounding context.

md
| Google Analytics Data API | GA4 organic traffic |
| Knowledge Graph Search API | Entity verification (optional) |

## Step 3: Create an API Key

1. **APIs & Services > Credentials > Create Credentials > API key**
2. Click **Restrict key**:

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

This reference documents Google Ads Keyword Planner capabilities under a skill whose declared scope is limited to SEO-related Google APIs such as Search Console, PageSpeed, CrUX, Indexing API, and GA4 organic traffic. That scope expansion can mislead agents or users into invoking undeclared ad-platform functionality, potentially causing unauthorized use of separate credentials, billing exposure, or access to APIs not covered by the skill’s manifest and review boundary.

Content

No source excerpt is available for this finding.

Session Persistence

Medium
Category
Rogue Agent
Confidence
60% confidence
Finding

Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Content

Scanner excerpt · references/keyword-planner-api.md (reported line 7)May include surrounding context.

md
## Prerequisites (More Complex Than Other Google APIs)

1. **Google Ads Manager Account** -- create at ads.google.com (free to create)
2. **Developer Token** -- apply at Google Ads API Center (requires Basic access approval)
3. **OAuth 2.0 credentials** -- reuse existing OAuth client from seo-google config
4. **For exact volumes**: Run a minimal campaign (~$5-10/day). Without spend, volumes are bucketed ranges ("1K-10K")

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The manifest describes capabilities centered on Search Console, PageSpeed Insights, CrUX, Indexing API, and GA4 organic traffic. This file documents use of the Google Cloud Natural Language API for entity extraction, sentiment, classification, and moderation, which is a materially different capability not mentioned in the manifest description.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The manifest describes the skill as covering Search Console, PageSpeed Insights, CrUX, Indexing API, and GA4 organic traffic. This quota document additionally presents Knowledge Graph, Custom Search, and Web Risk as part of the consolidated API set, which broadens the apparent operational scope beyond the declared purpose.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The statement 'All APIs used by seo-google' includes Knowledge Graph in the listed APIs, but Knowledge Graph is not mentioned in the skill manifest description. This creates a semantic mismatch between the documented behavior/capabilities and the skill's declared scope.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The reference documents a destructive DELETE sitemap operation without any caution about user confirmation, authorization checks, or potential operational impact. In an agent setting, this can normalize unsafe execution and increase the chance that an LLM-driven workflow deletes sitemap configurations on behalf of a user without adequate safeguards.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

Documenting property removal via DELETE without warning is riskier in this skill context because the skill manages real Google Search Console resources. An autonomous or semi-autonomous agent could interpret this as an ordinary supported action and remove a verified property, causing monitoring disruption and administrative overhead even if the action is reversible only through reconfiguration.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The manifest describes the skill as covering Search Console, PageSpeed Insights, CrUX, Indexing API v3, and GA4 organic traffic. This file documents additional capabilities—Knowledge Graph Search, Custom Search JSON API, and Web Risk API—that are outside that stated scope, indicating the skill materials claim or support broader Google API coverage than the manifest advertises.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The file introduces YouTube Data API functionality that is outside the skill's declared scope of SEO Google APIs such as Search Console, PageSpeed, CrUX, Indexing API, and GA4 organic traffic. Scope expansion is dangerous because it can mislead downstream agents or users into invoking unrelated capabilities, increase attack surface, and create unauthorized data-access or policy-compliance paths that were not part of the skill's stated purpose.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
92% confidence
Finding

The documentation presents inconsistent credential-tier models, including a 4-tier table earlier and a later section claiming two credential tiers with different unlocks. This can cause an agent or operator to misunderstand which credentials grant access to sensitive Google services, leading to overbroad assumptions, incorrect fallbacks, or accidental invocation of higher-privilege operations.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Low
Category
Not specified by scanner
Confidence
95% confidence
Finding

The manifest describes this skill as covering Search Console, PageSpeed Insights, CrUX, Indexing API, and GA4 organic traffic. This documentation adds 'Knowledge Graph' as a supported API consumer, which expands the apparent capability beyond the manifest's stated scope.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Low
Category
Not specified by scanner
Confidence
96% confidence
Finding

The manifest does not mention entity verification or Knowledge Graph access, but the setup instructions tell users to enable that API for the skill. This creates a semantic mismatch between the claimed feature set and the documented capabilities.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Low
Category
Not specified by scanner
Confidence
94% confidence
Finding

The credential guidance instructs users to authorize the API key for Knowledge Graph Search API. Since the manifest does not describe Knowledge Graph usage, the documentation implies broader behavior than the skill claims.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
95% confidence
Finding

The documentation for this skill references 'the seo-geo-skill --limit option', but the manifest identifies the skill as 'seo-google'. This is an active documentation contradiction about which skill the behavior belongs to, and could mislead users or maintainers about intended scope or implementation.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.