CVE-2026-27589: Github.com/caddyserver/caddy/v2 Caddy Is Vulnerable To Cross-origin Vulnerability

MODERATE
Advisory Identifier: GHSA-879p-475x-rqh2
CWE-352
Published
Advisory Summary

CVE-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

CVE Identifier CVE-2026-27589
GHSA Identifier GHSA-879p-475x-rqh2
Severity MODERATE
CVSS v3.1 Base Score N/A
CWE Classification CWE-352: Cross-Site Request Forgery (CSRF)
Affected Product Github.com/caddyserver/caddy/v2
Package Ecosystem Go
Published Date
Last Updated

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.

github.com/caddyserver/caddy/v2 fixed: 2.11.1
Upgrade github.com/caddyserver/caddy/v2 to 2.11.1
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/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

commit: e0f8d9b2047af417d8faf354b675941f3dac9891 (as-of 2026-02-04) channel: GitHub security advisory (per SECURITY.md) ## summary The local caddy admin API (default listen `127.0.0.1:2019`) exposes a state-changing `POST /load` endpoint that replaces the entire running configuration. When 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. ## Severity Medium Justification: - The attacker can apply an arbitrary caddy config (integrity impact) by driving a victim’s local admin API. - 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). ## Affected component - `caddyconfig/load.go: adminLoad.handleLoad` (`/load` admin endpoint) - Pinned callsite: https://github.com/caddyserver/caddy/blob/e0f8d9b2047af417d8faf354b675941f3dac9891/caddyconfig/load.go#L73 ## Reproduction Attachment: `poc.zip` (integration harness) with canonical and control runs. ```bash unzip -q -o poc.zip -d poc cd poc/poc-F-CADDY-ADMIN-LOAD-001 make test ``` Expected output (excerpt): ``` [CALLSITE_HIT]: adminLoad.handleLoad [PROOF_MARKER]: http_code=200 admin_moved=true response_pwned=true ``` Control output (excerpt): ``` [NC_MARKER]: http_code=403 load_blocked=true admin_moved=false response_pwned=false ``` ## Impact An attacker can replace the running caddy configuration via the local admin API. Depending on the deployed configuration/modules, this can: - Change admin listener settings (e.g., move the admin listener to a new address) - Change HTTP server behavior (e.g., alter routes/responses) ## Suggested remediation Ensure cross-origin web content cannot trigger `POST /load` on the local admin API by default, for example by: - Enabling origin enforcement by default for unsafe methods, and/or - Requiring an unguessable token for `/load` (and other state-changing admin endpoints). [poc.zip](https://github.com/user-attachments/files/25079818/poc.zip) [PR_DESCRIPTION.md](https://github.com/user-attachments/files/25079820/PR_DESCRIPTION.md)

CVE-2026-27589 Affected Github.com/caddyserver/caddy/v2 Versions

1 component(s)
Fixed Versions:
2.11.1
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?
CVE-2026-27589 is a security vulnerability in Github.com/caddyserver/caddy/v2 involving Caddy is vulnerable to cross-origin config application via local admin API /load under CWE-352: Cross-Site Request Forgery (CSRF).
Which Github.com/caddyserver/caddy/v2 versions are affected?
Affected versions include releases prior to 2.11.1 across affected packages: github.com/caddyserver/caddy/v2.
What version fixes CVE-2026-27589?
Upgrading to 2.11.1 (or the latest patched release for your respective branch) resolves the vulnerability.
Is github.com/caddyserver/caddy/v2 affected?
Yes, github.com/caddyserver/caddy/v2 is affected in releases prior to 2.11.1. Upgrade your dependency to 2.11.1 or later.
What CWE is associated with CVE-2026-27589?
CVE-2026-27589 is classified under CWE-352: Cross-Site Request Forgery (CSRF) (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.).
How can I check Go dependencies for CVE-2026-27589?
Run the dependency tree command: 'inspect dependencies for github.com/caddyserver/caddy/v2'. 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-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"
  }
}