Back to skill

Security audit

Share Local Site

Security checks for vulnerabilities and agentic risk

Overview

This skill does what it says, but it gives unsafe tunneling and host-validation instructions that can expose local development services more broadly than users may expect.

Review this carefully before installing. Use it only for non-sensitive development servers, verify the port and app before sharing the URL, avoid exposing admin pages or real credentials, do not commit or persist host-check bypass settings, and stop any persistent tunnel as soon as the demo is done.

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

T09 · Insecure Skill Coding Practices

Error
Location
scripts/tunnel.sh:43
Finding

SSH Host Authentication Is Disabled for localhost.run Tunnels

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
SKILL.md:110
Finding

Instructions Disable Development-Server Host Validation Globally

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/tunnel.sh:37
Finding

Unvalidated and Unquoted Port Argument Enables Command-Option Injection

Content
View full analysis
Remediation
View remediation
65535 )); then printf 'Error: port must be an integer from 1 through 65535.\n' >&2 exit 2 fi ``` Quote every expansion used as a command argument: ```bash ngrok http "$PORT" ``` ```bash ssh \ -o StrictHostKeyChecking=yes \ -R "80:localhost:${PORT}" \ nokey@localhost.run ``` Also apply the following hardening measures: - Reject whitespace, signs, prefixes, suffixes, and option-like values. - Use `printf` rather than `echo -e` for predictable output. - Treat all arguments generated from natural-language or external input as untrusted. - Add tests covering whitespace, glob characters, negative values, values above 65535, and attempted SSH option injection. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (6)

External Script Fetching

High
Category
Supply Chain
Confidence
90% confidence
Finding

Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.

Content

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

  1. Confirm the tunnel points to the correct port:
    bash
    curl -s http://localhost:4040/api/tunnels | python3 -c "
    import sys,json; d=json.load(sys.stdin)
    for t in d['tunnels']:
        print(t['config']['addr'], t['public_url'])"
    

External Script Fetching

High
Category
Supply Chain
Confidence
90% confidence
Finding

Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.

Content

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

  1. Confirm the tunnel points to the correct port:
    bash
    curl -s http://localhost:4040/api/tunnels | python3 -c "
    import sys,json; d=json.load(sys.stdin)
    for t in d['tunnels']:
        print(t['config']['addr'], t['public_url'])"
    

Missing User Warnings

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

The framework-specific fixes explicitly disable host-header validation (disableHostCheck, allowedHosts: 'all', DANGEROUSLY_DISABLE_HOST_CHECK=true) to make public tunneling work, but they omit any warning that these settings weaken protections against DNS rebinding and unintended host-based access. Because this skill is specifically about exposing development servers externally, the dangerous context amplifies the risk of turning temporary demo settings into persistent insecure defaults.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
96% confidence
Finding

The skill clearly instructs the agent to run multiple shell commands (ssh, ngrok, curl, python3, package installation), yet it declares no tool scope or permissions boundary. That omission increases the chance an agent will execute network-exposing commands without explicit user consent or sandboxing, which is risky in a skill whose main purpose is publishing localhost to the public internet.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The skill's primary purpose is exposing a local development server to the internet, but it does not prominently warn that the resulting URL is public and may expose source previews, internal admin pages, API endpoints, secrets in responses, or development-only features. In this context, lack of a privacy/data-exposure warning is material because users may treat localhost as inherently private and share sensitive content unintentionally.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
98% confidence
Finding

The header comment lists methods as 'ngrok (default)', implying ngrok will be used when no method is provided. However, the code sets METHOD=${2:-localhost.run}, so the actual default is localhost.run. This is a direct contradiction between documentation and implementation.

Content

No source excerpt is available for this finding.