Back to skill

Security audit

WebClip Save & Summarize Web Pages

Security checks for vulnerabilities and agentic risk

Overview

This web clipping skill is mostly purpose-aligned, but its arbitrary URL fetching and save function have concrete safety gaps that warrant review before installation.

Install only if you are comfortable running a skill that can make outbound requests from your machine and write markdown files locally. Use it with trusted URLs, avoid attacker-supplied filenames, and prefer a patched version that validates DNS targets, blocks private/internal networks robustly, and confines saved files to its cache directory.

Vulnerability Patterns
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (2)

T09 · Insecure Skill Coding Practices

Error
Location
src/web-clip.js:37
Finding

SSRF Protection Can Be Bypassed Through DNS Resolution

Content
View full analysis
5) return Promise.reject(new Error('Too many redirects')); // Block internal/metadata URLs const parsed = new URL(url); const h = parsed.hostname.replace(/^\[|\]$/g, ''); // Strip IPv6 brackets if (/^(127\.|10\.|172\.(1[6-9]|2\d|3[01])\.|192\.168\.|169\.254\.|0\.|localhost$|::1$|::ffff:|0{1,4}:|fe80:)/i.test(h)) { return Promise.reject(new Error('Blocked: internal URL')); } const client = url.startsWith('https') ? https : http; return new Promise((resolve, reject) => { const req = client.get(url, { headers: { 'User-Agent': 'WebClip/1.0' }, timeout: 10000 }, res => { if (res.statusCode >= 300 && res.statusCode < 400 && res.headers.location) { return this._get(res.headers.location, _redirects + 1).then(resolve).catch(reject); } let data = ''; const maxSize = 10 * 1024 * 1024; // 10MB max res.on('data', c => { data += c; if (data.length > maxSize) { req.destroy(); reject(new Error('Response too large')); } }); res.on('end', () => resolve(data)); }); req.on('error', reject); req.on('timeout', () => { req.destroy(); reject(new Error('Timeout')); }); }); } ``` ### Technical Analysis The internal-network restriction validates only the textual hostname supplied in the URL. It does not resolve the hostname and inspect the IP addresses to which the Node.js networking stack will connect. Consequently, an attacker-controlled public-looking hostname may pass the regular expression and subsequently resolve to a loopback, private, link-local, or cloud metadata address. DNS rebinding can also cause a hostname to resolve to an acceptable address during validation and an internal address when the connection occurs. Variants not covered by the textual regu ...[truncated 1841 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
src/web-clip.js:30
Finding

Path Traversal Allows Files to Be Written Outside the Cache Directory

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
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (7)

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

The documented purpose understates the real behavior: the skill claims safe clipping/summarization, but the detected behavior includes local file writes/cache, raw HTML handling, and possibly missing summarization. This mismatch is dangerous because operators may approve or invoke the skill under a lower-risk assumption while it performs broader actions that can expose sensitive internal resources, persist untrusted content locally, or bypass review expectations.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
91% confidence
Finding

The skill advertises network-capable behavior ('fetch web pages') but does not declare any explicit tool scope or permissions boundaries. In an agent ecosystem, undeclared network capability reduces transparency and can let a skill be invoked in contexts where outbound requests were not expected, increasing the risk of SSRF-like access, unreviewed data retrieval, or policy bypass.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The skill description is broadly phrased ('fetch any web page' and 'perfect for research tasks') without clear invocation boundaries, input restrictions, or prohibited targets. In agent settings, vague activation criteria can cause over-broad use on attacker-supplied URLs, internal endpoints, or sensitive resources, making unintended network access more likely.

Content

No source excerpt is available for this finding.

Scope Creep

Low
Category
Excessive Agency
Confidence
70% confidence
Finding

Skill's behavior or capabilities extend beyond its stated purpose. Scope creep allows an agent to perform actions unrelated to its documented functionality, increasing the attack surface.

Content

Scanner excerpt · README.md (reported line 54)May include surrounding context.

md
**USE AT YOUR OWN RISK.**

- The author(s) are NOT liable for any damages, losses, or consequences arising from 
  the use or misuse of this software — including but not limited to financial loss, 
  data loss, security breaches, business interruption, or any indirect/consequential damages.
- This software does NOT constitute financial, legal, trading, or professional advice.
- Users are solely responsible for evaluating whether this software is suitable for

Scope Creep

Low
Category
Excessive Agency
Confidence
70% confidence
Finding

Skill's behavior or capabilities extend beyond its stated purpose. Scope creep allows an agent to perform actions unrelated to its documented functionality, increasing the attack surface.

Content

Scanner excerpt · SKILL.md (reported line 67)May include surrounding context.

md
**USE AT YOUR OWN RISK.**

- The author(s) are NOT liable for any damages, losses, or consequences arising from 
  the use or misuse of this software — including but not limited to financial loss, 
  data loss, security breaches, business interruption, or any indirect/consequential damages.
- This software does NOT constitute financial, legal, trading, or professional advice.
- Users are solely responsible for evaluating whether this software is suitable for

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
85% confidence
Finding

The fetch workflow retrieves remote web content via HTTP/HTTPS, which is a network operation affecting privacy and external communications, but the code includes no user-facing warning, log, or comment disclosing that URLs will be requested over the network. Under the code-file criteria, network/HTTP calls that transmit user or system data should have some visible disclosure unless already clearly warned elsewhere.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
91% confidence
Finding

The save method writes markdown content to disk with fs.writeFileSync, but there is no confirmation prompt, log message, or explanatory comment/docstring warning that local files will be created. For this code file, file writes are in scope for missing user warnings unless the disclosure is visible in code or accompanying markdown.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.