Back to skill

Security audit

browser-recording

Security checks for vulnerabilities and agentic risk

Overview

This skill is a user-directed Playwright recording workflow with some privacy and dependency-safety cautions, but no hidden, deceptive, persistent, or destructive behavior was found.

Use this skill only with trusted Playwright specs and configs, prefer pinned dependencies with a lockfile, and record against sanitized demo or test accounts because videos and GIFs can capture anything visible in the browser.

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

T08 · Insecure Dependencies

Warning
Location
SKILL.md:82
Finding
Unpinned Third-Party Dependency Installation and Execution<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md:82-91`, with related execution guidance at `SKILL.md:103-108` and `modules/spec-execution.md:72-97, 137` **Vulnerability Type**: Unpinned npm dependency installation and execution without integrity controls **Risk Level**: Medium ### Vulnerable Code ```markdown Check that Playwright is available: ```bash npx playwright --version ``` **Verification:** Run the command with `--help` flag to verify availability. If not installed, the user should run: ```bash npm install -D @playwright/test npx playwright install chromium ``` ``` The installed package and user-provided specification are subsequently executed: ```markdown Run the spec with video enabled: ```bash npx playwright test <spec-file> --config=playwright.config.ts ``` ``` Related module instructions also invoke the dependency directly: ```bash npx playwright test specs/demo.spec.ts npx playwright test specs/demo.spec.ts --config=playwright.recording.config.ts npx playwright test --headed npx playwright test --project=chromium npx playwright test --timeout=60000 npx playwright test --debug ``` ### Technical Analysis The installation command does not pin `@playwright/test` to a reviewed version and does not require a lockfile, package integrity verification, or a trusted registry. Consequently, the installed package can vary between runs as upstream releases and registry resolution change. By default, `npm install` can execute package lifecycle scripts with the privileges of the invoking user. In addition, `npx playwright` resolves and executes a package binary; depending on the local environment and npm configuration, `npx` may offer to retrieve a missing package. The `npx playwright install chromium` command also downloads browser components without the skill documenting validation or provenance requirements. The workflow then executes the selected Playwright specification and configuration. Playwright test files and configuration fi ...[truncated 1929 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Pin `@playwright/test` to a reviewed exact version instead of installing the latest matching release: ```bash npm install --save-dev --save-exact @playwright/test@<reviewed-version> ``` 2. Commit and review `package-lock.json`, then use deterministic installation in automated environments: ```bash npm ci ``` 3. Configure npm to use an explicitly trusted registry and preserve lockfile integrity metadata. Review dependency provenance and published checksums before approving upgrades. 4. Where compatible with the project, initially install dependencies with lifecycle scripts disabled: ```bash npm ci --ignore-scripts ``` If required scripts must run, review them first and execute them in an isolated environment. 5. Invoke the already installed project-local binary and prevent implicit package retrieval: ```bash npx --no-install playwright test specs/demo.spec.ts ``` Alternatively, use the package-manager command that guarantees execution from the locked project dependency. 6. Pin and control Playwright browser revisions through the reviewed Playwright package and cache browsers from a trusted source. Avoid downloading browser components during a privileged or unrestricted workflow. 7. Treat Playwright specifications and configuration files as executable code. Require review of the complete spec, imported modules, fixtures, reporters, global setup/teardown, and configuration before execution. 8. Run untrusted or externally supplied specifications in a disposable container or sandbox with: - No host secrets or unnecessary environment variables. - A read-only project mount where practical. - A dedicated writable output directory. - Restricted outbound network access. - No privileged container mode or host socket mounts. - A non-administrative user. 9. Update the skill documentation so validation includes version verification, lockfile verification, source review, an ...[truncated 64 chars]
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (17)

Vague Triggers

Medium
Confidence
96% confidence
Finding
The trigger list includes broad generic terms like `browser`, `video`, `web`, and `tutorial`, which can cause the skill to activate in contexts far beyond explicit recording requests. In an automated agent setting, overbroad invocation expands the chance that browser recording behavior is suggested or initiated when the user did not intend filesystem output or capture operations.

Missing User Warnings

Medium
Confidence
92% confidence
Finding
The skill instructs users to record browser sessions and generate persistent video/GIF artifacts but does not prominently warn that sensitive on-screen data, cookies-backed authenticated views, or PII visible during recording may be captured and written to disk. In the browser-recording context this omission is more dangerous because the core function is content capture, so privacy and artifact-handling risks are intrinsic to normal use.

Rp1

Medium
Category
MCP Rug Pull
Confidence
86% confidence
Finding
The instruction `npx playwright install chromium` can cause `npx` to resolve and execute a package version that is not explicitly pinned if Playwright is absent or mismatched. In automation contexts, this increases exposure to unintended package resolution and supply-chain risk, though the danger is mitigated by Playwright being a mainstream package and this being an installation step users generally expect.

Rp1

Medium
Category
MCP Rug Pull
Confidence
88% confidence
Finding
Running `npx playwright test <spec-file> --config=playwright.config.ts` without ensuring a pinned local installation may execute whatever version `npx` resolves, creating avoidable supply-chain and reproducibility risk. Because this command executes browser automation code from the repository, version drift or unexpected package fetching could materially affect behavior.

Rp1

Medium
Category
MCP Rug Pull
Confidence
82% confidence
Finding
The error-handling guidance again recommends `npx playwright install chromium`, repeating the same unpinned package-execution pattern. Repetition in troubleshooting paths makes it more likely users will run the command in environments where Playwright is not already pinned locally.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
The module explicitly instructs users to enable always-on Playwright video recording and save artifacts to disk, but it provides no warning that recordings may capture credentials, personal data, session tokens displayed in pages, internal URLs, or other sensitive on-screen information. In a browser-recording skill, this context makes the issue more significant because persistent visual artifacts are the core output and are likely to be shared, stored, or uploaded as demos.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

Intent-Code Divergence

Low
Confidence
98% confidence
Finding
The skill is documented as a Playwright-based browser recording workflow using `npx playwright`, but multiple verification lines instruct the user to run `pytest -v`, which is a Python test runner unrelated to the described Node/Playwright flow. This is an active documentation contradiction rather than a mere omission because it tells the user to verify success with a different toolchain than the one the skill says it uses.

Static analysis

No suspicious patterns detected.