T09 · Insecure Skill Coding Practices
- Location
scripts/crawl_website.py:18- Finding
Server-Side Request Forgery Through Unrestricted Website Crawling
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill does useful website-analysis support work, but it gives the agent an unrestricted URL fetcher and can generate Excel files containing unsafe formula-like content.
Review this skill before installing in environments with access to internal networks, cloud metadata services, or sensitive local files. Only run the crawler on trusted public URLs, consider adding private-network and redirect blocking, and sanitize Excel cell values so generated workbooks cannot contain formulas from untrusted content.
scripts/crawl_website.py:18Server-Side Request Forgery Through Unrestricted Website Crawling
scripts/generate_excel.py:136Spreadsheet Formula Injection in Generated Excel Workbooks
SKILL.md:18Unpinned Third-Party Dependency Installation
The declared description presents this skill as an analysis tool that produces strategic marketing outputs: multi-language content strategy, keyword research, competitor analysis, and SEO planning. The code does not perform those tasks. It simply requests one URL, parses the HTML with BeautifulSoup, extracts the page title, meta description, and external HTTP links, and writes the result to a JSON file. Although crawling a website could be a supporting step for later analysis, the supplied code chunk itself lacks any logic for keyword extraction, competitor identification, language/country targeting, industry analysis, or strategic recommendations. Therefore the actual behavior is materially narrower and different from the declared purpose.
The declared purpose suggests an analysis skill that takes a website URL and produces strategic SEO/content insights such as keyword research, competitor analysis, and multilingual content planning. However, the supplied code only formats provided analysis data into an Excel workbook using openpyxl. It reads JSON from a local file, creates three sheets, localizes labels for several languages, and saves the workbook. There is no network access, no URL processing, no crawling or parsing of websites, no search/SEO analysis, and no competitor discovery or research logic. While the workbook structure aligns with the output themes mentioned in the description, the actual implemented behavior is materially different: it is an export/report-generation utility rather than an analysis skill. Therefore this is a clear description-behavior mismatch.
The skill instructs use of network access to crawl arbitrary user-provided URLs and file creation to generate an Excel report, but it does not declare any tool scope or permissions. Missing scope declarations reduce transparency and policy enforcement, making it easier for an agent to perform network and filesystem actions without clear user awareness or platform-level restriction.
The skill directs the agent to crawl a user-supplied website and generate a local Excel file without clearly warning about outbound network requests or filesystem writes. This can surprise users, enable unintended access to internal or sensitive URLs, and create artifacts on disk without explicit consent.
The instruction 'Output complete report (in target language)' imposes a language behavior as part of the skill flow. Although the user supplies a target language, the file does not state that conversation/report language is optional or user-adjustable beyond that parameter.
This line enforces a specific language output policy for generated content. Even though the workflow collects a target language, the document does not clearly frame this as an opt-in preference or offer flexibility if the user wants analysis in another language.
No suspicious patterns detected.