CVE-2025-47909
High · 7.3CVSS
7.3
EPSS
0.2%
Published
Aug 29, 2025
CISA due date
—
Cloudanix analysis
A configuration setting meant to allow trusted websites accidentally lets attackers on the same network trick users into performing actions they did not intend.
- Exploitation
- Remote Unauthenticated
- Attacker needs
- None
- Complexity
- Low
- Impact
- Data Tampering
- Component
- Library
- Class
- CSRF
- Remediation
- Upgrade
- Effort
- Low
- Patch risk
- Low
What it actually does
TrustedOrigins configuration implicitly trusts both HTTP and HTTPS origins for a given host, bypassing Origin header same-origin checks and enabling network attackers to submit cross-origin forms from the HTTP variant of a trusted host.
Why it matters to the business
Attackers on the local network can trigger unauthorized state-changing actions on behalf of authenticated users, potentially leading to data exposure, account manipulation, or other application-specific impacts until the configuration is corrected.
How an attack unfolds
A network-positioned attacker observes an application that lists a host in TrustedOrigins, registers the matching HTTP origin, serves a malicious form from that HTTP origin, and causes a victim browser to submit it to the HTTPS application endpoint, defeating the post-CVE-2025-24358 synthetic-URL check because only the host component is validated.
How to fix it
Migrate applications to net/http.CrossOriginProtection introduced in Go 1.25. When that is unavailable, adopt the backported module at filippo.io/csrf or the gorilla/csrf drop-in replacement at filippo.io/csrf/gorilla. Audit all TrustedOrigins lists and remove entries that are no longer required.
How to confirm the fix worked
Review source code and configuration for use of TrustedOrigins, confirm that only scheme-aware cross-origin protection is active, and test that HTTP origins of listed hosts are rejected while HTTPS origins continue to function as intended.
Typical attack path
- Identify an application that configures TrustedOrigins with a host name
- Position as a network MitM or compromised HTTP site for that host
- Craft and host a form targeting the HTTPS application endpoint
- Induce an authenticated victim to load and submit the form
- Bypass Origin validation and perform the CSRF action
How to detect it
Search application and web-server logs for POST or state-changing requests whose Origin header contains an HTTP scheme for a host listed in TrustedOrigins; correlate with authentication events and look for form submissions lacking expected Referer or Origin values.
What your security team should do
- Prioritize migration to net/http.CrossOriginProtection or the filippo.io/csrf module within the next sprint
- Scan codebases for TrustedOrigins usage and document required hosts
- Add static-analysis rules to flag continued use of the vulnerable pattern
- Monitor EPSS and KEV updates given the 424 days since publication
The record
Hosts listed in TrustedOrigins implicitly allow requests from the corresponding HTTP origins, allowing network MitMs to perform CSRF attacks. After the CVE-2025-24358 fix, a network attacker that places a form at http://example.com can't get it to submit to https://example.com because the Origin header is checked with sameOrigin against a synthetic URL. However, if a host is added to TrustedOrigins, both its HTTP and HTTPS origins will be allowed, because the schema of the synthetic URL is ignored and only the host is checked. For example, if an application is hosted on https://example.com and adds example.net to TrustedOrigins, a network attacker can serve a form at http://example.net to perform the attack. Applications should migrate to net/http.CrossOriginProtection, introduced in Go 1.25. If that is not an option, a backport is available as a module at filippo.io/csrf, and a drop-in replacement for the github.com/gorilla/csrf API is available at filippo.io/csrf/gorilla.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| Go | github.com/gorilla/csrf | 0 | No fix |
| Go | github.com/gorilla/csrf | 1.7.3 | No fix |
| Chainguard | harbor-2.10 | 0 | 0 |
| Chainguard | harbor-2.10-exporter | 0 | 0 |
| Chainguard | harbor-2.10-jobservice | 0 | 0 |
| Chainguard | harbor-2.10-portal | 0 | 0 |
| Chainguard | harbor-2.10-portal-nginx-config | 0 | 0 |
| Chainguard | harbor-2.10-redis-compat | 0 | 0 |
| Chainguard | harbor-2.10-registryctl | 0 | 0 |
| Chainguard | harbor-2.11 | 0 | 0 |
| Chainguard | harbor-2.11-exporter | 0 | 0 |
| Chainguard | harbor-2.11-jobservice | 0 | 0 |
| Chainguard | harbor-2.11-photon-registry | 0 | 0 |
| Chainguard | harbor-2.11-portal | 0 | 0 |
| Chainguard | harbor-2.11-portal-nginx-config | 0 | 0 |
| Chainguard | harbor-2.11-redis-compat | 0 | 0 |
| Chainguard | harbor-2.11-registryctl | 0 | 0 |
| Chainguard | harbor-2.12 | 0 | 0 |
| Chainguard | harbor-2.12-exporter | 0 | 0 |
| Chainguard | harbor-2.12-jobservice | 0 | 0 |
| Chainguard | harbor-2.12-photon-registry | 0 | 0 |
| Chainguard | harbor-2.12-portal | 0 | 0 |
| Chainguard | harbor-2.12-portal-nginx-config | 0 | 0 |
| Chainguard | harbor-2.12-redis-compat | 0 | 0 |
| Chainguard | harbor-2.12-registryctl | 0 | 0 |
| Chainguard | harbor-2.13 | 0 | 0 |
| Chainguard | harbor-2.13-exporter | 0 | 0 |
| Chainguard | harbor-2.13-jobservice | 0 | 0 |
| Chainguard | harbor-2.13-photon-registry | 0 | 0 |
| Chainguard | harbor-2.13-portal | 0 | 0 |
| Chainguard | harbor-2.13-portal-nginx-config | 0 | 0 |
| Chainguard | harbor-2.13-redis-compat | 0 | 0 |
| Chainguard | harbor-2.13-registryctl | 0 | 0 |
| Chainguard | harbor-2.14 | 0 | 0 |
| Chainguard | harbor-2.14-exporter | 0 | 0 |
| Chainguard | harbor-2.14-jobservice | 0 | 0 |
| Chainguard | harbor-2.14-photon-registry | 0 | 0 |
| Chainguard | harbor-2.14-portal | 0 | 0 |
| Chainguard | harbor-2.14-portal-nginx-config | 0 | 0 |
| Chainguard | harbor-2.14-redis-compat | 0 | 0 |
| Chainguard | harbor-2.14-registryctl | 0 | 0 |
| Chainguard | harbor-fips-2.10 | 0 | 0 |
| Chainguard | harbor-fips-2.10-db | 0 | 0 |
| Chainguard | harbor-fips-2.10-exporter | 0 | 0 |
| Chainguard | harbor-fips-2.10-jobservice | 0 | 0 |
| Chainguard | harbor-fips-2.10-portal | 0 | 0 |
| Chainguard | harbor-fips-2.10-redis-compat | 0 | 0 |
| Chainguard | harbor-fips-2.10-registryctl | 0 | 0 |
| Chainguard | harbor-fips-2.11 | 0 | 0 |
| Chainguard | harbor-fips-2.11-db | 0 | 0 |
| Chainguard | harbor-fips-2.11-exporter | 0 | 0 |
| Chainguard | harbor-fips-2.11-jobservice | 0 | 0 |
| Chainguard | harbor-fips-2.11-photon-registry | 0 | 0 |
| Chainguard | harbor-fips-2.11-portal | 0 | 0 |
| Chainguard | harbor-fips-2.11-redis-compat | 0 | 0 |
| Chainguard | harbor-fips-2.11-registryctl | 0 | 0 |
| Chainguard | harbor-fips-2.12 | 0 | 0 |
| Chainguard | harbor-fips-2.12-db | 0 | 0 |
| Chainguard | harbor-fips-2.12-exporter | 0 | 0 |
| Chainguard | harbor-fips-2.12-jobservice | 0 | 0 |
| Chainguard | harbor-fips-2.12-photon-registry | 0 | 0 |
| Chainguard | harbor-fips-2.12-portal | 0 | 0 |
| Chainguard | harbor-fips-2.12-redis-compat | 0 | 0 |
| Chainguard | harbor-fips-2.12-registryctl | 0 | 0 |
| Chainguard | harbor-fips-2.13 | 0 | 0 |
| Chainguard | harbor-fips-2.13-db | 0 | 0 |
| Chainguard | harbor-fips-2.13-exporter | 0 | 0 |
| Chainguard | harbor-fips-2.13-jobservice | 0 | 0 |
| Chainguard | harbor-fips-2.13-photon-registry | 0 | 0 |
| Chainguard | harbor-fips-2.13-portal | 0 | 0 |
| Chainguard | harbor-fips-2.13-redis-compat | 0 | 0 |
| Chainguard | harbor-fips-2.13-registryctl | 0 | 0 |
| Chainguard | harbor-fips-2.14 | 0 | 0 |
| Chainguard | harbor-fips-2.14-db | 0 | 0 |
| Chainguard | harbor-fips-2.14-exporter | 0 | 0 |
| Chainguard | harbor-fips-2.14-jobservice | 0 | 0 |
| Chainguard | harbor-fips-2.14-photon-registry | 0 | 0 |
| Chainguard | harbor-fips-2.14-portal | 0 | 0 |
| Chainguard | harbor-fips-2.14-redis-compat | 0 | 0 |
| Chainguard | harbor-fips-2.14-registryctl | 0 | 0 |
| Chainguard | zitadel-3 | 0 | 0 |
| Chainguard | zitadel-3-compat | 0 | 0 |
| Chainguard | zitadel-4 | 0 | 0 |
| Chainguard | zitadel-4-compat | 0 | 0 |
| Debian:11 | golang-github-gorilla-csrf | 0 | No fix |
| Debian:12 | golang-github-gorilla-csrf | 0 | No fix |
| Debian:13 | golang-github-gorilla-csrf | 0 | No fix |
| Debian:14 | golang-github-gorilla-csrf | 0 | No fix |
| Wolfi | harbor-2.10 | 0 | 0 |
| Wolfi | harbor-2.10-jobservice | 0 | 0 |
| Wolfi | harbor-2.10-portal | 0 | 0 |
| Wolfi | harbor-2.10-portal-nginx-config | 0 | 0 |
| Wolfi | harbor-2.10-registryctl | 0 | 0 |
| Wolfi | harbor-2.11 | 0 | 0 |
| Wolfi | harbor-2.11-jobservice | 0 | 0 |
| Wolfi | harbor-2.11-portal | 0 | 0 |
| Wolfi | harbor-2.11-portal-nginx-config | 0 | 0 |
| Wolfi | harbor-2.11-registryctl | 0 | 0 |
| Wolfi | harbor-2.12 | 0 | 0 |
| Wolfi | harbor-2.12-jobservice | 0 | 0 |
| Wolfi | harbor-2.12-portal | 0 | 0 |
| Wolfi | harbor-2.12-portal-nginx-config | 0 | 0 |
| Wolfi | harbor-2.12-registryctl | 0 | 0 |
| Wolfi | harbor-2.13 | 0 | 0 |
| Wolfi | harbor-2.13-exporter | 0 | 0 |
| Wolfi | harbor-2.13-jobservice | 0 | 0 |
| Wolfi | harbor-2.13-portal | 0 | 0 |
| Wolfi | harbor-2.13-portal-nginx-config | 0 | 0 |
| Wolfi | harbor-2.13-redis-compat | 0 | 0 |
| Wolfi | harbor-2.13-registryctl | 0 | 0 |
| Wolfi | harbor-2.14 | 0 | 0 |
| Wolfi | harbor-2.14-exporter | 0 | 0 |
| Wolfi | harbor-2.14-jobservice | 0 | 0 |
| Wolfi | harbor-2.14-photon-registry | 0 | 0 |
| Wolfi | harbor-2.14-portal | 0 | 0 |
| Wolfi | harbor-2.14-portal-nginx-config | 0 | 0 |
| Wolfi | harbor-2.14-redis-compat | 0 | 0 |
| Wolfi | harbor-2.14-registryctl | 0 | 0 |
Related vulnerabilities
- CVE-2025-24358 gorilla/csrf provides Cross Site Request Forgery (CSRF) prevention middleware for Go web… Also affects github.com/gorilla/csrf
- CVE-2025-55198 Helm May Panic Due To Incorrect YAML Content Also affects harbor-2.10
- CVE-2025-55199 Helm Charts with Specific JSON Schema Values Can Cause Memory Exhaustion Also affects harbor-2.10
- CVE-2025-53547 Helm vulnerable to Code Injection through malicious chart.yaml content Also affects harbor-2.10
- CVE-2025-32386 Helm Allows A Specially Crafted Chart Archive To Cause Out Of Memory Termination Also affects harbor-2.10
- CVE-2025-32387 Helm Allows A Specially Crafted JSON Schema To Cause A Stack Overflow Also affects harbor-2.10
- CVE-2025-30223 Beego allows Reflected/Stored XSS in Beego's RenderForm() Function Due to Unescaped User… Also affects harbor-2.10
- CVE-2025-15558 Docker CLI for Windows searches for plugin binaries in C:\ProgramData\Docker\cli-plugins… Also affects harbor-2.11