GitHub Advisoryadvisory · Go

GHSA-rq77-p4h8-4crw gorilla/csrf CSRF vulnerability due to broken Referer validation

MEDIUM Published 2025-04-14 Modified 2025-05-01 Official page ↗
Aliases
CVE-2025-24358
Ecosystem
Go
Packages
github.com/gorilla/csrf
Severity
Moderate
CVSS vector
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:P/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N/E:P
Weaknesses
CWE-352
Reviewed
2025-04-14

Affected packages

• Go github.com/gorilla/csrf: < 1.7.3 → fixed in 1.7.3

Description

Summary gorilla/csrf is vulnerable to CSRF via form submission from origins that share a top level domain with the target origin. Details gorilla/csrf does not validate the Origin header against an allowlist. Its executes its validation of the Referer header for cross-origin requests only when it believes the request is being served over TLS. It determines this by inspecting the `r.URL.Scheme` value. However, this value is never populated for "server" requests per the Go spec, and so this check does not run in practice. ``` // URL specifies either the URI being requested (for server // requests) or the URL to access (for client requests). // // For server requests, the URL is parsed from the URI // supplied on the Request-Line as stored in RequestURI. For // most requests, fields other than Path and RawQuery will be // empty. (See RFC 7230, Section 5.3) // // For client requests, the URL's Host specifies the server to // connect to, while the Request's Host field optionally // specifies the Host header value to send in the HTTP // request. URL *url.URL ``` PoC • create trusted origin `target.example.test` protected with gorilla/csrf and served over TLS hosting form on `/submit` • create attacker origin `attack.example.test` served over TLS • attacker exfiltrates token & cookie combination from `target.example.test` • attacker sets exfiltrated cookie with `domain=.example.test and path=/submit` • as the cookie has a more specific path than `/` (the default for CSRF cookies) it will be sent first by the browser on submit to our target origin • submit form from `attack.example.test` with exfiltrated CSRF form token • observe valid form submission as `attack.example.test` Origin / Referer headers are not validated. Impact This vulnerability allows an attacker who has gained XSS on a subdomain or top level domain to perform authenticated form submissions against gorilla/csrf protected targets that share the same top level domain. This bug has existed in gorilla/csrf since its initial release in 2015.

Related

Alias · CVE (1)

  • CVE-2025-24358 gorilla/csrf provides Cross Site Request Forgery (CSRF) prevention middleware for Go web applications & services. vulnerability

Weakness · CWE (1)

  • CWE-352 Cross-Site Request Forgery weakness

References