Back to skill

Security audit

Web Browsing.Bak

Security checks for vulnerabilities and agentic risk

Overview

This is a normal web-browsing skill, but its bundled fetch helper can request arbitrary URLs from the agent environment without host or redirect restrictions.

Review before installing. Use it only for public web browsing, and avoid giving it internal URLs, localhost addresses, cloud metadata endpoints, private hostnames, secrets, tokens, or sensitive search terms unless the runtime has strong outbound network controls.

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 (1)

T09 · Insecure Skill Coding Practices

Error
Location
scripts/search_web.py:62
Finding

Unrestricted URL Fetching Enables Server-Side Request Forgery

Content
View full analysis
dict: """ Fetch and parse a webpage. Args: url: URL to fetch Returns: Dictionary with title, content, and metadata """ headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36' } try: response = requests.get(url, headers=headers, timeout=15, allow_redirects=True) ``` ### Technical Analysis The `fetch_url` function passes a caller-controlled URL directly to `requests.get`. It performs no validation of the URL scheme, hostname, destination port, or resolved IP address. Consequently, a caller can direct the application to make HTTP requests to destinations that may not be externally accessible, including: - Loopback services such as `127.0.0.1` - Private network ranges such as `10.0.0.0/8` and `192.168.0.0/16` - Link-local services such as cloud metadata endpoints - Internal services reachable only from the Agent's network environment The request also sets `allow_redirects=True`. A seemingly legitimate public URL can therefore redirect to a prohibited internal address. Because redirect destinations are not revalidated, a basic validation check applied only to the original URL would not be sufficient. The function subsequently extracts page text and returns up to 5,000 characters of content to the caller, creating a direct channel through which responses from reachable internal HTTP services may be disclosed. ### Attack Path 1. An attacker invokes the URL-fetching functionality with an internal destination, such as a loopback address, private-network host, or link-local metadata endpoint. 2. Alternatively, the attacker supplies a public URL under their control that redirects to an internal destination. 3. `fetch_url` passes the sup ...[truncated 1232 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (3)

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
92% confidence
Finding

The skill advertises web/network behavior and names network-capable tools, but the manifest does not declare an explicit tool scope such as permissions or allowed-tools. This creates ambiguity about what external actions the skill is authorized to perform and weakens policy enforcement, increasing the risk of unintended or overbroad network access.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The manifest description uses very broad activation language like browsing, extracting content, and searching for information, which overlaps with many generic user requests. This can cause the skill to trigger in more contexts than intended, potentially sending user prompts, URLs, or search terms to external services when the user did not clearly consent to web access.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill description does not warn users that their supplied queries, URLs, or extracted targets may be transmitted to third-party websites or search providers. This omission can expose sensitive user data through external requests and prevents informed consent about privacy and data-sharing implications.

Content

No source excerpt is available for this finding.