Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessRegister attacker domain with low-TTL authoritative DNS
-
DeliveryForge allowed Origin, submit cert/OCSP/CRL/TSA URL
-
ExploitPass DNS safety check with public IP
-
ExecutionRebind DNS to private/metadata address before fetch
-
PersistProxy fetches internal resource
-
ImpactExfiltrate internal response body
Vulnerability Assessment
| Weakness |
CWE
ASVS 5.0
V15 - Secure Coding and Architecture TOCTOU prevention
|
| Exploitation Conditions | Exploitation requires a specific non-default deployment: the worker must run OFF Cloudflare (e.g. workerd, Node, or another runtime inside a cloud VPC that can actually route to internal/RFC1918/loopback/link-local/169.254.169.254 addresses) AND PROXY_SECRET validation must be disabled AND no network-level egress filtering is present. The attacker must additionally control authoritative DNS for a domain with a very low TTL to win the rebinding race between hostnameResolvesToPrivate() and the outbound fetch. Limiting factors: on the default Cloudflare Workers deployment this is NOT exploitable (no route to private/metadata addresses); redirects and IP-literal obfuscation are blocked; precise timing is needed; and network reachability of the worker to the target constrains impact to I:N/A:N (read-only disclosure). |
| Impact | This is a moderate, highly conditional server-side request forgery (SSRF) issue, not a broadly urgent priority. The CVSS 3.1 vector (AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:N/A:N = 6.8 Medium) is internally consistent with the description: network-reachable and requiring no authentication (PR:N applies only when PROXY_SECRET validation is disabled), but with High attack complexity reflecting the CWE-367 TOCTOU race - the attacker must win a timing window between the DNS-over-HTTPS safety check in hostnameResolvesToPrivate() and the later outbound fetch(). No EPSS score, KEV listing, or public exploit was provided in the input, so there is no public exploit identified at time of analysis and no evidence of active exploitation. Critically, the vendor's own fix commit and docs state that the DEFAULT Cloudflare Workers deployment is NOT exploitable (Cloudflare's edge has no route to RFC1918/loopback/link-local/169.254.169.254), so real-world risk collapses to the subset of self-hosters running the worker off Cloudflare (workerd/Node inside a VPC) AND without PROXY_SECRET AND without network egress filtering. The scope change (S:C) and C:H are justified because a successful rebind lets the proxy read internal/cloud-metadata resources and return bodies to the attacker. Net: a real but narrowly-conditioned issue dominated by non-default deployment requirements and high exploitation complexity, not a high-CVSS-but-fictional risk nor a drop-everything emergency. |
| Exploit ScenarioDerived | An organization self-hosts the BentoPDF CORS proxy worker off Cloudflare (e.g. workerd or Node inside a cloud VPC) with PROXY_SECRET unset. An attacker who controls authoritative DNS for their own domain (very low TTL) forges an allowed Origin header and submits a certificate/OCSP/CRL/TSA URL pointing at that domain; the domain answers with a public IP during the safety check, then rebinds to a private or 169.254.169.254 metadata address for the actual fetch, returning internal response bodies to the attacker. No public exploit code was identified, and success requires precise timing since IP-literal obfuscation and redirects are blocked. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 14, 2026
Server-side request forgery in the self-hosted CORS proxy worker bundled with BentoPDF (cloudflare/cors-proxy-worker.js) through version 2.8.6 lets an unauthenticated remote attacker who controls authoritative DNS for a domain with a very low TTL win a DNS-rebinding race and make the proxy fetch internal, loopback, link-local or cloud-metadata addresses, returning the response body to the attacker. Exploitation is highly conditional: the worker must be running outside Cloudflare (for example workerd, Node, or another runtime inside a cloud VPC that can actually route to RFC1918 and 169.254.169.254 addresses), PROXY_SECRET validation must be disabled, no network-level egress filtering may be present, and the attacker must supply a certificate, OCSP, CRL or TSA URL that passes the proxy's accepted path checks. The default Cloudflare deployment is not exploitable, redirects and IP-literal obfuscation are blocked, and impact is limited to read-only information disclosure (C:H/I:N/A:N); the issue is fixed in 2.8.7 and no public exploit was identified at time of analysis.
RemediationAI
Vendor-released patch: 2.8.7 - upgrade BentoPDF to v2.8.7 (https://github.com/alam00000/bentopdf/releases/tag/v2.8.7), which incorporates the fixes in commits 45496fcd2ed6e02dcdde0d3839cc5024c091760c and 58cd1a8893bfe06e4a59a72adc2e7db00a8b9266 and aligns with advisory GHSA-wh78-rcw2-hhg9. If upgrading immediately is not possible, the single most effective compensating control for non-Cloudflare deployments is network-level egress filtering in front of the worker, blocking outbound connections to RFC1918 ranges (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16), loopback (127.0.0.0/8), link-local and the metadata endpoint (169.254.0.0/16, including 169.254.169.254) plus their IPv6 equivalents - application code alone cannot guarantee this on a non-Cloudflare runtime, so the egress firewall should be treated as required, and the trade-off is that overly broad rules may break legitimate CA certificate-chain fetches. Enabling PROXY_SECRET raises the bar for casual abuse but is not a genuine authentication boundary, since the secret ships in the public client bundle, so it must not be relied on as the primary fix. Migrating the worker back to the default Cloudflare deployment removes the exposure entirely because Cloudflare Workers have no route to private or metadata addresses. Self-hosting guidance is documented in docs/self-hosting/cors-proxy.md.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The flaw is a time-of-check-to-time-of-use (TOCTOU) race condition, classified as CWE-367, in the CORS proxy worker's SSRF defense. The worker calls hostnameResolvesToPrivate(), a DNS-over-HTTPS safety check used by isValidCertificateUrl() and isValidTsaUrl(), as a separate resolution step from the later outbound fetch(targetUrl, ...). Because the check and the fetch each resolve the hostname independently, an attacker with control over their own domain's authoritative DNS (served with a very low TTL) can answer the validation query with a public address and the subsequent fetch query with a private, loopback, link-local or metadata address such as 169.254.169.254. The proxy deliberately cannot restrict destinations to a fixed host allowlist, because it must retrieve certificate-chain URLs from arbitrary certificate authorities via each certificate's AIA/OCSP/CRL fields (for example www.cert.fnmt.es and corporate CAs), which is what leaves the rebinding gap open. The Origin allow-list and the optional PROXY_SECRET HMAC are anti-abuse controls rather than a security boundary: the Origin header is forgeable by non-browser clients and the HMAC secret ships in the public client bundle. The CVSS vector AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:N/A:N reflects network reachability, high attack complexity due to the timing-dependent race, no authentication or user interaction required, a scope change because the proxy is used to reach resources outside its own security authority, high confidentiality impact, and no integrity or availability impact. Deployments on Cloudflare egress from Cloudflare's edge, which has no route to private, internal or metadata addresses, so a successful rebind reaches nothing.
Know when the next one hits your stack
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:N/A:N
Unauthenticated when PROXY_SECRET is off (PR:N); AC:H for the DNS-rebinding timing race; S:C and C:H as the proxy reads internal systems and returns bodies; no integrity/availability impact.
Primary rating from Vendor (github).
CVSS VectorVendor: github
Lifecycle Timeline
1DescriptionCVE.org
BentoPDF is a privacy-focused PDF toolkit that runs in the browser. In versions through 2.8.6, cloudflare/cors-proxy-worker.js performs a DNS-over-HTTPS safety check in hostnameResolvesToPrivate(), as used by isValidCertificateUrl() and isValidTsaUrl(), separately from the outbound fetch(targetUrl, ...). In deployments where PROXY_SECRET validation is not enabled, a direct client that controls authoritative DNS can forge the Origin header, supply a certificate, OCSP, CRL, or TSA URL that passes the proxy's accepted path checks, return a public address during validation, and return a private or link-local address during the later fetch. The endpoint can return allowed response bodies to the attacker, but exploitation requires precise timing, redirects and IP-literal obfuscation are blocked, and network reachability limits the target. This vulnerability is fixed in 2.8.7.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
EUVD-2026-101579
NVD
CVE.org
EPSS
Vulnrichment
GitHub
Exploit-DB