CVE-2026-27589: Github.com/caddyserver/caddy/v2 Caddy Is Vulnerable To Cross-origin Vulnerability
MODERATECVE-2026-27589 is a MODERATE caddy is vulnerable to cross-origin vulnerability (CWE-352: Cross-Site Request Forgery (CSRF)) affecting Github.com/caddyserver/caddy/v2 libraries in the Go ecosystem. The issue involves caddy is vulnerable to cross-origin config application via local admin api /load. Remediation is available by upgrading affected packages to version 2.11.1.
CVE-2026-27589 at a Glance
How to Fix CVE-2026-27589
To remediate this vulnerability, upgrade all affected Github.com/caddyserver/caddy/v2 dependencies to a patched release. Both direct and transitive dependencies should be checked, as frameworks or security libraries may pull in vulnerable versions transitively.
Upgrade github.com/caddyserver/caddy/v2 to 2.11.1
Run the following command in your project directory to verify that all resolved dependencies use the patched release:
inspect dependencies for github.com/caddyserver/caddy/v2
How to Check if You Are Affected
To determine whether your application is affected by CVE-2026-27589, inspect your project dependencies for Github.com/caddyserver/caddy/v2:
inspect dependencies for github.com/caddyserver/caddy/v2
Analyze the terminal output to locate any version of Github.com/caddyserver/caddy/v2 in your dependency tree. If any resolved version matches the vulnerable ranges listed in the table below (for example, versions earlier than 2.11.1), 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-352: Cross-Site Request Forgery (CSRF), where the web application does not, or cannot, sufficiently verify whether a request was intentionally provided by the user who sent the request, which could have originated from an unauthorized actor. In Github.com/caddyserver/caddy/v2, 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
CVE-2026-27589 Affected Github.com/caddyserver/caddy/v2 Versions
1 component(s)| Product / Package | Ecosystem | Affected Versions | Fixed Version |
|---|---|---|---|
|
github.com/caddyserver/caddy/v2
|
Go |
< 2.11.1
|
2.11.1
|
References
Frequently Asked Questions
What is CVE-2026-27589?
Which Github.com/caddyserver/caddy/v2 versions are affected?
What version fixes CVE-2026-27589?
Is github.com/caddyserver/caddy/v2 affected?
What CWE is associated with CVE-2026-27589?
How can I check Go dependencies for CVE-2026-27589?
Machine-readable OSV JSON
OSV v1.5 Schema
{
"schema_version" : "1.4.0",
"id" : "GHSA-879p-475x-rqh2",
"modified" : "2026-02-27T19:54:36Z",
"published" : "2026-02-24T20:37:35Z",
"aliases" : [ "CVE-2026-27589" ],
"summary" : "Caddy is vulnerable to cross-origin config application via local admin API /load ",
"details" : "commit: e0f8d9b2047af417d8faf354b675941f3dac9891 (as-of 2026-02-04)\nchannel: GitHub security advisory (per SECURITY.md)\n\n## summary\n\nThe local caddy admin API (default listen `127.0.0.1:2019`) exposes a state-changing `POST /load` endpoint that replaces the entire running configuration.\n\nWhen origin enforcement is not enabled (`enforce_origin` not configured), the admin endpoint accepts cross-origin requests (e.g., from attacker-controlled web content in a victim browser) and applies an attacker-supplied JSON config. this can change the admin listener settings and alter HTTP server behavior without user intent.\n\n## Severity\n\nMedium\n\nJustification:\n- The attacker can apply an arbitrary caddy config (integrity impact) by driving a victim’s local admin API.\n- Exploitation requires a victim running caddy with the admin API enabled and visiting an attacker-controlled page (or otherwise issuing the request from an untrusted local client).\n\n## Affected component\n\n- `caddyconfig/load.go: adminLoad.handleLoad` (`/load` admin endpoint)\n- Pinned callsite: https://github.com/caddyserver/caddy/blob/e0f8d9b2047af417d8faf354b675941f3dac9891/caddyconfig/load.go#L73\n\n## Reproduction\n\nAttachment: `poc.zip` (integration harness) with canonical and control runs.\n\n```bash\nunzip -q -o poc.zip -d poc\ncd poc/poc-F-CADDY-ADMIN-LOAD-001\nmake test\n```\n\nExpected output (excerpt):\n\n```\n[CALLSITE_HIT]: adminLoad.handleLoad\n[PROOF_MARKER]: http_code=200 admin_moved=true response_pwned=true\n```\n\nControl output (excerpt):\n\n```\n[NC_MARKER]: http_code=403 load_blocked=true admin_moved=false response_pwned=false\n```\n\n## Impact\n\nAn attacker can replace the running caddy configuration via the local admin API. Depending on the deployed configuration/modules, this can:\n- Change admin listener settings (e.g., move the admin listener to a new address)\n- Change HTTP server behavior (e.g., alter routes/responses)\n\n## Suggested remediation\n\nEnsure cross-origin web content cannot trigger `POST /load` on the local admin API by default, for example by:\n- Enabling origin enforcement by default for unsafe methods, and/or\n- Requiring an unguessable token for `/load` (and other state-changing admin endpoints).\n\n[poc.zip](https://github.com/user-attachments/files/25079818/poc.zip)\n[PR_DESCRIPTION.md](https://github.com/user-attachments/files/25079820/PR_DESCRIPTION.md)",
"severity" : [ {
"type" : "CVSS_V4",
"score" : "CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N/E:P"
} ],
"affected" : [ {
"package" : {
"ecosystem" : "Go",
"name" : "github.com/caddyserver/caddy/v2"
},
"ranges" : [ {
"type" : "ECOSYSTEM",
"events" : [ {
"introduced" : "0"
}, {
"fixed" : "2.11.1"
} ]
} ]
} ],
"references" : [ {
"type" : "WEB",
"url" : "https://github.com/caddyserver/caddy/security/advisories/GHSA-879p-475x-rqh2"
}, {
"type" : "ADVISORY",
"url" : "https://nvd.nist.gov/vuln/detail/CVE-2026-27589"
}, {
"type" : "WEB",
"url" : "https://github.com/caddyserver/caddy/commit/65e0ddc22137bbbaa68c842ae0b98d0548504545"
}, {
"type" : "PACKAGE",
"url" : "https://github.com/caddyserver/caddy"
}, {
"type" : "WEB",
"url" : "https://github.com/caddyserver/caddy/releases/tag/v2.11.1"
}, {
"type" : "WEB",
"url" : "https://github.com/user-attachments/files/25079818/poc.zip"
}, {
"type" : "WEB",
"url" : "https://github.com/user-attachments/files/25079820/PR_DESCRIPTION.md"
}, {
"type" : "WEB",
"url" : "https://pkg.go.dev/vuln/GO-2026-4537"
} ],
"database_specific" : {
"cwe_ids" : [ "CWE-352" ],
"severity" : "MODERATE",
"github_reviewed" : true,
"github_reviewed_at" : "2026-02-24T20:37:35Z",
"nvd_published_at" : "2026-02-24T17:29:04Z"
}
}