Back to skill

Security audit

Crawlee

Security checks for vulnerabilities and agentic risk

Overview

This scraping guide is mostly coherent, but it includes unsafe crawler deployment and credential-handling examples that users should review before installing.

Install only if you are comfortable reviewing and adapting the examples. Pin package versions, avoid running installs with production secrets available, do not copy the web-server example without authentication and strict URL allowlisting, sanitize proxy logs, and use the skill only for authorized scraping that respects site rules and applicable law.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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 (3)

T09 · Insecure Skill Coding Practices

Error
Location
SKILL.md:611
Finding

Unauthenticated Server-Side Request Forgery in Crawler Web Server Example

Content
View full analysis
{ const url = new URL(req.url, 'http://localhost').searchParams.get('url'); const crawler = new CheerioCrawler({ maxRequestsPerCrawl: 1, async requestHandler({ $ }) { res.end(JSON.stringify({ title: $('title').text() })); }, }); await crawler.run([url]); }); server.listen(3000); ``` ### Technical Analysis The HTTP server takes the `url` query parameter from an incoming request and passes it directly to `crawler.run()` without validating its scheme, hostname, resolved IP address, port, or redirect destination. Because the crawler makes the request from the server's network context, a remote client could make it connect to resources that are inaccessible from the client's own network. Potential destinations include: - Loopback services such as `127.0.0.1` - Private network ranges - Link-local services - Cloud instance metadata endpoints - Internal administrative interfaces - Services on otherwise inaccessible ports The example also calls `server.listen(3000)` without specifying a loopback address. In Node.js, this commonly binds the server to all available interfaces, potentially exposing the endpoint to other hosts. Although the response only returns the fetched page's HTML title, this still provides a content and timing oracle. More importantly, the outbound GET request itself may trigger actions on internal services that incorrectly use GET requests for state changes. Redirects must also be validated. Validating only the initial hostname would not prevent an allowed public URL from redirecting the crawler to a private address. ### Attack Path 1. A user deploys the do ...[truncated 1449 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:342
Finding

Proxy Credentials May Be Exposed Through Application Logs

Content
View full analysis
Remediation
View remediation

T08 · Insecure Dependencies

Warning
Location
SKILL.md:54
Finding

Unpinned Third-Party Packages Are Downloaded and Executed

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • 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 (5)

Vague Triggers

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The trigger guidance is excessively broad and explicitly includes loosely related phrases, making the skill likely to activate in situations beyond clear user intent. Because this skill covers scraping, proxy use, anti-blocking, and browser automation, over-triggering can steer benign requests into higher-risk operational guidance that facilitates questionable or noncompliant data collection.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The skill discusses anti-blocking, proxy rotation, session persistence, screenshots, downloads, and local storage, but does not include clear warnings about privacy, authorization, robots.txt/terms compliance, or the fact that data and artifacts will be stored locally. In a scraping-focused skill, that omission increases the chance users will collect, persist, or exfiltrate sensitive data without understanding legal, ethical, or operational consequences.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
93% confidence
Finding

The skill recommends executing npx crawlee create my-crawler without pinning a package version, which means users may run whatever version is current at execution time. That creates a supply-chain risk: a malicious or compromised newly published version could execute code during install or scaffold generation.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
92% confidence
Finding

The skill instructs users to run npx playwright install without version pinning, so the fetched tooling is determined at runtime rather than from a reviewed, fixed version. In the event of an upstream compromise or breaking release, this can expose users to unreviewed code execution or unsafe dependency drift.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
92% confidence
Finding

This markdown file includes ds.drop() and kvs.drop() examples, which delete stored data, but the surrounding documentation does not warn that these calls are destructive or irreversible. Under the markdown criteria for SQP-2, user-facing docs should disclose behaviors that may affect user data or system integrity.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.