Skip to main content

Cloudflare Pingora CVE-2026-105298

| EUVDEUVD-2026-104695 MEDIUM
HTTP Request/Response Smuggling (CWE-444)
2026-10-20 cloudflare GHSA-fqwv-pcm9-9m42
6.3
CVSS 4.0 · Vendor: cloudflare
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Send HTTP/2 request with mismatched Host and :authority
  2. Delivery
    Request filters and access checks evaluate :authority value
  3. Exploit
    Upstream receives and routes on client-supplied Host
  4. Execution
    Response cached under victim authority's key
  5. Impact
    Poisoned content served to other users

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V4 - API and Web Service HTTP request consistency
Exploitation Conditions

Three concrete conditions must hold simultaneously: (1) the Pingora instance (before 0.9.0) accepts HTTP/2 connections directly from clients; (2) the application makes security or caching decisions from the request URI authority - i.e., request_filter logic, host-based access controls, or cache keys read session.req_header().uri / :authority; and (3) the upstream routes by the Host header and serves different content per Host (explicitly required for the cache-poisoning outcome). The attack needs no authentication (PR:N) and no user interaction (UI:N) and succeeds with a single request. Limiting factors: deployments that do not accept client HTTP/2, or that do not use the request authority for security or caching decisions, are not affected; Cloudflare's internal Pingora services (no HTTP/2 clients) were unaffected.

Impact

This is a conditional, moderate-risk request-routing discrepancy rather than a drop-everything priority. The provided CVSS 4.0 vector (6.3, Medium) reports NO impact to the vulnerable Pingora system itself (VC:N/VI:N/VA:N) and only Low confidentiality/integrity impact to subsequent systems (SC:L/SI:L), which correctly models the real harm: other users and other virtual hosts, not the proxy. Crucially the vector sets AT:P (attack requirements present), signaling that successful exploitation depends on specific environmental conditions, not merely sending a packet - consistent with the description's caveat that cache poisoning 'also requires the upstream to serve different content per Host' and that only deployments using the request authority for security/caching are affected. Attack is network-reachable and unauthenticated (AV:N/PR:N/UI:N), which raises exposure, but the preconditions cap real-world likelihood. No EPSS score was provided, so statistical exploitation probability cannot be assessed - this is a gap. There is no CISA KEV listing and no public exploit was identified, so despite a plausible high-impact outcome (cache poisoning affecting many users), there is currently no evidence of weaponization. Net: a legitimate issue to patch for affected architectures, but not a universal emergency; the vendor explicitly notes Cloudflare's own CDN customers were unaffected because internal Pingora services have no HTTP/2 clients.

Exploit ScenarioDerived

A remote, unauthenticated attacker sends a single crafted HTTP/2 request in which the :authority pseudo-header names the victim host but the client-supplied Host header names a different virtual host. Pingora's request filters, access controls, and cache key read the :authority while the upstream routes on the forwarded Host, so a response from the attacker-chosen virtual host is cached under the victim's key and later served to other users, or a host-based access control check passes for one host while a different host actually serves the request. No public exploit code was identified at time of analysis.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.4% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Oct 20, 2026

A request-routing discrepancy in Cloudflare Pingora before 0.9.0 lets an unauthenticated remote attacker send a single HTTP/2 request that the proxy evaluates under one authority while the upstream receives a different Host, so Host-based filters, access controls, or cache keys can be applied to the wrong virtual host. Exploitation is conditional and moderate risk: the deployment must terminate client HTTP/2 in Pingora, make security or caching decisions from the request URI authority, and sit in front of an upstream that routes by Host and serves different content per Host. The outcome is limited-impact confidentiality and integrity exposure on the downstream component (possible cache poisoning or host-based access-control bypass); there is no public exploit code and no confirmed active exploitation at time of analysis, and Cloudflare's own CDN path was unaffected because its internal Pingora services do not accept HTTP/2 from clients.

RemediationAI

Upgrade to Pingora 0.9.0 or later, which rejects with 400 Bad Request any HTTP/2 request whose Host differs from :authority, that carries more than one Host, or whose authority contains userinfo, and normalizes the upstream Host/:authority to the request authority; the two upstream fix commits are 915590a91811877795531f6ba0927a3138b5cb4b and ffab8302d08d4292d1924eb8fe84647fd5cb8e76 in https://github.com/cloudflare/pingora. If the upgrade cannot be scheduled, add a request_filter that rejects client HTTP/2 requests where the Host header differs from the URI authority or where the authority contains '@' - this preserves protection but will also reject the rare legitimate client that legitimately sends an explicit Host differing from :authority or an authority with userinfo, so audit proxy and SDK behavior before enabling it in blocking mode. As a broader containment step, stop accepting client HTTP/2 at the affected listener (HTTP/1.1 only) where HTTP/2 termination is not required, which removes the divergence path entirely at the cost of losing multiplexing and header-compression benefits. Audit any downstream caches and host-routed virtual hosts for entries written under a mismatched authority before the fix was applied.

Affected VersionsENISA

https://github.com/cloudflare/pingora 0.1.0 <0.9.0

