A single HTTP header just walked past authentication for a million deployments. OAuth2 Proxy, the Go-based reverse proxy that guards Kubernetes ingresses and multi-tenant SaaS backends, shipped a patch in October 2026 that most security scanners will never see. This is not a story about one bug. It is a story about a trust boundary that was never drawn.
The vulnerability carries CVSS 9.1 and a CWE-290 classification — authentication bypass by spoofing. The mechanism is brutally simple. The function GetRequestURI in pkg/requests/util/util.go decides what path the upstream application should receive. When CanTrustForwardedHeaders returns true, it reads the X-Forwarded-Uri header. That header is entirely client-controlled.
Chain the logic. An attacker sends a request with X-Forwarded-Uri: /health. The proxy evaluates its skip-auth whitelist, sees /health, and waves the request through without checking identity. The upstream then receives the actual protected path — say, /api/admin/tenants — and serves it. Authentication was never performed. Authorization was never consulted. The gatekeeper was reading the mask, not the face behind it.
The exploit requires three conditions. The --reverse-proxy flag must be set. At least one skip-auth rule must exist — and /health, /metrics, and /ping are the standard trio in nearly every production deployment. The --trusted-proxy-ip flag must be unset. That third condition is not an edge case. It is the default. The mitigation patches the symptom. Administrators must now manually define a CIDR range for trusted proxies, and the upstream must strip any client-supplied X-Forwarded-Uri at the load balancer. The default value for the trusted proxy setting was 0.0.0.0/0 — trust everyone on the internet.

Here is the structural failure: string matching was used for path authorization, but string matching assumes a canonical form that the parser never enforced. Version 7.15.5 finally rejected dot-segments, double slashes, and matrix parameters in paths. That fix did not exist for years. Every deployment that relied on /admin being blocked while /admin/../public or //admin resolved correctly upstream was walking a tightrope over a canyon.
The regression is worse than the bug. CVE-2026-40575 patched this same component months earlier. Then CVE-2026-76835 arrived carrying the same lineage. The same release that fixed the path ambiguity also patched an IP header parsing flaw and a callback log credential leak. Three defects in one release suggests not isolated error but clustered absence — the security audit that should have been adversarial testing became a checklist exercise. Whoever designed the fix stood in the position of the defender, not the attacker.
Meanwhile, the disclosure chain broke. The vulnerability never appeared in CISA's Known Exploited Vulnerabilities catalog. It never entered the NVD database as a distinct entry. No independent GitHub Security Advisory was published. It was tracked only under the existing CVE-2026-40575 advisory. For teams running Dependabot, Trivy, or Grype, that means zero alerts. The patch shipped. The notification never arrived. A vulnerability silently patched is a vulnerability silently exploited, because automated detection tooling was never given the lookup key.
Now the contrarian question. If /health is on the skip-auth list, does that mean the health endpoint itself is the target? No. The target is whatever the upstream serves when it receives a path ending in /admin, /api/internal, or /tenants. The skip-auth whitelist becomes the keycard to every door, not just the door marked public. Multi-tenant SaaS backends with a single proxy frontend are the worst-hit architecture. One authentication failure cascades horizontally across every tenant. The design intent of the proxy as a "thin middleware" meant the security boundary was always someone else's responsibility — the deployer's, the ingress controller's, the load balancer's. That responsibility mismatch is the actual bug. The header is just the delivery mechanism.

Competitors are already moving. Authelia, Pomerium, Traefik's ForwardAuth, Envoy's ext_authz, and cloud-native options like Cloudflare Access all have their own trust boundaries, but the incident's noise gives them the strongest recruit pitch of the year: secure by default. The open-source community will need to demonstrate serious migration discipline. Merely fixing this version and releasing a patch is insufficient. Every adopter of every comparable proxy should now build a baseline checklist: which forwarded headers does this component trust, and where are those headers stripped? Which versions require manual hardening, and which are secure by default?
Meanwhile, the compliance axis is ticking. The EU Cyber Resilience Act's main obligations take effect in 2027. Vulnerabilities that never enter the NVD create blind spots that equal or exceed the threat of the vulnerabilities themselves. For any enterprise preparing security audit questionnaires, SOC 2, ISO 27001, or SBOM attestations, verify that this component's CVE state is captured in your supplier risk register. Do not assume your scanner covered it.
Operational priorities are clear. Remove all regex from skip-auth rules, replace them with exact paths, and audit every existing rule for ambiguity. Set --trusted-proxy-ip to your specific CIDR range. Strip every X-Forwarded-Uri at the edge load balancer regardless of which proxy sits behind it. And subscribe to release channels directly — because the standard vulnerability databases will not tell you when this kind of bug lands.
Floor holding. The patch is out. Baseline the trust boundary before something else uses it.