Back to skill

Security audit

Playwright Headless Browser (Chromium)

Security checks for vulnerabilities and agentic risk

Overview

The skill is coherent and not deceptive, but it persistently weakens browser isolation and uses privileged, mutable setup steps without enough user control.

Review this skill before installing. It can change your Clawdbot browser configuration so future browser sessions run with Chromium sandboxing disabled, and setup may run unpinned npm/Playwright code plus sudo package installs. Prefer pinning Playwright, reviewing the package-manager commands, enabling sandboxing when your host supports it, and running the browser under a low-privilege account.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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)

T08 · Insecure Dependencies

Warning
Location
scripts/setup.sh:18
Finding

Unpinned Playwright Package May Execute Mutable Third-Party Code

Content
View full analysis
/dev/null; then npx playwright install chromium else error "npx not found. Install Node.js first." fi ``` The same unpinned command is also recommended in `SKILL.md:22-26`: ```bash ### 1. Install Playwright Chromium ```bash npx playwright install chromium ``` ``` ### Technical Analysis The setup script invokes `playwright` through `npx` without declaring an exact package version, lockfile, or integrity constraint. If the package is not already installed locally, `npx` may retrieve package content from the configured npm registry and execute it in the context of the invoking user. Consequently, the effective installation code is mutable after this skill has been reviewed. Exploitation would require compromise or malicious alteration of the resolved package, npm registry, configured registry mirror, or related dependency supply chain. There is no evidence that the current Playwright package is malicious; the weakness is the absence of deterministic dependency resolution. ### Attack Path 1. A user runs `scripts/setup.sh` as documented. 2. The script executes `npx playwright install chromium`. 3. `npx` resolves Playwright from the local environment or configured package registry without an exact version constraint. 4. If the resolved package or its dependency chain has been compromised, attacker-controlled package lifecycle or command code executes under the user's account. 5. The malicious dependency can access data and resources available to that user and may install a modified browser binary or alter user-owned configuration. ### Impact Assessment Successful exploitation provides code execution with the privileges of the user running the setup script. This may per ...[truncated 452 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
scripts/configure-clawdbot.sh:25
Finding

Chromium Sandbox Is Persistently Disabled by Default

Content
View full analysis
/dev/null; then ``` The setup test also launches Chromium without its sandbox at `scripts/setup.sh:66-70`: ```bash # Step 4: Test Chromium info "Testing Chromium..." if "$CHROME_PATH" --headless --no-sandbox --disable-gpu --dump-dom https://example.com 2>&1 | grep -q "Example Domain"; then info "Chromium works!" else ``` ### Technical Analysis The configuration script unconditionally sets `"noSandbox": true`, causing subsequent Clawdbot browser sessions to run without Chromium's operating-system process sandbox. The script does not determine whether the environment genuinely requires this setting and does not request explicit user approval before weakening the browser security boundary. A browser sandbox does not prevent every browser defect, but it limits the capabilities available after exploitation of a renderer or other sandboxed browser process. Disabling it can convert a browser-content compromise into code execution with the full permissions of the browser process. This finding does not establish that merely visiting a webpage guarantees host compromise. Exploitation requires an applicable Chromium vulnerability, malicious browser extension or component, or another method of executing code within a browser process. The unsafe configuration materially increases the impact if such an initial compromise occurs. ### Attack Path 1. The user runs `scripts/setup.sh`. 2. `setup.sh` invokes `scripts/configure-clawdbot.sh` with the discovered Chromium path. 3. The configuration script patches Clawdbot with `"noSandbox": true`. 4. ...[truncated 983 chars]
Remediation
View remediation
Vulnerability Patterns
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (19)

Tp4

High
Category
MCP Tool Poisoning
Confidence
88% confidence
Finding

The code partially matches the description because it does configure Clawdbot to use a Playwright Chromium binary in headless mode. However, the declared purpose materially overstates its functionality: the script neither installs Chromium nor installs system dependencies, and it does not perform broader WSL/Linux browser environment setup. Its actual purpose is narrower—discover an already-installed Chromium binary and patch Clawdbot config accordingly. That difference is significant enough to count as a description-behavior mismatch.

Content

No source excerpt is available for this finding.

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
85% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · scripts/install-deps.sh (reported line 19)May include surrounding context.

