The vulnerability, CVE-2026-2833, is a classic case of HTTP Request Smuggling due to the premature handling of an HTTP Upgrade. In vulnerable versions of Pingora, when the proxy received a request containing an Upgrade header, it would immediately switch both its client-facing and backend-facing connections into a pass-through or "tunnel" mode. This switch occurred before the backend server had a chance to respond to and approve the upgrade request with a 101 Switching Protocols status code.
The root cause lies in the init_req_body_writer function for the upstream (client) session and the init_body_reader function for the downstream (server) session. Both functions incorrectly assumed that any request with an Upgrade header would successfully be upgraded, and therefore switched the connection to a raw data forwarding mode. An attacker could exploit this by sending a specially crafted request that included an Upgrade header, followed by a second, complete HTTP request in its body. Pingora's proxy logic would only process the first request's headers, apply security policies to it, and then forward it. Because the connection was already in pass-through mode, the second, smuggled request in the body would be sent directly to the backend server as raw data. The backend server, which is not in an upgraded state, would then see and process this as a legitimate, separate HTTP request, bypassing all of Pingora's proxy-level security controls like access control lists (ACLs) and Web Application Firewall (WAF) rules.
The patch corrects this behavior by delaying the switch to the pass-through mode until after the proxy receives a 101 Switching Protocols response from the backend, ensuring that smuggled requests are not forwarded.