CVE-2026-92811 Overview
CVE-2026-92811 affects browserless versions 1.44.0 through 2.56.7, a headless browser automation service commonly deployed for web scraping, PDF generation, and automated testing. The vulnerability allows authenticated token holders to bypass file protocol restrictions in Playwright websocket endpoints and read arbitrary files accessible to the container process. The ALLOW_FILE_PROTOCOL setting defaults to false, but this control is not enforced on Playwright-driven browser sessions. Attackers can navigate the browser to file:// scheme URLs and exfiltrate sensitive data from the host filesystem. The flaw is categorized as an information disclosure weakness [CWE-200].
Critical Impact
Authenticated attackers can read arbitrary files from the browserless container, including credentials, configuration files, and session tokens, despite the file protocol restriction being explicitly disabled.
Affected Products
- browserless 1.44.0 through 1.x releases
- browserless 2.0.0 through 2.56.7
- Deployments exposing Playwright websocket endpoints (/playwright/*)
Discovery Timeline
- 2026-09-16 - CVE-2026-92811 published to NVD
- 2026-09-16 - Last updated in NVD database
Technical Details for CVE-2026-92811
Vulnerability Analysis
Browserless exposes multiple websocket endpoints that let clients drive Chromium instances remotely using Chrome DevTools Protocol (CDP) or Playwright. The service provides an ALLOW_FILE_PROTOCOL configuration flag that, when set to false, is intended to block navigation to file:// URLs across all browser sessions. This restriction is enforced correctly on CDP-based endpoints but is missing from the Playwright integration path.
An authenticated client that holds a valid API token can connect to the Playwright websocket, launch a browser context, and instruct it to navigate to a file:// URI targeting any path readable by the container process. The response body containing the file contents is returned to the caller through standard Playwright APIs such as page.content() or page.goto() responses. Sensitive assets including /etc/passwd, cloud metadata cached on disk, mounted secrets, and application source code become reachable.
Root Cause
The root cause is inconsistent enforcement of a security policy across browser transports. The browsers.playwright.ts launch path does not apply the file scheme filter present in browsers.cdp.ts. The ALLOW_FILE_PROTOCOL=false default gives operators a false assurance that file access is blocked on all endpoints.
Attack Vector
Exploitation requires network reachability to the browserless service and a valid authentication token. The attacker connects to the Playwright websocket, opens a page, and navigates to a file:// URL. No user interaction is required, and the attack complexity is low. Because browserless is frequently deployed inside containers with access to mounted secrets or service account tokens, successful exploitation can pivot toward credential theft. See the VulnCheck Advisory on Browserless and the GitHub Browserless Playwright Integration source for technical detail.
No verified public exploit code is available for this vulnerability. Refer to the GitHub Browserless Code Snippet for the CDP-side enforcement pattern that is missing from the Playwright path.
Detection Methods for CVE-2026-92811
Indicators of Compromise
- Playwright websocket connections to /playwright/* endpoints followed by navigation events targeting file:// URLs in browserless request logs.
- Container process file reads against sensitive paths such as /etc/, /root/, /var/run/secrets/, or application configuration directories outside expected browser workflows.
- Unusually large response payloads returned from Playwright sessions where the requested resource path resembles a local filesystem location.
Detection Strategies
- Parse browserless access logs for navigation entries whose target URL begins with file:// and correlate with the originating API token.
- Monitor egress from the browserless container for outbound transfers that follow the retrieval of local files, indicating exfiltration.
- Deploy filesystem auditing (auditd, eBPF) on the container host to alert when the browserless process reads paths outside its working directory or browser cache.
Monitoring Recommendations
- Enable verbose request logging in browserless and forward logs to a SIEM for correlation with authentication events.
- Track token issuance and rotate tokens on any anomaly involving file:// navigation attempts.
- Alert on process activity where headless Chromium accesses secrets directories or Kubernetes service account token mount points.
How to Mitigate CVE-2026-92811
Immediate Actions Required
- Upgrade browserless to a version later than 2.56.7 that enforces the file protocol restriction on Playwright endpoints.
- Rotate all API tokens issued to browserless and audit their usage for signs of prior file:// navigation.
- Restrict network access to browserless websocket endpoints so only trusted services can reach them.
- Review container mounts and remove secrets, cloud credentials, and configuration files not required by the browser workload.
Patch Information
Monitor the GitHub Browserless Repository for a fixed release addressing CVE-2026-92811. The fix aligns the Playwright launch path with the CDP enforcement of ALLOW_FILE_PROTOCOL. Consult the VulnCheck Advisory on Browserless for the authoritative list of patched versions.
Workarounds
- Run browserless in a minimal container image with no mounted secrets and a read-only root filesystem where possible.
- Deploy a reverse proxy in front of browserless that inspects Playwright websocket messages and blocks requests referencing the file scheme.
- Restrict outbound and local filesystem access using seccomp, AppArmor, or SELinux profiles that deny reads outside the browser cache and working directory.
- Enforce per-tenant token scoping and rate limits to reduce the blast radius if a token is compromised.
# Configuration example: restrict browserless container filesystem exposure
docker run --rm \
--read-only \
--tmpfs /tmp \
--cap-drop=ALL \
--security-opt no-new-privileges \
-e TOKEN="$(openssl rand -hex 32)" \
-e ALLOW_FILE_PROTOCOL=false \
-p 3000:3000 \
ghcr.io/browserless/chromium:latest
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.