Back to skill

Security audit

Browser Automation

Security checks for vulnerabilities and agentic risk

Overview

The skill is a coherent browser automation guide, but it uses an unsafe remote installer pattern and under-warns about persistent sessions and cookies.

Review the installer before use, prefer a pinned and verifiable npm or container release, and avoid running the curl-to-bash command in privileged or secret-rich environments. Use test accounts where possible, treat profile data and cookies as credentials, and avoid exposing cookie output, screenshots, PDFs, or extracted page text from sensitive sites to untrusted agents or logs.

Vulnerability Patterns
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
Findings (1)

T03 · Remote Payload Retrieval and Execution

Error
Location
skill.md:28
Finding
Mutable Remote Installer Executed Directly Through Bash## Vulnerability Details **File Location**: `skill.md`, line 28 **Vulnerability Type**: Remote payload retrieval and execution **Risk Level**: Critical **Complete Code Snippet**: ```bash # macOS / Linux curl -fsSL https://pinchtab.com/install.sh | bash ``` ### Technical Analysis The installation command streams content retrieved from an external, mutable URL directly into Bash. The downloaded script is neither displayed nor saved for review, and no version pin, cryptographic checksum, or signature verification is performed before execution. HTTPS protects the connection in transit and authenticates the responding domain under the certificate trust model, but it does not guarantee that the script is safe or immutable. The effective executable payload can change after this Skill has been audited. Compromise of the website, hosting infrastructure, DNS resolution, certificate authority chain, deployment pipeline, or maintainer account could therefore turn the documented installation procedure into an arbitrary-code execution channel. The actual installer is not included in the audited project, so its commands, downloaded components, filesystem changes, requested permissions, and persistence behavior cannot be statically verified. Installing the declared browser automation utility may be necessary, but piping mutable remote content directly into a shell is not the minimum privilege or minimum trust mechanism required. The same document provides npm and Docker alternatives, demonstrating that this specific execution pattern is avoidable. ### Attack Path 1. An attacker compromises or gains control over `https://pinchtab.com/install.sh` or its delivery infrastructure. 2. The attacker replaces the expected installer response with malicious shell commands. 3. A user or automated agent follows the installation instructions in `skill.md`. 4. `curl` retrieves the attacker-controlled response. 5. The shell pipeline passes the respon ...[truncated 1094 chars]
Remediation
## Remediation Suggestions 1. Remove the `curl | bash` installation instruction. 2. Publish versioned release artifacts through the referenced source repository or another authenticated release channel. 3. Pin installation instructions to an exact release version rather than a mutable latest installer. 4. Provide an expected SHA-256 or stronger digest and require users to verify it before execution. 5. Prefer signed artifacts and document signature verification against a pinned maintainer key. 6. Download the installer or binary to a local file first, verify its integrity and provenance, inspect it where practical, and only then execute it explicitly. 7. Run installation with an unprivileged account and request elevated permissions only for narrowly defined operations that genuinely require them. 8. Document the files, directories, services, network endpoints, and permissions affected by installation. 9. If npm or Docker alternatives remain documented, pin an exact npm package version and an immutable container image digest, and verify publisher provenance. 10. In automated environments, restrict outbound network access, filesystem access, secret availability, and installation permissions during dependency setup.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Memory PoisoningPersistent Context Injection, Context Window Stuffing, Memory Manipulation
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (21)

External Script Fetching

High
Category
Supply Chain
Content
```bash
# macOS / Linux
curl -fsSL https://pinchtab.com/install.sh | bash

# npm
npm install -g pinchtab
Confidence
99% confidence
Finding
`curl -fsSL https://pinchtab.com/install.sh | bash` executes a remote script directly from the network with no integrity verification, review step, pinning, or signature check. If the site, CDN, DNS, TLS termination, or hosting pipeline is compromised, users can execute arbitrary code on their machines.

Chaining Abuse

High
Category
Tool Misuse
Content
```bash
# macOS / Linux
curl -fsSL https://pinchtab.com/install.sh | bash

# npm
npm install -g pinchtab
Confidence
99% confidence
Finding
The chaining of network fetch to shell execution (`| bash`) creates a one-step remote code execution path with no validation barrier. In a skill intended for agent use, this is especially dangerous because automated systems may reproduce the pattern non-interactively and run attacker-controlled installer content.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding
The Docker example pulls and runs `pinchtab/pinchtab` without a pinned tag or digest, so users may execute an unexpected or later-modified image. This weakens supply-chain integrity and reproducibility, especially for a browser automation tool that can handle sessions, cookies, and page content.

Context Window Stuffing

Medium
Category
Memory Poisoning
Content
# Click element by ref
pinchtab click e5

# Fill input
pinchtab fill e3 "user@example.com"
```
Confidence
85% confidence
Finding
Skill attempts to fill the context window with filler content, displacing legitimate instructions and safety constraints. This can degrade agent performance or bypass safety boundaries.

