CVE-2026-85687 Overview
CVE-2026-85687 is an unauthenticated arbitrary file read vulnerability in the Surya 0.22.1 screenshot server. The /info, /page, and /process routes accept raw file_path parameters without validation. Attackers can supply arbitrary host paths to Image.open or pypdfium2.PdfDocument and retrieve rendered image or PDF contents as base64. The /info endpoint additionally serves as an existence oracle for probing files on the host. The issue is tracked under CWE-73: External Control of File Name or Path.
Critical Impact
Remote, unauthenticated attackers can read arbitrary image and PDF files on the server host and enumerate filesystem paths through the screenshot server API.
Affected Products
- Surya screenshot server version 0.22.1
- The surya/scripts/screenshot_app.py component maintained by datalab-to
- Any deployment exposing the Surya screenshot app over the network
Discovery Timeline
- 2026-09-04 - CVE-2026-85687 published to the National Vulnerability Database (NVD)
- 2026-09-10 - Last updated in NVD database
Technical Details for CVE-2026-85687
Vulnerability Analysis
The Surya screenshot server exposes HTTP routes that read files from the host filesystem based on client-supplied paths. The /info, /page, and /process endpoints accept a file_path parameter and pass it directly to Image.open or pypdfium2.PdfDocument. No authentication is enforced, and no path validation restricts input to an allowed directory.
When a request is issued, the server opens the referenced file, renders it, and returns the resulting image or PDF page as base64-encoded content in the response body. Any image or PDF readable by the server process becomes accessible to the attacker.
The /info route behaves as an existence oracle. It returns distinguishable responses depending on whether the target path exists and is a supported file type. Attackers can iterate through candidate paths to map the filesystem before requesting content through /page or /process. See the VulnCheck Advisory for Surya for the full technical writeup.
Root Cause
The root cause is external control of the file path [CWE-73]. The screenshot server trusts client-supplied file_path values and performs no canonicalization, allow-listing, or authorization check before opening the referenced file. Reference the GitHub Surya Screenshot Script for the vulnerable request handlers.
Attack Vector
Exploitation requires only network reachability to the screenshot server. The attacker sends an HTTP request to /info, /page, or /process with a file_path parameter pointing to a target file. The server responds with base64-encoded rendered content or an existence signal. No credentials, user interaction, or prior foothold is required. Additional context is available in GitHub Surya Issue #518.
Detection Methods for CVE-2026-85687
Indicators of Compromise
- HTTP requests to /info, /page, or /process containing absolute or traversal-style file_path values such as /etc/, /root/, or C:\\Users\\.
- Repeated /info requests iterating through candidate paths, indicating filesystem enumeration.
- Outbound response payloads containing large base64 blobs originating from the Surya server.
Detection Strategies
- Inspect web server and reverse-proxy logs for requests to Surya screenshot endpoints carrying file_path parameters that reference paths outside expected working directories.
- Deploy web application firewall (WAF) rules that flag or block file_path values containing directory separators, drive letters, or path traversal sequences.
- Correlate anomalous file open activity by the Surya process against baseline behavior using endpoint telemetry.
Monitoring Recommendations
- Alert on unauthenticated access to the Surya screenshot server from untrusted network segments.
- Monitor file read operations performed by the Python interpreter hosting Surya, focusing on access to sensitive directories.
- Track sudden increases in response payload size from Surya endpoints, which may indicate bulk file exfiltration.
How to Mitigate CVE-2026-85687
Immediate Actions Required
- Restrict network access to the Surya screenshot server so it is reachable only from trusted hosts or authenticated proxies.
- Take the screenshot server offline in production environments until a validated patch is applied.
- Audit host filesystems for sensitive image or PDF assets accessible to the Surya service account.
Patch Information
No fixed version is identified in the enriched NVD record at the time of writing. Monitor the GitHub Surya Repository and GitHub Surya Issue #518 for release notes addressing the arbitrary file read. Consult the VulnCheck Advisory for Surya for remediation guidance.
Workarounds
- Place the screenshot server behind an authenticating reverse proxy that enforces strong access controls.
- Run Surya in a container or sandbox with a read-only filesystem exposing only the directories required for legitimate processing.
- Validate and canonicalize file_path inputs at the proxy layer, rejecting requests with absolute paths, traversal sequences, or references outside the designated working directory.
- Execute the Surya process under a low-privilege service account that cannot read sensitive system or user files.
# Example nginx configuration restricting access and blocking traversal patterns
location ~ ^/(info|page|process)$ {
allow 10.0.0.0/8;
deny all;
if ($arg_file_path ~* "(\.\./|^/|^[A-Za-z]:\\)") {
return 403;
}
proxy_pass http://surya_backend;
}
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.