Affected Packages

cargo pingora-core fix: 0.9.0
euvd https_github_com_cloudflare_pingora fix: 0.9.0

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 2 packages in cargo, euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

Pingora is Cloudflare's Rust proxy framework, used both as an origin-facing reverse proxy and as an embeddable HTTP stack. The defect is an HTTP/2 authority-versus-Host interpretation conflict (no CWE was assigned; the behavior matches the request-interpretation-conflict class). RFC 9113 Section 8.3.1 requires an intermediary to derive Host from the :authority pseudo-header and to discard or replace any client-supplied Host field, and to reject userinfo in the authority. Pingora did neither: on the HTTP/2-to-HTTP/1.1 translation path it generated Host from :authority only when no Host header was present, so a conflicting client Host was passed upstream unchanged; on the HTTP/2-to-HTTP/2 path it stripped the client Host and used it to overwrite the upstream :authority, but only after request filters had already executed against the original :authority. The server also performed no Host/:authority equality check and accepted authority values containing '@' (for example user@example.com). Because session.req_header().uri exposes the :authority while the upstream routes on Host, application logic and transport can diverge with no malformed request involved. Fixes in 0.9.0 make the server return 400 Bad Request for mismatched Host/:authority, multiple Host fields, or userinfo in the authority, and keep the upstream Host or :authority consistent with the request authority.

Know when Https gets its next vulnerability

  • 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

Vendor (cloudflare) PRIMARY 6.3 MEDIUM
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N
vuln.today AI 5.4 MEDIUM

Remote single request with no auth or interaction (AV:N/PR:N/UI:N), but success requires specific upstream per-Host routing and authority-based security config so AC:H; harm falls on other users/vhosts (S:C, C:L/I:L).

3.1 AV:N/AC:H/PR:N/UI:N/S:C/C:L/I:L/A:N
4.0 AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N

Primary rating from Vendor (cloudflare).

CVSS VectorVendor: cloudflare

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
Present
Privileges Required
None
User Interaction
None
Vulnerable system: Confidentiality
None
Vulnerable system: Integrity
None
Vulnerable system: Availability
None
Subsequent system: Confidentiality
Low
Subsequent system: Integrity
Low
Subsequent system: Availability
None

Lifecycle Timeline

1
Patch available
Oct 20, 2026 - 02:01 EUVD

DescriptionCVE.org

Summary

Before version 0.9.0, Pingora accepted HTTP/2 requests whose Host header differed from the :authority pseudo-header. Request filters, cache keys, and logs that read the request URI (session.req_header().uri) saw the :authority value, but the upstream received the client-supplied Host value. Pingora also accepted :authority values containing userinfo (for example, user@example.com). This violates RFC 9113 Section 8.3.1, which requires an intermediary to use the :authority value for Host and replace any existing Host field.

Root cause

*

HTTP/2 to HTTP/1.1: Host was generated from :authority only when the request had no Host header, so a conflicting client Host was forwarded unchanged.

*

HTTP/2 to HTTP/2: the client Host header was removed and used to overwrite the upstream :authority, after request filters had already run against the original :authority.

*

The HTTP/2 server did not compare Host with :authority and did not reject userinfo in the authority.

Impact

A remote, unauthenticated attacker can send a single HTTP/2 request that the application sees as one host and the upstream receives as another. Where request filters, access controls, or cache keys use the URI authority and the upstream routes by Host, this can lead to:

*

Cache poisoning: a response from another virtual host is stored under the victim host's cache key and served to other users (this also requires the upstream to serve different content per Host).

*

Host-based access control bypass: a request approved for one host is served by a different virtual host on the upstream.

Deployments that do not accept HTTP/2 from clients, or that do not use the request authority for security or caching decisions, are not affected.

Note that Cloudflare CDN customers were unaffected, as internal Pingora services at Cloudflare do not have HTTP/2 clients.

Mitigation:

*

Upgrade to pingora 0.9.0 or later. Pingora now returns 400 Bad Request for HTTP/2 requests whose Host differs from :authority, that contain more than one Host, or whose authority contains userinfo, and keeps the upstream Host or :authority consistent with the request authority. Fix commits: https://github.com/cloudflare/pingora/commit/915590a91811877795531f6ba0927a3138b5cb4b , https://github.com/cloudflare/pingora/commit/ffab8302d08d4292d1924eb8fe84647fd5cb8e76

*

If you cannot upgrade: in request_filter, reject HTTP/2 requests that carry a Host header different from the URI authority, or whose authority contains '@'.

Threat Intelligence Overview

EPSS Score
0.4%
Top 63% exploitable
Prevalence
Low
developer-facing Rust proxy framework, limited external client-facing HTTP/2 deployment
Data Quality
5 sources
Confidence: Medium

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.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS 0.4%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
Yes
Human Impact· derived
Medium

Priority Score

32
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +32
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.

HTTP request smuggling exploits inconsistencies in how front-end and back-end servers parse HTTP message boundaries.

Related Vulnerabilities in Pingora HTTP/1 and HTTP/2 Processing Flaws

View all 3

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy