Skip to content

Security: xcodethink/pixelcheck

Security

SECURITY.md

Security Policy

Supported Versions

pixelcheck follows semantic versioning. We provide security patches according to the schedule below.

Version Status Patches until
1.x ✅ Active TBD (next major)
0.x ⚠ Pre-release No patches; upgrade to 1.x

After a major version (e.g., 2.0) ships, the previous major (1.x) receives critical security patches for 6 months, then enters end-of-life.


Reporting a Vulnerability

Do not file public GitHub issues for security reports.

Use GitHub Security Advisories (the only supported private channel for v1.0):

  • Visit: https://github.com/xcodethink/pixelcheck/security/advisories/new
  • Allows private discussion + coordinated disclosure with maintainers
  • Tracks the lifecycle (acknowledged → triaged → fixed → CVE issued) natively within GitHub

A dedicated email channel may be added in v1.x for users who can't access GitHub Security Advisories (regulated networks, etc). Until then, please use GHSA above.

We aim to:

  • Acknowledge within 72 hours
  • Provide initial assessment within 7 days
  • Publish a fix within 30 days for critical severity, 90 days for moderate

We follow coordinated disclosure: researchers and vendors agree on a public-disclosure date, after a fix ships and downstream users have time to upgrade.


Known Accepted Risks (v1.0.0)

Update 2026-05-03: T-NEW-1 (Stagehand v3 upgrade) executed earlier than planned — see ADR-035 (originally filed as ADR-029, renumbered 2026-05-05 to resolve a slot conflict with the M9-3.2 file-lock-race ADR). Stagehand v3.3.0 dropped both vulnerable transitive dependencies, so the three waivers below are closed. The full text is preserved here as a historical record of v1.0.0's accepted-risk posture.

1. ai SDK — file-type whitelist bypass (GHSA-rwvc-j5jr-mgvh) — CLOSED

  • Severity: Moderate
  • Source: @browserbasehq/stagehand@2.5.8 → ai
  • Vulnerable behavior: Vercel AI SDK's file-upload endpoint whitelist can be bypassed when uploading user-supplied files.
  • Why was not exploitable in pixelcheck@1.0.x: We do not call the ai SDK's file-upload functionality. Stagehand uses ai for prompt formatting only; no file uploads cross this code path.
  • Resolution: Stagehand 3.3.0 no longer depends on ai SDK. Verified by npm audit post-upgrade — finding is gone.

2. jsondiffpatchHtmlFormatter::nodeBegin XSS (GHSA-33vc-wfww-vjfv) — CLOSED

  • Severity: Moderate
  • Source: @browserbasehq/stagehand@2.5.8 → jsondiffpatch
  • Vulnerable behavior: HtmlFormatter::nodeBegin does not properly escape user-controlled values, leading to cross-site scripting if the formatted HTML is rendered in a browser.
  • Why was not exploitable in pixelcheck@1.0.x: We do not use jsondiffpatch's HtmlFormatter. Stagehand uses jsondiffpatch for internal plan diffing (server-side, never rendered as HTML to a browser). No HTML output reaches a user surface from this code path.
  • Resolution: Stagehand 3.3.0 no longer uses jsondiffpatch. Verified by npm audit post-upgrade.

3. (One additional low-severity transitive) — CLOSED

  • Severity: Low
  • Source: Stagehand v2.5.8 transitive
  • Resolution: Removed alongside the two findings above when Stagehand v3.3.0 replaced its dependency tree.

Post-Stagehand-v3 transitive cleanup (2026-05-03)

Stagehand v3.3.0 introduced a new set of 5 transitive moderate findings (different from the v1.0 set listed above):

Package GHSA Severity Resolution
langsmith GHSA-v34v-rq6j-cj6p — SSRF via Tracing Header Injection moderate Resolved via overrides.langsmith: ^0.6.0
langsmith GHSA-fw9q-39r9-c252 — Prototype Pollution via incomplete __proto__ guard moderate Resolved via override (same)
langsmith GHSA-rr7j-v2q5-chgv — Streaming token events bypass output redaction moderate Resolved via override (same)
uuid GHSA-w5hq-g745-h8pq — Missing buffer bounds check in v3/v5/v6 moderate Resolved via overrides.uuid: ^14.0.0
(uuid same finding via second dependency path) moderate Same override above

Both overrides are validated at runtime by the T5 Stagehand smoke test (real chromium + Anthropic API exercising act / extract / observe). The forced versions are major bumps over what @browserbasehq/stagehand@3.3.0 and @langchain/core declare in their dependencies, but Stagehand runs cleanly against them.

Result: npm audit --production reports 0 vulnerabilities.

CI policy

After ADR-035 + the post-v3 override cleanup above, CI runs npm audit --production --audit-level=moderate (tightened from the v1.0 --audit-level=high gate). All historical waivers are closed.

When @browserbasehq/stagehand ships a new minor / patch that bumps its own internal langsmith / uuid pins, the overrides block can be removed in a follow-up PR (the override is harmless to keep but unnecessary once upstream catches up).


Dependency Security Practices

  • Weekly automated scans: GitHub Dependabot opens PRs for new vulns (see .github/dependabot.yml)
  • CI gate (T26+T27): every PR runs npm audit --audit-level=high as a required check
  • License compliance (T28): every PR runs license-checker against an allowlist (see docs/THIRD_PARTY_LICENSES.md)
  • SBOM (T29): release artifacts include a CycloneDX SBOM at GitHub Releases
  • Lockfile: package-lock.json is committed; CI runs npm ci (lockfile-strict)

Scope

This policy covers vulnerabilities in:

  • The pixelcheck source code (CLI, MCP server, library)
  • The Node.js modules we directly publish under dist/
  • Our package.json direct + transitive dependencies (where we have upgrade authority)

This policy does not cover:

  • Vulnerabilities in Anthropic Claude API infrastructure (report to Anthropic directly)
  • Vulnerabilities in Chromium (report upstream to the Chromium Security team)
  • Issues in user-supplied scenarios / personas (user responsibility)
  • Issues in audited target sites (user responsibility)

Privacy / Data Handling

For data-handling concerns (what data is collected, where it is sent, retention), see PRIVACY.md (added in T22).


Last updated: 2026-05-01 (T0.6 initial draft) Policy owner: project maintainers

There aren't any published security advisories