CVE-2025-64484: Github.com/oauth2 proxy/oauth2 proxy/v7 OAuth2-Proxy Is Vulnerable To Header Vulnerability

HIGH
Advisory Identifier: GHSA-vjrc-mh2v-45x6
CVSS 8.5
CWE-644
Published
Advisory Summary

CVE-2025-64484 is a HIGH (CVSS 8.5) oauth2-proxy is vulnerable to header vulnerability (CWE-644: Improper Neutralization of HTTP Headers for Scripting Syntax) affecting Github.com/oauth2 proxy/oauth2 proxy/v7 libraries in the Go ecosystem. The issue involves oauth2-proxy is vulnerable to header smuggling via underscore leading to potential privilege escalation. Remediation is available by upgrading affected packages to version 7.13.0.

CVE-2025-64484 at a Glance

CVE Identifier CVE-2025-64484
GHSA Identifier GHSA-vjrc-mh2v-45x6
Severity HIGH
CVSS v3.1 Base Score 8.5
CWE Classification CWE-644: Improper Neutralization of HTTP Headers for Scripting Syntax
Affected Product Github.com/oauth2 proxy/oauth2 proxy/v7
Package Ecosystem Go
Published Date
Last Updated

Security Impact

CVSS: 8.5

The security impact metrics below are parsed directly from the CVSS v3.1 vector string (CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:L/A:N).

Attack Vector Network (AV:N)
Attack Complexity Low (AC:L)
Privileges Required Low (PR:L)
User Interaction None (UI:N)
Scope Changed (S:C)
Confidentiality High (C:H)
Integrity Low (I:L)
Availability None (A:N)

How to Fix CVE-2025-64484

To remediate this vulnerability, upgrade all affected Github.com/oauth2 proxy/oauth2 proxy/v7 dependencies to a patched release. Both direct and transitive dependencies should be checked, as frameworks or security libraries may pull in vulnerable versions transitively.

github.com/oauth2-proxy/oauth2-proxy/v7 fixed: 7.13.0
Upgrade github.com/oauth2-proxy/oauth2-proxy/v7 to 7.13.0
Verify Direct and Transitive Dependencies

Run the following command in your project directory to verify that all resolved dependencies use the patched release:

inspect dependencies for github.com/oauth2-proxy/oauth2-proxy/v7

How to Check if You Are Affected

To determine whether your application is affected by CVE-2025-64484, inspect your project dependencies for Github.com/oauth2 proxy/oauth2 proxy/v7:

inspect dependencies for github.com/oauth2-proxy/oauth2-proxy/v7

Analyze the terminal output to locate any version of Github.com/oauth2 proxy/oauth2 proxy/v7 in your dependency tree. If any resolved version matches the vulnerable ranges listed in the table below (for example, versions earlier than 7.13.0), your application is affected.

Note: Verify declared build manifests and deployed runtime container environments.

Technical Details

Vulnerability Mechanism & Technical Analysis

This vulnerability is classified under CWE-644: Improper Neutralization of HTTP Headers for Scripting Syntax, where the product does not neutralize or incorrectly neutralizes web scripting syntax in http headers that can be used by web browser components that can process raw headers, such as flash. In Github.com/oauth2 proxy/oauth2 proxy/v7, software state validation or input boundaries are circumvented during processing. Review the official source advisory statement below for specific affected components, classes, and reproduction details.

Source Advisory Statement

