The audit confirms expected outbound requests to selected websites and the fixed DataForSEO API; most alerts are documentation or lexical false positives. The local audit accepts arbitrary URLs without blocking private, loopback, or link-local destinations, creating a high-confidence SSRF risk. No prompt injection or malicious credential handling was found.
The audit passes an unrestricted URL to urllib. A caller can target loopback, link-local, private, or redirected internal HTTP services and expose parsed page data.
The command-line URL flows directly into urllib.request.urlopen without scheme, DNS, private-address, redirect, or response-size validation.
Capability review items (32)
These are real local capabilities that may be expected for this skill, so they require review but are not counted as confirmed malicious behavior.
This documented workflow issues an outbound request or opens a named search service for the selected website. The behavior is explicit and expected, but requires authorization.
This documented workflow issues an outbound request or opens a named search service for the selected website. The behavior is explicit and expected, but requires authorization.
curl -s "https://example.com/sitemap.xml" | head -30
This documented workflow issues an outbound request or opens a named search service for the selected website. The behavior is explicit and expected, but requires authorization.
This documented workflow issues an outbound request or opens a named search service for the selected website. The behavior is explicit and expected, but requires authorization.
This documented workflow issues an outbound request or opens a named search service for the selected website. The behavior is explicit and expected, but requires authorization.
This documented workflow issues an outbound request or opens a named search service for the selected website. The behavior is explicit and expected, but requires authorization.
This documented workflow issues an outbound request or opens a named search service for the selected website. The behavior is explicit and expected, but requires authorization.
This documented workflow issues an outbound request or opens a named search service for the selected website. The behavior is explicit and expected, but requires authorization.
This documented workflow issues an outbound request or opens a named search service for the selected website. The behavior is explicit and expected, but requires authorization.
This documented workflow issues an outbound request or opens a named search service for the selected website. The behavior is explicit and expected, but requires authorization.
This documented workflow issues an outbound request or opens a named search service for the selected website. The behavior is explicit and expected, but requires authorization.
This documented workflow issues an outbound request or opens a named search service for the selected website. The behavior is explicit and expected, but requires authorization.
The helper reads a purpose-specific DataForSEO credential from the environment. This is expected authentication behavior, but it is real secret access.
The helper reads a purpose-specific DataForSEO credential from the environment. This is expected authentication behavior, but it is real secret access.
This code performs authenticated HTTPS requests to the fixed DataForSEO API and sends requested SEO query data. The network behavior is expected but real.
This code performs authenticated HTTPS requests to the fixed DataForSEO API and sends requested SEO query data. The network behavior is expected but real.
with urllib.request.urlopen(req, timeout=60) as resp:
This code performs authenticated HTTPS requests to the fixed DataForSEO API and sends requested SEO query data. The network behavior is expected but real.
This code performs authenticated HTTPS requests to the fixed DataForSEO API and sends requested SEO query data. The network behavior is expected but real.
The audit client fetches a user-supplied URL through urllib. This is intended network behavior, but the destination is not restricted to public addresses.
with urllib.request.urlopen(req, timeout=timeout) as resp:
The audit client fetches a user-supplied URL through urllib. This is intended network behavior, but the destination is not restricted to public addresses.
The audit client fetches a user-supplied URL through urllib. This is intended network behavior, but the destination is not restricted to public addresses.
This documented workflow issues an outbound request or opens a named search service for the selected website. The behavior is explicit and expected, but requires authorization.
curl -s "https://example.com/sitemap.xml" | head -50
This documented workflow issues an outbound request or opens a named search service for the selected website. The behavior is explicit and expected, but requires authorization.
open "https://search.google.com/test/rich-results?url={encoded_url}"
This documented workflow issues an outbound request or opens a named search service for the selected website. The behavior is explicit and expected, but requires authorization.
open "https://validator.schema.org/?url={encoded_url}"
This documented workflow issues an outbound request or opens a named search service for the selected website. The behavior is explicit and expected, but requires authorization.
open "https://www.google.com/search?q=site:{domain}"
This documented workflow issues an outbound request or opens a named search service for the selected website. The behavior is explicit and expected, but requires authorization.
open "https://www.bing.com/search?q=site:{domain}"
This documented workflow issues an outbound request or opens a named search service for the selected website. The behavior is explicit and expected, but requires authorization.
Most static findings are false positives from Markdown examples, JSON-LD templates, placeholder URLs, and words containing key. Real risks remain from outbound website audits, DataForSEO API communication, and environment-based API credentials. No prompt-injection evidence was found.
The audit script accepts a URL argument and fetches that page, then derives robots.txt and sitemap.xml URLs from the same host. Without host validation, running it in a privileged agent environment could reach internal services or attacker-controlled hosts.
The code directly uses user-provided URL input in urllib requests and derives additional URLs from that host. This is intentional SEO behavior, but the absence of host controls creates SSRF-style risk.
Capability review items (9)
These are real local capabilities that may be expected for this skill, so they require review but are not counted as confirmed malicious behavior.
The helper reads DataForSEO credentials from environment variables. This is intended, but it gives the skill access to user-provided API secrets when scripts run.
The helper reads DataForSEO credentials from environment variables. This is intended, but it gives the skill access to user-provided API secrets when scripts run.
The DataForSEO wrapper makes outbound HTTPS requests to the documented API endpoint. This network access is expected for keyword research, but it is real third-party communication.
The DataForSEO wrapper makes outbound HTTPS requests to the documented API endpoint. This network access is expected for keyword research, but it is real third-party communication.
with urllib.request.urlopen(req, timeout=60) as resp:
The DataForSEO wrapper makes outbound HTTPS requests to the documented API endpoint. This network access is expected for keyword research, but it is real third-party communication.
The DataForSEO wrapper makes outbound HTTPS requests to the documented API endpoint. This network access is expected for keyword research, but it is real third-party communication.
The SEO audit script uses urllib to fetch a target page and related crawl files. The behavior is intended, but it performs outbound requests from the runtime environment.
with urllib.request.urlopen(req, timeout=timeout) as resp:
The SEO audit script uses urllib to fetch a target page and related crawl files. The behavior is intended, but it performs outbound requests from the runtime environment.
Most static findings are false positives from markdown examples, schema placeholders, and words like keyword. Confirmed issues are limited to intended network and API access, environment credential reads, unrestricted URL fetching, and one dangerous curl-to-shell example in documentation. No prompt injection attempt was found.
The SEO audit script accepts a URL argument, prepends https when no scheme exists, and fetches the page, robots.txt, and sitemap.xml without host restrictions. A malicious or mistaken target could make the agent contact internal or sensitive network addresses.
The code directly fetches user-controlled URLs and derived paths with urllib and no allowlist or private network guard. The behavior is useful for SEO, but it creates a clear SSRF-style risk in agent environments.
Capability review items (18)
These are real local capabilities that may be expected for this skill, so they require review but are not counted as confirmed malicious behavior.
The module posts data to api.dataforseo.com and attaches Basic authentication built from environment credentials. This is intended API use, but it is real external network and credential transmission.
The module posts data to api.dataforseo.com and attaches Basic authentication built from environment credentials. This is intended API use, but it is real external network and credential transmission.
with urllib.request.urlopen(req, timeout=60) as resp:
The module posts data to api.dataforseo.com and attaches Basic authentication built from environment credentials. This is intended API use, but it is real external network and credential transmission.
The module posts data to api.dataforseo.com and attaches Basic authentication built from environment credentials. This is intended API use, but it is real external network and credential transmission.
The SEO audit script fetches a user-provided URL plus robots.txt and sitemap.xml. This is intended behavior, but it can reach arbitrary hosts from the agent environment.
with urllib.request.urlopen(req, timeout=timeout) as resp:
The SEO audit script fetches a user-provided URL plus robots.txt and sitemap.xml. This is intended behavior, but it can reach arbitrary hosts from the agent environment.
The SEO audit script fetches a user-provided URL plus robots.txt and sitemap.xml. This is intended behavior, but it can reach arbitrary hosts from the agent environment.
The primary skill instructions direct agents to run curl, python, or browser commands that contact external URLs. This is expected for SEO auditing but requires user consent.
The primary skill instructions direct agents to run curl, python, or browser commands that contact external URLs. This is expected for SEO auditing but requires user consent.
The primary skill instructions direct agents to run curl, python, or browser commands that contact external URLs. This is expected for SEO auditing but requires user consent.
curl -s "https://example.com/sitemap.xml" | head -50
The primary skill instructions direct agents to run curl, python, or browser commands that contact external URLs. This is expected for SEO auditing but requires user consent.
open "https://search.google.com/test/rich-results?url={encoded_url}"
The primary skill instructions direct agents to run curl, python, or browser commands that contact external URLs. This is expected for SEO auditing but requires user consent.
open "https://validator.schema.org/?url={encoded_url}"
The primary skill instructions direct agents to run curl, python, or browser commands that contact external URLs. This is expected for SEO auditing but requires user consent.
open "https://www.google.com/search?q=site:{domain}"
The primary skill instructions direct agents to run curl, python, or browser commands that contact external URLs. This is expected for SEO auditing but requires user consent.
open "https://www.bing.com/search?q=site:{domain}"
The primary skill instructions direct agents to run curl, python, or browser commands that contact external URLs. This is expected for SEO auditing but requires user consent.
Static analysis reported many command, network, and weak-crypto patterns, but most weak-crypto and backtick matches are markdown examples or false positives. Real risk comes from scripts that fetch arbitrary URLs, call DataForSEO with environment credentials, and documentation that includes shell command examples.
18
Files scanned
3,098
Lines analyzed
7
Review items
1
False positives ignored
Capability review items (3)
These are real local capabilities that may be expected for this skill, so they require review but are not counted as confirmed malicious behavior.
The SEO audit script accepts a URL, fetches that page, and derives robots.txt and sitemap URLs from the same host. This is intended SEO behavior, but it can disclose target URLs and may reach internal hosts if run in a privileged environment.
The code directly opens user-provided or derived URLs with urllib. The behavior matches the skill purpose, so the risk is contextual rather than malicious.
DataForSEO scripts read DATAFORSEO_LOGIN and DATAFORSEO_PASSWORD, create a Basic Authorization header, and send keyword, domain, SERP, and backlink requests to api.dataforseo.com. This is documented functionality, but users must understand that credentials and query data leave the local environment.
Environment credential access and outbound POST requests are clear in the helper module. The destination is a relevant SEO provider, which lowers malicious-intent confidence.
A schema template includes an example answer telling users to run a curl command piped into bash. It is inside documentation and does not execute by itself, but it can encourage unsafe installation instructions in generated content.
The exact pipe-to-shell pattern appears in a markdown JSON-LD example. Context confirms it is documentation, not active code execution.
Static false positives ignored (1)
These static matches were dismissed by semantic review or matched schema-only tokens, so they are shown for transparency but do not drive the quality score.
Static Command and Crypto Matches Are Mostly False Positives
Many external command detections are fenced markdown examples for curl, open, JSON, or HTML snippets. Many weak-crypto detections appear to match ordinary SEO text such as description, HTTPS, schema properties, or example metadata, with no cryptographic implementation found.
Targeted review showed documentation examples rather than executable Ruby backticks or crypto code. This confidence is high for reviewed samples, but not every reported line was manually inspected.
Legitimate SEO optimization skill with no security concerns. All static findings are false positives. The external_commands detections are documentation code blocks in markdown files, not executable shell commands. Network access is for SEO API calls to legitimate services. Environment variable access is for standard API credential management. No prompt injection attempts detected. Skill intent is clearly documented as SEO/GEO optimization.