Back to skill

Security audit

SEO Analyzer Pro

Security checks for vulnerabilities and agentic risk

Overview

The skill is a coherent SEO analyzer, but it exposes a credential-like API key and fetches arbitrary user-supplied URLs without clear safeguards.

Review carefully before installing. Only analyze public URLs, avoid internal or sensitive links, and require the publisher to remove and rotate the exposed API key and add URL validation that blocks private, localhost, link-local, and redirected internal destinations.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • 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
Findings (2)

T05 · Unauthorized Access and Privilege Escalation

Error
Location
handler.py:5
Finding

Unrestricted Server-Side Request Forgery Through User-Controlled URLs

Content
View full analysis
dict: try: resp = requests.get(url, timeout=10) ``` ```python def handle(input_text: str, user_id: str = "default") -> dict: url = re.search(r'https?://[^\s]+', input_text) if not url: return {"error": "Please provide a URL"} return analyze_seo(url.group(0)) ``` ### Technical Analysis The handler extracts an arbitrary HTTP or HTTPS URL from attacker-controlled input and passes it directly to `requests.get()`. It does not validate the destination hostname, resolved IP address, network range, port, or redirect chain. The timeout only limits request duration; it does not prevent access to loopback addresses, private networks, link-local services, cloud metadata endpoints, or other resources reachable from the execution environment. Because redirects are followed by `requests` by default, checking only the initial URL would also be insufficient. The implementation reads the full response body through `resp.text` without imposing a maximum response size. This creates an additional resource-exhaustion risk when a remote server returns an excessively large response. ### Attack Path 1. An attacker submits an SEO request containing a URL that targets an internal or privileged endpoint, such as a loopback address, RFC 1918 address, or link-local cloud metadata service. 2. `handle()` accepts the URL because it only verifies that the string begins with `http://` or `https://`. 3. `analyze_seo()` causes the Skill host to issue the request from its own network context. 4. The target response is loaded into memory and parsed. 5. Extracted title, description, and heading data—or network and application details contained in returned errors—may be exposed to the attacker. 6. The attacker can repeat the process against different hosts ...[truncated 1063 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
SKILL.md:48
Finding

Plaintext Hard-Coded API Credential in Skill Documentation

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • 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
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (3)

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

The skill embeds a live-looking API key directly in the markdown, which exposes a credential to anyone who can view or copy the skill. In this context, an SEO analyzer does not need to disclose raw secrets in its public description, so the key is an unjustified capability that could enable unauthorized API use, billing abuse, or pivoting into connected services.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The usage section lists example invocations like "Check SEO score of my website" and "SEO analysis for [URL]" but does not define whether these are the only triggers, what input formats are required, or any exclusion conditions. This ambiguity could cause unintended invocation because the phrases are general and there are no negative examples or scope limits.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

The skill indicates an external integration and accepts user-supplied URLs, but it does not warn users that submitted URLs may be sent to third-party services or fetched externally. In a URL-analysis context, that omission matters because users may unknowingly disclose internal, private, or sensitive links, and external fetching can create privacy and SSRF-like risk depending on implementation.

Content

No source excerpt is available for this finding.

Static analysis

Detected: suspicious.exposed_secret_literal

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
SKILL.md:48