Back to skill

Security audit

Sm Saver

Security checks for vulnerabilities and agentic risk

Overview

This skill has a coherent link-saving purpose, but its instructions fetch arbitrary URLs through raw shell commands and persist the results, which creates real review-worthy risk.

Install only if you are comfortable with the agent fetching and logging links on your behalf. Treat links from untrusted people as unsafe until the skill is revised to validate URLs, avoid shell-string interpolation, restrict internal-network access, and let you review entries before writing them.

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
SKILL.md:27
Finding

Command Injection Through Untrusted URL Interpolation

Content
View full analysis
" } ``` ```json { "tool": "exec", "command": "summarize \"\" --length short" } ``` ```json { "tool": "exec", "command": "python3 -c \"\nimport urllib.request, sys\nreq = urllib.request.Request('', headers={'User-Agent': 'Mozilla/5.0'})\nwith urllib.request.urlopen(req, timeout=10) as r:\n html = r.read().decode('utf-8', errors='ignore')\nimport re\ntitle = re.search(r'(.*?)', html, re.I)\nprint(title.group(1).strip() if title else '')\n\"" } ``` ### Technical Analysis The workflow instructs the agent to interpolate attacker-controlled URL values directly into shell command strings. The `xurl` command uses an entirely unquoted URL placeholder. Shell metacharacters in the supplied value can therefore terminate the intended argument and introduce additional commands. The `summarize` command places the URL inside double quotes, but does not escape embedded double quotes, command substitutions, backticks, or other shell-significant content. Quoting the placeholder in this manner does not provide safe argument separation. The Python fallback is exposed to two nested injection contexts: 1. The URL is inserted into Python source inside a single-quoted string. 2. The generated Python program is itself inserted into a shell command enclosed in double quotes. A crafted value can break out of either context and alter the executed Python program or shell command. No strict URL parser, character validation, argument-array execution mechanism, or shell bypass is specified. ### Attack Path 1. An attacker sends the agent a crafted Twitter, LinkedIn, or direct URL. 2. The skill classifies the input and substitutes the attacker-controlled value into one of the documented `exec` command ...[truncated 1519 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:43
Finding

Server-Side Request Forgery Through Unrestricted URL Fetching

Content
View full analysis
\" --length short" } ``` ```json { "tool": "exec", "command": "python3 -c \"\nimport urllib.request, sys\nreq = urllib.request.Request('', headers={'User-Agent': 'Mozilla/5.0'})\nwith urllib.request.urlopen(req, timeout=10) as r:\n html = r.read().decode('utf-8', errors='ignore')\nimport re\ntitle = re.search(r'(.*?)', html, re.I)\nprint(title.group(1).strip() if title else '')\n\"" } ``` ### Technical Analysis The skill fetches user-selected locations without specifying restrictions on URL schemes, destination addresses, DNS resolution, ports, or redirects. The Python fallback passes the supplied value directly to `urllib.request.Request` and `urllib.request.urlopen`. As documented, no control prevents requests to: - Loopback addresses. - Private or link-local network ranges. - Internal hostnames resolvable only from the agent's environment. - Cloud instance metadata endpoints. - Services exposed on unusual ports. - Redirect targets that resolve to otherwise prohibited destinations. - Non-HTTP schemes supported by the active URL-handling environment. The ten-second timeout limits request duration but does not prevent access to sensitive destinations. There is also no response-size limit, creating an additional resource-consumption risk when a remote server returns a very large response. ### Attack Path 1. An attacker submits a direct URL, LinkedIn URL, or a Twitter post containing a crafted linked URL. 2. The skill forwards the URL to `summarize` or the Python `urllib` fallback. 3. The URL resolves to a loopback, private, link-local, metadata, or otherwise internal destination reachable from the agent. 4. The fetch is issued from the agent's trusted netwo ...[truncated 1415 chars]
Remediation
View remediation
Vulnerability Patterns
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (2)

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The skill is scoped to activate on 'any URL' or 'any link they want to keep,' which is overly broad for a tool that performs network fetches and writes to persistent storage. This increases the chance of accidental invocation on untrusted or sensitive links, leading to unintended external requests, content processing, and local logging without clear user confirmation.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill instructs the agent to append data to ~/workspace/resources.md automatically, creating or modifying persistent local state without warning the user. This can cause silent data retention, privacy issues, and accumulation of attacker-controlled content in a local file, especially because the skill ingests arbitrary remote URLs and summaries.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.