{"cve":"CVE-2026-3125","nvd":{"published":"2026-03-04T19:16:19.730","modified":"2026-06-17T10:43:05.107","status":"Analyzed","description":"A Server-Side Request Forgery (SSRF) vulnerability was identified in the @opennextjs/cloudflare package, resulting from a path normalization bypass in the /cdn-cgi/image/ handler.The @opennextjs/cloudflare worker template includes a /cdn-cgi/image/ handler intended for development use only. In production, Cloudflare's edge intercepts /cdn-cgi/image/ requests before they reach the Worker. However, by substituting a backslash for a forward slash (/cdn-cgi\\image/ instead of /cdn-cgi/image/), an attacker can bypass edge interception and have the request reach the Worker directly. The JavaScript URL class then normalizes the backslash to a forward slash, causing the request to match the handler and trigger an unvalidated fetch of arbitrary remote URLs.\n\nFor example: \n\n https://victim-site.com/cdn-cgi\\image/aaaa/https://attacker.com \n\nIn this example, attacker-controlled content from attacker.com is served through the victim site's domain (victim-site.com), violating the same-origin policy and potentially misleading users or other services.\n\nNote: This bypass only works via HTTP clients that preserve backslashes in paths (e.g., curl --path-as-is). Browsers normalize backslashes to forward slashes before sending requests.\n\nAdditionally, Cloudflare Workers with Assets and Cloudflare Pages suffer from a similar vulnerability. Assets stored under /cdn-cgi/ paths are not publicly accessible under normal conditions. However, using the same backslash bypass (/cdn-cgi\\... instead of /cdn-cgi/...), these assets become publicly accessible. This could be used to retrieve private data. For example, Open Next projects store incremental cache data under /cdn-cgi/_next_cache, which could be exposed via this bypass.","cvss_v4":{"vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:L/VA:N/SC:H/SI:N/SA:N","score":7.7},"cvss_v3":{"version":"3.1","vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N","score":6.5},"cwes":["CWE-918","CWE-706"],"references":["https://github.com/advisories/GHSA-rvpw-p7vw-wj3m","https://github.com/opennextjs/opennextjs-cloudflare/pull/1147","https://www.cve.org/cverecord?id=CVE-2025-6087","https://www.npmjs.com/package/@opennextjs/cloudflare/v/1.17.1"],"products":["opennextjs:opennext_for_cloudflare"],"source":"nvd","synced_at":"2026-10-19T22:24:17.937441719+00:00"},"epss":{"cve":"CVE-2026-3125","score":0.004,"percentile":0.34305,"date":"2026-11-01"},"kev":null,"osv":[{"id":"GHSA-c7mq-gh6q-6q7c","url":"https://osv.dev/vulnerability/GHSA-c7mq-gh6q-6q7c","summary":"opennextjs-cloudflare has SSRF vulnerability via /cdn-cgi/ path normalization bypass","modified":"2026-03-16T03:05:38.239106Z","packages":[{"ecosystem":"npm","name":"@opennextjs/cloudflare","purl":"pkg:npm/%40opennextjs/cloudflare","ranges":["<1.17.1"],"fixed":["1.17.1"]}]},{"id":"GHSA-rvpw-p7vw-wj3m","url":"https://osv.dev/vulnerability/GHSA-rvpw-p7vw-wj3m","summary":"OpenNext for Cloudflare (opennextjs-cloudflare) has a SSRF vulnerability via /_next/image endpoint","modified":"2026-03-16T03:05:28.307271Z","packages":[{"ecosystem":"npm","name":"@opennextjs/cloudflare","purl":"pkg:npm/%40opennextjs/cloudflare","ranges":["<1.3.0"],"fixed":["1.3.0"]}]}],"attribution":["This product uses the NVD API but is not endorsed or certified by the NVD.","EPSS scores: FIRST Exploit Prediction Scoring System, https://www.first.org/epss","Known exploited vulnerabilities: CISA Known Exploited Vulnerabilities Catalog, https://www.cisa.gov/known-exploited-vulnerabilities-catalog","Package advisories: OSV (https://osv.dev), from the GitHub Advisory Database, PyPA, Go, RustSec and other ecosystem databases, under CC-BY 4.0 or CC0","CVE records: the CVE Program's CVE List (https://www.cve.org), under its terms of use (https://www.cve.org/Legal/TermsOfUse). CVE is a registered trademark of The MITRE Corporation; this product is not affiliated with the CVE Program."]}