Back to skill

Security audit

Market Radar

Security checks for vulnerabilities and agentic risk

Overview

The skill has a coherent market-monitoring purpose, but it needs review because it runs Bash-based browser commands on user-controlled search terms and URLs without validation.

Review before installing. Use only with public https competitor URLs you trust, and avoid internal, localhost, private-network, or unusual scheme URLs. The publisher should add explicit URL validation, percent-encoding, redirect checks, and safe non-shell argument passing before broad use.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • 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 (2)

T09 · Insecure Skill Coding Practices

Error
Location
SKILL.md:52
Finding
Shell Command Injection Through Unescaped User-Controlled Input<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md:52`, `SKILL.md:60`, `SKILL.md:67`, `SKILL.md:74`, `SKILL.md:80-81`, `SKILL.md:108`, `SKILL.md:151`, `SKILL.md:173`, and `SKILL.md:180` **Vulnerability Type**: OS command injection through unsafe Bash interpolation **Risk Level**: High ### Vulnerable Code ```bash agent-browser open "https://news.google.com/search?q=INDUSTRY_EN&hl=en-US&gl=US&ceid=US:en" ``` ```bash agent-browser open "https://hn.algolia.com/?q=INDUSTRY_EN&dateRange=pastMonth&type=story" ``` ```bash agent-browser open "https://www.reddit.com/search/?q=INDUSTRY_EN&t=month&sort=relevance" ``` ```bash agent-browser open "https://www.bing.com/news/search?q=INDUSTRY_EN&freshness=Month" ``` ```bash agent-browser open "https://techcrunch.com/search/INDUSTRY_EN" agent-browser open "https://www.producthunt.com/search?q=INDUSTRY_EN" ``` ```bash agent-browser open COMPETITOR_URL agent-browser wait --load networkidle --timeout 3000 agent-browser snapshot -c ``` ```bash agent-browser open COMPETITOR_URL/blog # or /news /press /updates /articles agent-browser snapshot -c ``` ```bash agent-browser open COMPETITOR_URL/pricing agent-browser snapshot -c ``` ```bash agent-browser open COMPETITOR_URL/changelog # or /release-notes /whats-new /announcement agent-browser snapshot -c ``` ### Technical Analysis The skill directs the agent to derive `INDUSTRY_EN` and `COMPETITOR_URL` from user input and insert those values into commands executed through Bash. It does not require strict validation, safe argument passing, or shell escaping. The competitor URL placeholders are entirely unquoted. Consequently, Bash metacharacters such as semicolons, pipes, redirection operators, command substitutions, and logical operators may be interpreted as shell syntax rather than as part of a URL. The industry value is placed inside double quotes, but double quotes do not suppress command substitution through `$()` or backticks. A malicious industry value ...[truncated 2114 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Do not construct shell command strings using user-controlled data. Invoke `agent-browser` through an execution interface that accepts an argument array without invoking a shell, such as an equivalent of: ```text ["agent-browser", "open", validated_url] ``` 2. If Bash cannot be avoided, pass validated data as a positional argument rather than interpolating it into executable shell text. Do not rely on double quotes alone for protection. 3. Construct search URLs with a URL-building library: - Translate the industry term as data. - Percent-encode it as a query parameter or path segment. - Reject control characters and unexpected delimiters. - Pass the completed URL as one non-shell argument. 4. Validate competitor and brand URLs before use: - Require an absolute `https://` URL. - Parse it with a URL parser rather than regular-expression concatenation. - Reject credentials in URLs, control characters, whitespace, and unsupported ports. - Never append paths through raw string concatenation; use a URL resolver. 5. Add explicit skill instructions prohibiting direct interpolation of `INDUSTRY_EN`, `COMPETITOR_URL`, and `YOUR_BRAND_URL` into Bash commands. 6. Harden tool authorization so it validates the parsed executable and arguments rather than accepting any shell command beginning with `agent-browser`. 7. Add regression tests containing spaces, quotes, semicolons, pipes, backticks, `$()`, newlines, redirections, and option-like URL values. Verify that each value is either rejected or passed as inert data. ]]>

T05 · Unauthorized Access and Privilege Escalation