Missing User Warnings

Medium
Confidence
91% confidence
Finding
The skill promotes browser automation over arbitrary sites but does not warn that browsing, scraping, screenshots, text extraction, and session persistence may expose sensitive data from authenticated pages. In this context, omission of privacy and account-impact warnings increases the chance that operators automate actions against personal or production accounts without informed consent or safeguards.

External Transmission

Medium
Category
Data Exfiltration
Content
```bash
# Navigate + wait + filter (14x token savings)
curl -X POST http://localhost:9867/navigate \
  -d '{"url": "https://example.com"}' && \
sleep 3 && \
curl http://localhost:9867/snapshot | \
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
```bash
# Create instance
TAB=$(curl -s -X POST http://localhost:9867/instances \
  -d '{"profile":"work","mode":"headless"}' | jq -r '.id')

# List instances
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
-d '{"profile":"work","mode":"headless"}' | jq -r '.id')

# List instances
curl http://localhost:9867/instances

# Stop instance
curl -X POST "http://localhost:9867/instances/$TAB/stop"
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
-d '{"mode":"headless"}' | jq -r '.id')

# Navigate and wait
curl -s -X POST "http://localhost:9867/instances/$INST/tabs/open" \
  -d "{\"url\":\"$URL\"}"
sleep 3
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
-d '{"mode":"headless"}' | jq -r '.id')

# Navigate and wait
curl -s -X POST "http://localhost:9867/instances/$INST/tabs/open" \
  -d "{\"url\":\"$URL\"}"
sleep 3
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
-d '{"mode":"headless"}' | jq -r '.id')

# Navigate and wait
curl -s -X POST "http://localhost:9867/instances/$INST/tabs/open" \
  -d "{\"url\":\"$URL\"}"
sleep 3
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
head -20

# Cleanup
curl -s -X POST "http://localhost:9867/instances/$INST/stop"
```

### Pattern 2: Form Interaction
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Missing User Warnings

Medium
Confidence
97% confidence
Finding
The form-filling example includes login automation and hardcoded sample credentials but does not warn that submitted credentials and form contents are transmitted to external websites and may be stored in logs, shell history, profiles, or test artifacts. Because this skill is explicitly designed to automate browser interaction, the absence of warnings makes accidental misuse against real accounts more likely.

External Transmission

Medium
Category
Data Exfiltration
Content
SUBMIT_REF=$(echo $SNAPSHOT | jq -r '.nodes[] | select(.role == "button") | .ref')

# Fill form
curl -s -X POST "http://localhost:9867/instances/$INST/action" \
  -d "{\"kind\":\"type\",\"ref\":\"$EMAIL_REF\",\"text\":\"user@example.com\"}"
curl -s -X POST "http://localhost:9867/instances/$INST/action" \
  -d "{\"kind\":\"type\",\"ref\":\"$PASS_REF\",\"text\":\"password123\"}"
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
curl -s "http://localhost:9867/instances/$INST/text" | jq -r '.title'

# Cleanup
curl -s -X POST "http://localhost:9867/instances/$INST/stop"
```

### Pattern 3: Multi-Instance Parallel Processing
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
# Launch parallel jobs
for i in {0..2}; do
  (
    curl -s -X POST "http://localhost:9867/instances/${INSTANCES[$i]}/tabs/open" \
      -d "{\"url\":\"${URLS[$i]}\"}"
    sleep 3
    TITLE=$(curl -s "http://localhost:9867/instances/${INSTANCES[$i]}/text" | jq -r '.title')
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
sleep 3
    TITLE=$(curl -s "http://localhost:9867/instances/${INSTANCES[$i]}/text" | jq -r '.title')
    echo "Result $i: $TITLE"
    curl -s -X POST "http://localhost:9867/instances/${INSTANCES[$i]}/stop"
  ) &
done
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
# Take screenshot
  FILENAME=$(echo $URL | sed 's/[^a-zA-Z0-9]/_/g').png
  curl -s "http://localhost:9867/instances/$INST/screenshot" \
    --output "$FILENAME"
  echo "Saved: $FILENAME"
done
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
-d '{"profile":"myaccount","mode":"headless"}' | jq -r '.id')

# Login once
curl -s -X POST "http://localhost:9867/instances/$INST/tabs/open" \
  -d '{"url":"https://example.com/login"}'
sleep 3
# ... perform login ...
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
-d '{"profile":"myaccount","mode":"headless"}' | jq -r '.id')

# Already logged in!
curl -s -X POST "http://localhost:9867/instances/$INST2/tabs/open" \
  -d '{"url":"https://example.com/dashboard"}'
```
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The advertised `pinchtab__cookies_get` capability exposes access to authentication cookies without any warning about their sensitivity. In a browser automation context, cookies can grant session takeover if mishandled, logged, or exfiltrated.

Static analysis

No suspicious patterns detected.