### Impact All deployments of OAuth2 Proxy in front of applications that normalize underscores to dashes in HTTP headers (e.g., WSGI-based frameworks such as Django, Flask, FastAPI, and PHP applications). Authenticated users can inject underscore variants of X-Forwarded-* headers that bypass the proxy’s filtering logic, potentially escalating privileges in the upstream app. OAuth2 Proxy authentication/authorization itself is not compromised. ### Patches This change mitigates a request header smuggling vulnerability where an attacker could bypass header stripping by using different capitalization or replacing dashes with underscores. The problem has been patched with v7.13.0. By default all specified headers will now be normalized, meaning that both capitalization and the use of underscores (_) versus dashes (-) will be ignored when matching headers to be stripped. For example, both `X-Forwarded-For` and `X_Forwarded-for` will now be treated as equivalent and stripped away. However, if users have a rationale for keeping a similar-looking header and don't want to strip it, a new configuration field for headers managed through AlphaConfig called InsecureSkipHeaderNormalization has been introduced : ```golang // Header represents an individual header that will be added to a request or // response header. type Header struct { // Name is the header name to be used for this set of values. // Names should be unique within a list of Headers. Name string `json:"name,omitempty"` // PreserveRequestValue determines whether any values for this header // should be preserved for the request to the upstream server. // This option only applies to injected request headers. // Defaults to false (headers that match this header will be stripped). PreserveRequestValue bool `json:"preserveRequestValue,omitempty"` // InsecureSkipHeaderNormalization disables normalizing the header name // According to RFC 7230 Section 3.2 there aren't any rules about // capitalization of header names, but the standard practice is to use // Title-Case (e.g. X-Forwarded-For). By default, header names will be // normalized to Title-Case and any incoming headers that match will be // treated as the same header. Additionally underscores (_) in header names // will be converted to dashes (-) when normalizing. // Defaults to false (header names will be normalized). InsecureSkipHeaderNormalization bool `json:"InsecureSkipHeaderNormalization,omitempty"` // Values contains the desired values for this header Values []HeaderValue `json:"values,omitempty"` } ``` ### Workarounds Ensure filtering and processing logic in upstream services don't treat underscores and hyphens in Headers the same way.

CVE-2025-64484 Affected Github.com/oauth2 proxy/oauth2 proxy/v7 Versions

1 component(s)
Fixed Versions:
7.13.0
Product / Package Ecosystem Affected Versions Fixed Version
github.com/oauth2-proxy/oauth2-proxy/v7
Go
< 7.13.0
7.13.0

References

Frequently Asked Questions