Warning
Location
SKILL.md:108
Finding
Unrestricted User-Supplied URL Browsing Enables Server-Side Request Forgery<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md:30-34`, `SKILL.md:108`, `SKILL.md:151`, `SKILL.md:173`, `SKILL.md:180`, and `SKILL.md:195` **Vulnerability Type**: Server-side request forgery through unrestricted browser navigation **Risk Level**: Medium ### Vulnerable Code ```markdown Parse to extract: - **INDUSTRY**: The industry name (e.g., "新能源汽车", "AI教育", "跨境电商") - **INDUSTRY_EN**: Your English translation of the industry name for search queries - **COMPETITOR_URLS**: List of competitor URLs - **YOUR_BRAND_URL**: (Optional) User's own brand URL — if provided, run the same 5-dimension scan on it as a comparison baseline ``` ```bash agent-browser open COMPETITOR_URL agent-browser wait --load networkidle --timeout 3000 agent-browser snapshot -c ``` ```bash agent-browser open COMPETITOR_URL/blog # or /news /press /updates /articles agent-browser snapshot -c ``` ```bash agent-browser open COMPETITOR_URL/pricing agent-browser snapshot -c ``` ```bash agent-browser open COMPETITOR_URL/changelog # or /release-notes /whats-new /announcement agent-browser snapshot -c ``` ```markdown #### If a first-party brand URL is supplied (`YOUR_BRAND_URL`) Run the same five-dimensional scan against the first-party brand URL, list its results separately in the report, and compare it horizontally with competitors. ``` ### Technical Analysis The skill treats user-supplied competitor and first-party brand URLs as direct browser destinations. It specifies no URL scheme allowlist, hostname policy, DNS resolution checks, IP-range restrictions, redirect validation, or egress boundary. As a result, a user can potentially direct `agent-browser` toward resources that are reachable from the agent environment but are not intended to be exposed to the user. Relevant targets may include: - Loopback services. - Private network addresses. - Link-local addresses. - Cloud instance metadata endpoints. - Internal DNS names. - Services reached through public-to-private ...[truncated 2428 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Permit only absolute `https://` URLs. Reject `file:`, `data:`, `javascript:`, `ftp:`, `gopher:`, and all other unsupported schemes. 2. Parse URLs with a standards-compliant URL parser and reject: - Embedded credentials. - Missing or malformed hostnames. - Unexpected ports. - Control characters and ambiguous encodings. - Decimal, hexadecimal, octal, mixed-notation, or otherwise obfuscated IP literals. 3. Resolve the hostname before navigation and reject every address in loopback, private, link-local, multicast, reserved, documentation, carrier-grade NAT, and cloud metadata ranges for both IPv4 and IPv6. 4. Revalidate the destination after every redirect. Do not allow a validated public origin to redirect to a prohibited address or scheme. 5. Defend against DNS rebinding by binding validation to the address actually used for the connection and checking all returned DNS addresses. 6. Run the browser in a network sandbox that can access only approved public internet destinations. Explicitly block internal networks and metadata endpoints at the firewall or proxy layer. 7. Consider a hostname allowlist or an approval step for competitor domains. At minimum, display the normalized destination and require confirmation before accessing an untrusted domain. 8. Build `/blog`, `/pricing`, and similar paths with a URL resolver only after the base origin has passed validation. 9. Limit response size, navigation time, redirect count, and downloadable content. Prevent automatic downloads and access to browser-local resources. 10. Ensure reports do not reproduce secrets, tokens, internal headers, or raw sensitive page content. Treat all retrieved pages as untrusted data. ]]>
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 (3)

Natural-Language Policy Violations

Medium
Confidence
95% confidence
Finding
The description says the skill should be used when the user is 'in Chinese' and that it delivers a structured Chinese daily brief. This imposes a language requirement and output locale by default rather than offering a user-selectable language option, which matches the policy's language/locale violation criteria.

Natural-Language Policy Violations

Medium
Confidence
97% confidence
Finding
The output rules explicitly require '全程中文' and direct Chinese report formatting, with no indication that the user may request another language. This is a natural-language locale constraint that is not justified as region-specific compliance and does not provide user choice.

Natural-Language Policy Violations

Medium
Confidence
95% confidence
Finding
The document is written entirely in Chinese and instructs the agent to use Chinese output labels such as “标注 🚨/✅” and a Chinese output format. This imposes a specific language/locale on skill behavior without any user opt-in or documented justification for a region-specific use case.

Static analysis

No suspicious patterns detected.