T09 · Insecure Skill Coding Practices
- Location
scripts/audit_page.py:138- Finding
Server-Side Request Forgery Through Unvalidated Redirect Destinations
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This SEO skill is mostly transparent, but its URL audit script can be tricked into fetching internal network pages through redirects, so it needs review before use.
Use this skill only for public sites and preferably in an environment without access to sensitive internal services. Before broad installation, fix the audit script to disable automatic redirects or validate every redirect destination, and keep package installation user-approved.
scripts/audit_page.py:138Server-Side Request Forgery Through Unvalidated Redirect Destinations
The code does perform part of the declared SEO auditing purpose: on-page and some technical SEO checks for a supplied URL. However, the description substantially overstates breadth and depth. There is no implementation for local SEO, GBP gaps, keyword research, backlink analysis, content strategy beyond simple word count, or any execution/remediation actions. The code also does not crawl a site broadly; it fetches one page and optionally robots.txt and sitemap endpoints. Network access to public URLs is consistent with SEO auditing, and the host/IP blocking is a supporting safety measure rather than a mismatch. Overall, the declared description is materially broader than the actual behavior.
Code accesses a cloud instance metadata endpoint (e.g. 169.254.169.254). A single request can return temporary IAM credentials, making this a high-value SSRF target for credential theft.
TIMEOUT = 20
BLOCKED_HOSTS = {
"localhost",
"metadata.google.internal",
}
BLOCKED_IPS = {
"127.0.0.1",
Code accesses a cloud instance metadata endpoint (e.g. 169.254.169.254). A single request can return temporary IAM credentials, making this a high-value SSRF target for credential theft.
"127.0.0.1",
"0.0.0.0",
"::1",
"169.254.169.254",
}
Without declared permissions the skill's intent is opaque and cannot be validated.