What is CVE-2025-64484?
CVE-2025-64484 is a security vulnerability in Github.com/oauth2 proxy/oauth2 proxy/v7 involving OAuth2-Proxy is vulnerable to header smuggling via underscore leading to potential privilege escalation under CWE-644: Improper Neutralization of HTTP Headers for Scripting Syntax.
Which Github.com/oauth2 proxy/oauth2 proxy/v7 versions are affected?
Affected versions include releases prior to 7.13.0 across affected packages: github.com/oauth2-proxy/oauth2-proxy/v7.
What version fixes CVE-2025-64484?
Upgrading to 7.13.0 (or the latest patched release for your respective branch) resolves the vulnerability.
Is github.com/oauth2-proxy/oauth2-proxy/v7 affected?
Yes, github.com/oauth2-proxy/oauth2-proxy/v7 is affected in releases prior to 7.13.0. Upgrade your dependency to 7.13.0 or later.
What is the CVSS score of CVE-2025-64484?
CVE-2025-64484 has a CVSS v3.1 base score of 8.5 (HIGH) with vector string CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:L/A:N.
What CWE is associated with CVE-2025-64484?
CVE-2025-64484 is classified under CWE-644: Improper Neutralization of HTTP Headers for Scripting Syntax (The product does not neutralize or incorrectly neutralizes web scripting syntax in HTTP headers that can be used by web browser components that can process raw headers, such as Flash.).
How can I check Go dependencies for CVE-2025-64484?
Run the dependency tree command: 'inspect dependencies for github.com/oauth2-proxy/oauth2-proxy/v7'. This command lists direct and transitive dependencies in your build configuration so you can verify if a vulnerable version is resolved.
Machine-readable OSV JSON OSV v1.5 Schema
Normalized schema output
{
  "schema_version" : "1.4.0",
  "id" : "GHSA-vjrc-mh2v-45x6",
  "modified" : "2025-11-17T21:48:56Z",
  "published" : "2025-11-12T21:42:36Z",
  "aliases" : [ "CVE-2025-64484" ],
  "summary" : "OAuth2-Proxy is vulnerable to header smuggling via underscore leading to potential privilege escalation",
  "details" : "### Impact\nAll deployments of OAuth2 Proxy in front of applications that normalize underscores to dashes in HTTP headers (e.g., WSGI-based frameworks such as Django, Flask, FastAPI, and PHP applications).\n\nAuthenticated users can inject underscore variants of X-Forwarded-* headers that bypass the proxy’s filtering logic, potentially escalating privileges in the upstream app. OAuth2 Proxy authentication/authorization itself is not compromised.\n\n### Patches\n\nThis change mitigates a request header smuggling vulnerability where an attacker could bypass header stripping by using different capitalization or replacing dashes with underscores. The problem has been patched with v7.13.0.\n\nBy default all specified headers will now be normalized, meaning that both capitalization and the use of underscores (_) versus dashes (-) will be ignored when matching headers to be stripped. For example, both `X-Forwarded-For` and `X_Forwarded-for` will now be treated as equivalent and stripped away.\n\nHowever, if users have a rationale for keeping a similar-looking header and don't want to strip it, a new configuration field for headers managed through AlphaConfig called InsecureSkipHeaderNormalization has been introduced :\n\n```golang\n// Header represents an individual header that will be added to a request or\n// response header.\ntype Header struct {\n\t// Name is the header name to be used for this set of values.\n\t// Names should be unique within a list of Headers.\n\tName string `json:\"name,omitempty\"`\n\n\t// PreserveRequestValue determines whether any values for this header\n\t// should be preserved for the request to the upstream server.\n\t// This option only applies to injected request headers.\n\t// Defaults to false (headers that match this header will be stripped).\n\tPreserveRequestValue bool `json:\"preserveRequestValue,omitempty\"`\n\n\t// InsecureSkipHeaderNormalization disables normalizing the header name\n\t// According to RFC 7230 Section 3.2 there aren't any rules about\n\t// capitalization of header names, but the standard practice is to use\n\t// Title-Case (e.g. X-Forwarded-For). By default, header names will be\n\t// normalized to Title-Case and any incoming headers that match will be\n\t// treated as the same header. Additionally underscores (_) in header names\n\t// will be converted to dashes (-) when normalizing.\n\t// Defaults to false (header names will be normalized).\n\tInsecureSkipHeaderNormalization bool `json:\"InsecureSkipHeaderNormalization,omitempty\"`\n\n\t// Values contains the desired values for this header\n\tValues []HeaderValue `json:\"values,omitempty\"`\n}\n```\n\n### Workarounds\nEnsure filtering and processing logic in upstream services don't treat underscores and hyphens in Headers the same way.",
  "severity" : [ {
    "type" : "CVSS_V3",
    "score" : "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:L/A:N"
  } ],
  "affected" : [ {
    "package" : {
      "ecosystem" : "Go",
      "name" : "github.com/oauth2-proxy/oauth2-proxy/v7"
    },
    "ranges" : [ {
      "type" : "ECOSYSTEM",
      "events" : [ {
        "introduced" : "0"
      }, {
        "fixed" : "7.13.0"
      } ]
    } ]
  } ],
  "references" : [ {
    "type" : "WEB",
    "url" : "https://github.com/oauth2-proxy/oauth2-proxy/security/advisories/GHSA-vjrc-mh2v-45x6"
  }, {
    "type" : "ADVISORY",
    "url" : "https://nvd.nist.gov/vuln/detail/CVE-2025-64484"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/oauth2-proxy/oauth2-proxy/commit/f3f30fa976fb4bb97d6345ba4735cb6d86e24f95"
  }, {
    "type" : "WEB",
    "url" : "https://datatracker.ietf.org/doc/html/rfc2616#section-4.2"
  }, {
    "type" : "WEB",
    "url" : "https://datatracker.ietf.org/doc/html/rfc822#section-3.2"
  }, {
    "type" : "PACKAGE",
    "url" : "https://github.com/oauth2-proxy/oauth2-proxy"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/oauth2-proxy/oauth2-proxy/releases/tag/v7.13.0"
  }, {
    "type" : "WEB",
    "url" : "https://github.security.telekom.com/2020/05/smuggling-http-headers-through-reverse-proxies.html"
  }, {
    "type" : "WEB",
    "url" : "https://www.uptimia.com/questions/why-are-http-headers-with-underscores-dropped-by-nginx"
  } ],
  "database_specific" : {
    "cwe_ids" : [ "CWE-644" ],
    "severity" : "HIGH",
    "github_reviewed" : true,
    "github_reviewed_at" : "2025-11-12T21:42:36Z",
    "nvd_published_at" : "2025-11-10T22:15:37Z"
  }
}