- Top reward
- $1,500
- Top severity paid
- Critical
- Assets in scope
- 9
- Public CVEs
- 20
- Last change
- No changes yet
At a glance
What to know before you start testing.
- Pays from $1,500
- for critical bugs.
- Report on Sorona
- Submit through the program page.
- Partial safe harbor
- Some legal protection; read the terms.
- Publish after a fix
- Coordinate the timing with the company.
Rewards
What Sorona lists as the payout for each severity.
| Severity | Relative size | Reward |
|---|---|---|
| Critical | $1,500+ | |
| High | $700+ | |
| Medium | $300+ | |
| Low |
|
$100 $100 / 1 month Claude Max |
- Safe harbor
-
Partial
Sorona will not pursue legal action against you for good-faith research submitted to us in line with this policy. We cannot speak for the upstream project, its vendor, or any third party, and we do not grant authorization on their behalf.
Summarised with AI from the program policy on Sorona, read 12 Nov 2026, and checked word for word against it. Read the original
Scope
9 assets you may test, 6 excluded.
Web 1
- https://caddyserver.com
Products and areas 8
- Automatic HTTPS end to end: ACME issuance, on-demand TLS, the certificate cache and the certmagic code underneath them
- Caddy's policy takes reports through GitHub private vulnerability reporting on caddyserver/caddy and asks for a security bug in the source code of that repository. Misconfigurations, IP spoofing, BGP hijacks and missing or misconfigured HTTP headers are named out of scope, and everything below sits inside what remains
- Every handler module shipped in the standard distribution, including file_server and the templates handler with its template functions such as stripHTML
- forward_auth and its copy_headers handling, the seam where an external authenticator's decision is trusted
- reverse_proxy in full, across every transport it ships, including the FastCGI transport used to reach php-fpm
- The Caddyfile adapter and the JSON configuration structure it produces
- The local admin API on localhost:2019, the boundary that is supposed to keep it local, and the config load and reload path behind it
- The whole request matcher set, including path and host, which decides which handler a request lands on and therefore which access rule applies to it
Out of scope (6)
- IP spoofing, BGP hijacks, and missing or misconfigured HTTP headers, named out of scope verbatim
- Misconfigurations, ruled out explicitly by the project's own policy
- One-liner fixes for non-exploitable crashes, excluded by name in the Patch Rewards rules
- Reports that require an already-compromised system or third-party software
- The Tier 1 ceiling, which Caddy cannot reach: it qualifies at Tier 2 through OSS-Fuzz, not as a named Tier 1 project
- Third-party Caddy modules built with xcaddy, which are not source code from the Caddy repository
Rules
What the policy asks of you, and the bug types it won't reward, quoted from Sorona's policy.
While testing
-
Submit through sorona.xyz.
-
Report privately through GitHub private vulnerability reporting on caddyserver/caddy, with the Caddyfile or JSON config and the request that triggers it
-
The report has to demonstrate a security bug in the source code from that repository.
-
Modules built in with xcaddy are somebody else's code
-
Findings that require an already-compromised system or third-party software are not eligible
-
hold the detail until the advisory is published
Not accepted
-
Misconfigurations
-
IP spoofing
-
BGP hijacks
-
missing or misconfigured HTTP headers
-
Reports that require an already-compromised system or third-party software
-
One-liner fixes for non-exploitable crashes
Summarised with AI from the program policy on Sorona, read 12 Nov 2026, and checked word for word against it. Read the original
Changes
Tracked since 11 Nov 2026. Last checked 1 hour ago.
No changes yet. When the rewards or scope move, you will see it here and in the RSS feed.
Public CVEs
Published vulnerabilities in this vendor's products, from the NVD.
| CVE | Summary | Severity | Published |
|---|---|---|---|
| CVE-2026-52844 | Caddy is an extensible server platform that uses TLS by default. Prior to 2.11.4, on Windows, Caddy path matchers treat /private\secret.txt as outside /private/*, but file_server later resolves the same request path as private\secret.txt on disk. An unauthenticated remote client can bypass Caddy path-scoped auth/deny routes protecting /private/*. This vulnerability is fixed in 2.11.4. | High 7.5 | 23 Jun 2026 |
| CVE-2026-52845 | Caddy is an extensible server platform that uses TLS by default. Prior to 2.11.4, forward_auth copy_headers deletes the exact client-supplied identity header before copying the trusted value from the auth gateway. But when the request later goes through php_fastcgi, Caddy normalizes HTTP headers into CGI variables by replacing - with _. This lets a client send an underscore alias that survives the | High 8.1 | 23 Jun 2026 |
| CVE-2026-52846 | Caddy is an extensible server platform that uses TLS by default. Prior to 2.11.4, Caddy’s stripHTML template function cannot reliably remove all HTML tags from input strings. Certain malformed HTML, such as <<>img src=x onerror=alert()>, can bypass the tag-stripping logic, potentially leaving dangerous content in the output if it is later rendered as HTML. This may allow client-side XSS in cases w | Medium 4.2 | 23 Jun 2026 |
| CVE-2026-45692 | Caddy is an extensible server platform that uses TLS by default. From 2.4.0 until 2.11.3, the authorization layer and the /config traversal layer do not agree on what object the path refers to. In this case, a path authorized for one config object is accepted, but then resolves to a different config object during traversal. This happens because the authorization layer uses string prefix matching a | Medium 5.4 | 23 Jun 2026 |
| CVE-2026-45135 | Caddy is an extensible server platform that uses TLS by default. From 2.7.0 until 2.11.3, the FastCGI transport's splitPos() in modules/caddyhttp/reverseproxy/fastcgi/fastcgi.go misuses golang.org/x/text/search with search.IgnoreCase when the request path contains a non-ASCII byte. Two distinct flaws in that fallback let an attacker mislead Caddy's FastCGI splitting into treating a non-.php (or ot | High 8.1 | 23 Jun 2026 |
| CVE-2026-30851 | Caddy is an extensible server platform that uses TLS by default. From version 2.10.0 to before version 2.11.2, forward_auth copy_headers does not strip client-supplied headers, allowing identity injection and privilege escalation. This issue has been patched in version 2.11.2. | High 8.1 | 7 Mar 2026 |
| CVE-2026-30852 | Caddy is an extensible server platform that uses TLS by default. From version 2.7.5 to before version 2.11.2, the vars_regexp matcher in vars.go:337 double-expands user-controlled input through the Caddy replacer. When vars_regexp matches against a placeholder like {http.request.header.X-Input}, the header value gets resolved once (expected), then passed through repl.ReplaceAll() again (the bug). | Medium 5.5 | 7 Mar 2026 |
| CVE-2026-27585 | Caddy is an extensible server platform that uses TLS by default. Prior to version 2.11.1, the path sanitization routine in file matcher doesn't sanitize backslashes which can lead to bypassing path related security protections. It affects users with specific Caddy and environment configurations. Version 2.11.1 fixes the issue. | Medium 6.9 | 24 Feb 2026 |
| CVE-2026-27586 | Caddy is an extensible server platform that uses TLS by default. Prior to version 2.11.1, two swallowed errors in `ClientAuthentication.provision()` cause mTLS client certificate authentication to silently fail open when a CA certificate file is missing, unreadable, or malformed. The server starts without error but accepts any client certificate signed by any system-trusted CA, completely bypassin | High 8.8 | 24 Feb 2026 |
| CVE-2026-27587 | Caddy is an extensible server platform that uses TLS by default. Prior to version 2.11.1, Caddy's HTTP `path` request matcher is intended to be case-insensitive, but when the match pattern contains percent-escape sequences (`%xx`) it compares against the request's escaped path without lowercasing. An attacker can bypass path-based routing and any access controls attached to that route by changing | High 7.7 | 24 Feb 2026 |
| CVE-2026-27588 | Caddy is an extensible server platform that uses TLS by default. Prior to version 2.11.1, Caddy's HTTP `host` request matcher is documented as case-insensitive, but when configured with a large host list (>100 entries) it becomes case-sensitive due to an optimized matching path. An attacker can bypass host-based routing and any access controls attached to that route by changing the casing of the ` | High 7.7 | 24 Feb 2026 |
| CVE-2026-27589 | Caddy is an extensible server platform that uses TLS by default. Prior to version 2.11.1, 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 | Medium 6.9 | 24 Feb 2026 |
| CVE-2026-27590 | Caddy is an extensible server platform that uses TLS by default. Prior to version 2.11.1, Caddy's FastCGI path splitting logic computes the split index on a lowercased copy of the request path and then uses that byte index to slice the original path. This is unsafe for Unicode because `strings.ToLower()` can change UTF-8 byte length for some characters. As a result, Caddy can derive an incorrect ` | High 8.9 | 24 Feb 2026 |
| CVE-2023-50463 | The caddy-geo-ip (aka GeoIP) middleware through 0.6.0 for Caddy 2, when trust_header X-Forwarded-For is used, allows attackers to spoof their source IP address via an X-Forwarded-For header, which may bypass a protection mechanism (trusted_proxy directive in reverse_proxy or IP address range restrictions). | Medium 6.5 | 10 Dec 2023 |
| CVE-2023-44487 | The HTTP/2 protocol allows a denial of service (server resource consumption) because request cancellation can reset many streams quickly, as exploited in the wild in August through October 2023. | High 7.5 | 10 Oct 2023 |
| CVE-2022-28923 | Caddy v2.4.6 was discovered to contain an open redirection vulnerability which allows attackers to redirect users to phishing websites via crafted URLs. | Medium 6.1 | 6 Feb 2023 |
| CVE-2022-34037 | An out-of-bounds read in the rewrite function at /modules/caddyhttp/rewrite/rewrite.go in Caddy v2.5.1 allows attackers to cause a Denial of Service (DoS) via a crafted URI. Note: This has been disputed as a bug, not a security vulnerability, in the Caddy web server that emerged when an administrator's bad configuration containing a malformed request URI caused the server to return an empty reply | High 7.5 | 22 Jul 2022 |
| CVE-2022-29718 | Caddy v2.4 was discovered to contain an open redirect vulnerability. A remote unauthenticated attacker may exploit this vulnerability to redirect users to arbitrary web URLs by tricking the victim users to click on crafted links. | Medium 6.1 | 2 Jun 2022 |
| CVE-2018-21246 | Caddy before 0.10.13 mishandles TLS client authentication, as demonstrated by an authentication bypass caused by the lack of the StrictHostMatching mode. | Critical 9.8 | 15 Jun 2020 |
| CVE-2018-19148 | Caddy through 0.11.0 sends incorrect certificates for certain invalid requests, making it easier for attackers to enumerate hostnames. Specifically, when unable to match a Host header with a vhost in its configuration, it serves the X.509 certificate for a randomly selected vhost in its configuration. Repeated requests (with a nonexistent hostname in the Host header) permit full enumeration of all | Low 3.7 | 10 Nov 2018 |
Original policy
Copied from sorona.xyz on 12 Nov 2026. The summaries on this page are made from it; the live page may have changed since.
Skip to content What this pays This project runs no bounty of its own. sorona.xyz pays you directly on qualified, reproduced findings. Severity │ sorona.xyz pays Critical │ $1,500+ High │ $700+ Medium │ $300+ Low │ $100 / 1 month Claude Max Submit a vulnerability Separately, for a merged upstream patch : up to $5,000 Google Patch Rewards pays for a patch you get accepted upstream and that stays merged, without reverts, for one month, not for the report. Caddy qualifies at Tier 2 through its OSS-Fuzz integration, so the ceiling is $5,000 and not the $15,000 Tier 1 headline. A maintainer has to accept the change, patches must be one to twelve months old, one-liner fixes for non-exploitable crashes are not rewarded, and sanctions and territory exclusions apply. CVE history 13 Last 12 months 20 Lifetime Access control 35 % Parsing/validation 30 % Auth bypass 20 % Info disclosure 10 % Latest advisories Loading the feed Overview Caddy is the HTTPS-by-default web server of the self-hosting, homelab and small SaaS world: the reverse proxy inside a large share of Docker Compose stacks, the server behind Coolify and CapRover and much of the PaaS-in-a-box category, and the origin of certmagic , whose certificate automation is embedded far beyond Caddy itself. It went from a quiet codebase to the second most CVE-active project in this niche in a single year, 13 of its 20 lifetime CVEs landing in the last twelve months, and those landed directly on authentication boundaries in real deployments: CVE-2026-52845 was a forward_auth copy_headers flaw. Caddy says in writing that it has no budget for bounties, so sorona.xyz pays you directly on qualified, reproduced findings. In scope Caddy's policy takes reports through GitHub private vulnerability reporting on caddyserver/caddy and asks for a security bug in the source code of that repository. Misconfigurations, IP spoofing, BGP hijacks and missing or misconfigured HTTP headers are named out of scope, and everything below sits inside what remains The whole request matcher set, including path and host , which decides which handler a request lands on and therefore which access rule applies to it reverse_proxy in full, across every transport it ships, including the FastCGI transport used to reach php-fpm forward_auth and its copy_headers handling, the seam where an external authenticator's decision is trusted The local admin API on localhost:2019 , the boundary that is supposed to keep it local, and the config load and reload path behind it Automatic HTTPS end to end: ACME issuance, on-demand TLS, the certificate cache and the certmagic code underneath them Every handler module shipped in the standard distribution, including file_server and the templates handler with its template functions such as stripHTML The Caddyfile adapter and the JSON configuration structure it produces Out of scope Third-party Caddy modules built with xcaddy , which are not source code from the Caddy repository Misconfigurations, ruled out explicitly by the project's own policy IP spoofing, BGP hijacks, and missing or misconfigured HTTP headers, named out of scope verbatim Reports that require an already-compromised system or third-party software One-liner fixes for non-exploitable crashes, excluded by name in the Patch Rewards rules The Tier 1 ceiling, which Caddy cannot reach: it qualifies at Tier 2 through OSS-Fuzz, not as a named Tier 1 project Most-valued findings Matcher confusion in path or host that routes a request past an access rule the operator wrote, the highest-value class here because access control is 35 percent of the record and the whole February 2026 run of five CVEs was this shape forward_auth handling that lets a client forge or retain a header the authenticator was supposed to control, turning the external auth decision into an attacker-controlled one. CVE-2026-52845 is that shape FastCGI path handling that lets a crafted request reach a script or file the reverse proxy never intended to expose, the shape of CVE-2026-27590 and CVE-2026-45135 Any path from an ordinary request to the admin API on port 2019, since that interface reconfigures the whole server at runtime Certificate-issuance or on-demand TLS defects that get a certificate issued for, or served on, a name the operator does not control. Caddy's automatic HTTPS is the feature everything else here is built on Program rules Submit through sorona.xyz. This project runs no bounty of its own; we validate, coordinate disclosure with the maintainers, and pay you directly. Report privately through GitHub private vulnerability reporting on caddyserver/caddy, with the Caddyfile or JSON config and the request that triggers it The report has to demonstrate a security bug in the source code from that repository. Modules built in with xcaddy are somebody else's code Misconfigurations are explicitly out of scope, as are IP spoofing, BGP hijacks and missing or misconfigured HTTP headers Findings that require an already-compromised system or third-party software are not eligible If you also want the Google patch money, land the fix upstream yourself and keep it merged without reverts for one month. That is a separate pathway capped at $5,000, since Caddy qualifies at Tier 2 through OSS-Fuzz rather than as a named Tier 1 project Google cannot pay anyone on a sanctions list, in a sanctioned territory, or located in Russia or Belarus Disclosure Coordinated through GitHub private vulnerability reporting, and Caddy publishes the outcome as a GitHub Security Advisory with a patched release; its triage is fast and public, and the 2026 advisory cadence shows an active process with, by the project's own statement, no money attached. Patch Rewards adds no embargo term of its own, so hold the detail until the advisory is published. Safe harbor Sorona will not pursue legal action against you for good-faith research submitted to us in line with this policy. We cannot speak for the upstream project, its vendor, or any third party, and we do not grant authorization on their behalf. You are responsible for understanding and following the laws that apply to you, wherever you are, and for staying within any scope the project has defined. Submit a vulnerability