sh
dnf install -y nss alsa-lib
    
elif command -v pacman &>/dev/null; then
    pacman -S --noconfirm nss alsa-lib
    
elif command -v apk &>/dev/null; then
    apk add --no-cache nss alsa-lib

Chaining Abuse

High
Category
Tool Misuse
Confidence
75% confidence
Finding

Tool calls are chained to bypass individual safety checks or escalate capabilities beyond what any single tool call would allow.

Content

Scanner excerpt · scripts/setup.sh (reported line 46)May include surrounding context.

sh
# Try libasound2t64 first (newer Ubuntu), fall back to libasound2
        sudo apt-get update
        sudo apt-get install -y libnss3 || true
        sudo apt-get install -y libasound2t64 2>/dev/null || sudo apt-get install -y libasound2 || true
    elif command -v dnf &>/dev/null; then
        sudo dnf install -y nss alsa-lib
    elif command -v pacman &>/dev/null; then

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
95% confidence
Finding

The --noconfirm parameter disables user review of package installation decisions, which is a classic dangerous flag for automation. If package selection, mirrors, or repositories are altered, the script can install software without a chance for the operator to inspect or abort the action.

Content

Scanner excerpt · scripts/setup.sh (reported line 50)May include surrounding context.

sh
elif command -v dnf &>/dev/null; then
        sudo dnf install -y nss alsa-lib
    elif command -v pacman &>/dev/null; then
        sudo pacman -S --noconfirm nss alsa-lib
    else
        warn "Unknown package manager. Install manually: libnss3, libasound2"
    fi

Rp1

Medium
Category
MCP Rug Pull
Confidence
85% confidence
Finding

Using npx playwright without pinning an explicit version allows the resolved package version to change over time, which can introduce unreviewed code or supply-chain risk during setup. In a skill that instructs users to install and execute tooling, this is a real security concern because the command may fetch and run whatever version is current at execution time.

Content

No source excerpt is available for this finding.

Sudo/Root Execution

Medium
Category
Privilege Escalation
Confidence
70% confidence
Finding

Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Content

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

bash
# Ubuntu/Debian
sudo apt-get install -y libnss3 libasound2t64

# If libasound2t64 doesn't exist (older Ubuntu):
sudo apt-get install -y libnss3 libasound2

Sudo/Root Execution

Medium
Category
Privilege Escalation
Confidence
70% confidence
Finding

Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Content

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

bash
# Ubuntu/Debian
sudo apt-get install -y libnss3 libasound2t64

# If libasound2t64 doesn't exist (older Ubuntu):
sudo apt-get install -y libnss3 libasound2

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Sudo/Root Execution

Medium
Category
Privilege Escalation
Confidence
70% confidence
Finding

Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Content

Scanner excerpt · scripts/install-deps.sh (reported line 5)May include surrounding context.

sh
set -euo pipefail

# Install system dependencies for Playwright Chromium
# Run with: sudo ./install-deps.sh

echo "Installing Chromium system dependencies..."

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
65% confidence
Finding

Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Content

Scanner excerpt · scripts/install-deps.sh (reported line 19)May include surrounding context.

sh
dnf install -y nss alsa-lib
    
elif command -v pacman &>/dev/null; then
    pacman -S --noconfirm nss alsa-lib
    
elif command -v apk &>/dev/null; then
    apk add --no-cache nss alsa-lib

Rp1

Medium
Category
MCP Rug Pull
Confidence
94% confidence
Finding

The script executes npx playwright install chromium without pinning an explicit Playwright version, so it implicitly trusts whatever package version is resolved at runtime. In a setup script that may be run on developer or automation hosts, this creates supply-chain risk and can lead to unexpected code execution or behavior changes if the upstream package is compromised or updated incompatibly.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Sudo/Root Execution

Medium
Category
Privilege Escalation
Confidence
90% confidence
Finding

sudo apt-get update performs a privileged system operation from within the skill. While common in installers, embedding root-level package-manager actions in an automation script is security-relevant because it modifies host state and expands the blast radius if the script or environment is compromised.

Content

Scanner excerpt · scripts/setup.sh (reported line 44)May include surrounding context.

