Loading...
Skip to main content

CVE-2026-27018 — Vulnerability in...

HIGH

Gotenberg has Chromium deny-list bypass via case-insensitive URL scheme (bypass of GHSA-rh2x-ccvw-q7r3)

Published March 30, 2026Updated July 8, 2026Source: osv

Summary

### Impact The fix introduced in version 8.1.0 for GHSA-rh2x-ccvw-q7r3 (CVE-2024-21527) can be bypassed using mixed-case or uppercase URL schemes. The default `--chromium-deny-list` value is `^file:(?!//\/tmp/).*`. This regex is anchored to lowercase `file:` at the start. However, per RFC 3986 Section 3.1, URI schemes are case-insensitive. Chromium normalizes the scheme to lowercase before navigation, so a URL like `FILE:///etc/passwd` or `File:///etc/passwd` bypasses the deny-list check but still gets resolved by Chromium as `file:///etc/passwd`. The root cause is in `pkg/gotenberg/filter.go` — the `FilterDeadline` function compiles the deny-list regex with `regexp2.MustCompile(denied.String(), 0)`, where `0` means no flags (case-sensitive). Since the regex pattern itself doesn't include a `(?i)` flag, matching is strictly case-sensitive. This affects both the URL endpoint and HTML conversion (via iframes, link tags, etc.). ### Steps to Reproduce 1. Start Gotenberg with default settings: ```bash docker run --rm -p 3000:3000 gotenberg/gotenberg:8.26.0 gotenberg ``` 2. Read `/etc/passwd` via the URL endpoint using an uppercase scheme: ```bash curl -X POST 'http://localhost:3000/forms/chromium/convert/url' \ --form 'url=FILE:///etc/passwd' -o output.pdf ``` 3. Open `output.pdf` — it contains the contents of `/etc/passwd`. 4. Alternatively, create an `index.html`: ```html <iframe src="FILE:///etc/passwd" width="100%" height="100%"></iframe> ``` Then convert it: ```bash curl -X POST 'http://localhost:3000/forms/chromium/convert/html' \ -F 'files=@index.html' -o output.pdf ``` 5. The resulting PDF contains `/etc/passwd` contents. Mixed-case variants like `File:`, `fILE:`, `fiLE:` etc. all work as well. ### Root Cause - `pkg/modules/chromium/chromium.go` defines the default deny-list as `^file:(?!//\/tmp/).*` - `pkg/gotenberg/filter.go` compiles this with `regexp2.MustCompile(denied.String(), 0)` — flag `0` means case-sensitive - `pkg/modules/chromium/events.go` uses `FilterDeadline` to check intercepted request URLs against the deny-list - Chromium normalizes URL schemes to lowercase, so `FILE:///etc/passwd` becomes `file:///etc/passwd` after the deny-list check has already passed ### Suggested Fix Change the default deny-list regex to use a case-insensitive flag: ``` (?i)^file:(?!//\/tmp/).* ``` Or apply case-insensitive matching in `FilterDeadline` when compiling the regex. ### Severity This is effectively the same impact as CVE-2024-21527 — unauthenticated arbitrary file read from the Gotenberg container. An attacker can leak environment variables, configuration, credentials, and other sensitive data.

Advisory Timeline

  • First published March 30, 2026 (196 days ago).
  • Last revised July 8, 2026 — 100 days after initial publication.

Remediation

Upgrade to the fixed version using your package manager.

Go
Update github.com/gotenberg/gotenberg/v8 to 8.29.0 or later
go get github.com/gotenberg/gotenberg/v8@v8.29.0

After upgrading, run your dependency scanner again to confirm the vulnerability is resolved.

Affected Packages (2)

Affects 1 ecosystem: go (2).

PackageEcosystemAffectedFixed In
github.com/gotenberg/gotenberg/v7
go
All versionsRange-based data available
github.com/gotenberg/gotenberg/v8
go
All versions8.29.0

Vulnerability Classification

Common Weakness Enumeration (CWE) identifiers for this vulnerability type.

  • CWE-22
    Path TraversalMITRE
  • CWE-918
    Server-Side Request Forgery (SSRF)MITRE

CVSS Score Breakdown

What the CVSS (Common Vulnerability Scoring System) 8.2 score means for each attack dimension.

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
—
Confidentiality
—
Integrity
—
Availability
—

CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:L/VA:N/SC:N/SI:N/SA:N/E:P

Frequently Asked Questions

What is CVE-2026-27018?
Gotenberg has Chromium deny-list bypass via case-insensitive URL scheme (bypass of GHSA-rh2x-ccvw-q7r3) This vulnerability has been assigned a severity rating of HIGH (CVSS score: 8.2/10).
How do I check if my project is affected by CVE-2026-27018?
CVE-2026-27018 affects github.com/gotenberg/gotenberg/v7 and github.com/gotenberg/gotenberg/v8. Use GeekWala's free vulnerability scanner to check your dependencies against CVE-2026-27018 and 200,000+ other known vulnerabilities.

Severity & Exploitability

CVSS Score
8.2

High exploitability or significant impact. Prioritize remediation within days.

Also Known As

GHSA-jjwv-57xh-xr6r
GO-2026-4905

Related CVEs

  • CVE-2026-42596
    CRITICAL

    Gotenberg vulnerable to unauthenticated SSRF via default deny-list bypass in downloadFrom and webhook

  • CVE-2026-40281
    CRITICAL

    Gotenberg has ExifTool stdin argument injection via metadata value newlines (bypass of key sanitization fix)

  • CVE-2026-42589
    CRITICAL

    Gotenberg has Unauthenticated RCE via ExifTool Metadata Key Injection

  • CVE-2026-107809
    HIGH

    Nginx-UI AuthRequired token cookie fallback enables CSRF against management APIs

  • CVE-2026-40280
    HIGH

    Gotenberg has case-insensitive URL scheme that bypasses webhook and downloadFrom deny-list SSRF protection

  • CVE-2026-42595
    HIGH

    Gotenberg: Server-Side Request Forgery via Chromium URL Endpoint with Redirect-Based Deny-List Bypass

  • CVE-2026-44829
    HIGH

    Gotenberg has path traversal in zip entry name via Windows-style separators in upload filename

  • CVE-2026-39383
    MEDIUM

    Gotenberg Vulnerable to Unauthenticated SSRF via Unfiltered Webhook URL

Check if you're affected

Scan your dependencies to see if this vulnerability affects your projects.

Scan Your Dependencies