sh
# Detect package manager and install
    if command -v apt-get &>/dev/null; then
        # Try libasound2t64 first (newer Ubuntu), fall back to libasound2
        sudo apt-get update
        sudo apt-get install -y libnss3 || true
        sudo apt-get install -y libasound2t64 2>/dev/null || sudo apt-get install -y libasound2 || true
    elif command -v dnf &>/dev/null; then

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The script performs privileged package installation and then invokes a secondary script automatically, with no confirmation gate or dry-run step. In an agent skill context, this is riskier because it can trigger system modification and additional unreviewed actions transitively, reducing user control over privileged operations.

Content

No source excerpt is available for this finding.

Sudo/Root Execution

Medium
Category
Privilege Escalation
Confidence
90% confidence
Finding

This line invokes sudo apt-get install -y libnss3, causing a privileged package installation without user confirmation at the point of action. In an agent-managed setup flow, automatic package installation increases risk because repository trust and package selection are delegated to the script.

Content

Scanner excerpt · scripts/setup.sh (reported line 45)May include surrounding context.

sh
if command -v apt-get &>/dev/null; then
        # Try libasound2t64 first (newer Ubuntu), fall back to libasound2
        sudo apt-get update
        sudo apt-get install -y libnss3 || true
        sudo apt-get install -y libasound2t64 2>/dev/null || sudo apt-get install -y libasound2 || true
    elif command -v dnf &>/dev/null; then
        sudo dnf install -y nss alsa-lib

Sudo/Root Execution

Medium
Category
Privilege Escalation
Confidence
87% confidence
Finding

This line runs privileged package installation with fallback logic using ||, which can obscure failures and still proceed to another privileged install path. That combination makes operator review harder and may mask environmental or repository issues while continuing with root-level changes.

Content

Scanner excerpt · scripts/setup.sh (reported line 46)May include surrounding context.

sh
# Try libasound2t64 first (newer Ubuntu), fall back to libasound2
        sudo apt-get update
        sudo apt-get install -y libnss3 || true
        sudo apt-get install -y libasound2t64 2>/dev/null || sudo apt-get install -y libasound2 || true
    elif command -v dnf &>/dev/null; then
        sudo dnf install -y nss alsa-lib
    elif command -v pacman &>/dev/null; then

Sudo/Root Execution

Medium
Category
Privilege Escalation
Confidence
89% confidence
Finding

sudo dnf install -y nss alsa-lib performs privileged package installation directly from the script. This is not inherently malicious, but in a security review it is a true risky behavior because it changes the system and trusts external package sources under elevated privileges.

Content

Scanner excerpt · scripts/setup.sh (reported line 48)May include surrounding context.

sh
sudo apt-get install -y libnss3 || true
        sudo apt-get install -y libasound2t64 2>/dev/null || sudo apt-get install -y libasound2 || true
    elif command -v dnf &>/dev/null; then
        sudo dnf install -y nss alsa-lib
    elif command -v pacman &>/dev/null; then
        sudo pacman -S --noconfirm nss alsa-lib
    else

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
88% confidence
Finding

Using --noconfirm causes the package manager to proceed without interactive review, enabling fully autonomous system changes. In a setup skill, this weakens a safety boundary and can magnify the effect of mistakes, malicious environment manipulation, or unexpected dependency resolution.

Content

Scanner excerpt · scripts/setup.sh (reported line 50)May include surrounding context.

sh
elif command -v dnf &>/dev/null; then
        sudo dnf install -y nss alsa-lib
    elif command -v pacman &>/dev/null; then
        sudo pacman -S --noconfirm nss alsa-lib
    else
        warn "Unknown package manager. Install manually: libnss3, libasound2"
    fi

Sudo/Root Execution

Medium
Category
Privilege Escalation
Confidence
93% confidence
Finding

sudo pacman -S --noconfirm nss alsa-lib combines elevated privileges with suppressed confirmation, making system modification both privileged and automatic. In this skill context, that is more dangerous because a setup action can silently alter the host without a human checkpoint.

Content

Scanner excerpt · scripts/setup.sh (reported line 50)May include surrounding context.

sh
elif command -v dnf &>/dev/null; then
        sudo dnf install -y nss alsa-lib
    elif command -v pacman &>/dev/null; then
        sudo pacman -S --noconfirm nss alsa-lib
    else
        warn "Unknown package manager. Install manually: libnss3, libasound2"
    fi

Static analysis

No suspicious patterns detected.