Repository navigation
chore(deps): update dependency caddy to v2.11.9 - #105
Merged
Merged
Conversation
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #105 +/- ##
=======================================
Coverage 97.35% 97.35%
=======================================
Files 28 28
Lines 1171 1171
=======================================
Hits 1140 1140
Misses 31 31 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Note
This PR body was truncated due to platform limits.
This PR contains the following updates:
2.11.7→2.11.9Release Notes
caddyserver/caddy (caddy)
v2.11.9Compare Source
This is a quick follow-up on top of 2.11.8, to fix a regression it introduced and a few more security issues, mostly in FastCGI. It contains only fixes backported from master, plus a couple of small additions. If you're on 2.11.8 and serve PHP, we recommend upgrading.
Huge thank you to our sponsors for keeping the project alive with resources, and for our maintainers who triage and assist tirelessly in this relentless new age of AI.
Highlights
/wp-admin/, was matched by the directory itself instead of itsindex.php, so it never reached PHP and usually got a 404. This broke WordPress admin pages and other apps that serve an index through a trailing-slash URL. Atry_filespattern now only matches a directory when it ends in/. Thanks @dunglas! (#8352){env.FOO}are no longer lower-cased into{env.foo}before they're looked up, and their values are compared case-insensitively against the request path, like static patterns. Thanks @BenMacha! (#8343)plain_time_formatoption forfile_server browse: sets the time layout of plain-text directory listings (Accept: text/plain). Thanks @steffenbusch! (#8084)weighted_round_robinselection. Thanks @jvoisin! (#7842)httpcaddyfile.Helper.IsNamedRoute()tells a directive whether it's being parsed inside a named route. (#8354)client_authis now a Caddyfile error. When two site blocks share TLS connection policies for the same hostname but set differentclient_auth, the adapter used to keep the first one and silently drop the other, which could quietly remove a stricter mTLS requirement. (#8306)400:%-containing path matchers see) and the decoded path would select different scripts, e.g./public/tool.php%2f..%2f..%2fadmin%2ftool.php(#8357)ADMINI~1) or a:(NTFS alternate data streams) (#8356)envvalues now take precedence over request headers, so a client can no longer overrideHTTP_*variables you set withenv(see below). (#8358)Security fixes
Thank you to everyone who reported responsibly and helped with patches:
HTTP_*variable set with the FastCGI transport's (orphp_fastcgi's)envsubdirective by sending a matching request header, for example choosing the user an application sees inHTTP_X_AUTH_USER. Configured values now win. Reported by @JebeenLee and @Camel4, fixed by @dunglas. (GHSA-q34h-28rj-5hjm, #8358)%-containing path matcher approve one script while another one runs. Thanks @dunglas. (#8357)hostfield sent next to:authoritycould make the application see a different host (HTTP_HOST) than the one Caddy routed the request to. Thanks @dunglas. (#8355)client_authcould be silently dropped when merging TLS connection policies (see above). Thanks @sam-kota. (#8306)go-joseto v4.1.6 for GHSA-mgcc-cww5-fp2q. (#8299)🚨 Notice for Caddy plugin maintainers: Dependabot will probably alert you to the security fixes in Caddy and urge you to upgrade it in your
go.modfile. Please ONLY upgrade the Caddy dependency if there's a change to an exported API your plugin uses.What's Changed
Full Changelog: caddyserver/caddy@v2.11.8...v2.11.9
v2.11.8Compare Source
This patch release is a big batch of bug fixes and security hardening, plus a handful of small additions. This release is cut from our
2.11maintenance branch: fixes are backported from master. We recommend upgrading, especially if you serve PHP or use{host}in file paths.Huge thank you to our sponsors for keeping the project alive with resources, and for our maintainers who triage and assist tirelessly in this relentless new age of AI.
Highlights
timeoutsnow take precedence over the server-wideread_body_idle/write_idle, and nestedtimeoutsuse the innermost one. (#8121)reverse_proxyuploading to a slow upstream) no longer loses the body and fails with 502. (#8125)dispatch_timeoutand FrankenPHP'srequest_body_timeoutwork again. Thanks @dunglas! (#8145, #8284)CAP_NET_BIND_SERVICEis permitted but not effective, Caddy raises it just for binding a privileged port. Packagers can usesetcap cap_net_bind_service=+pinstead of+ep, so Caddy still starts under--cap-drop ALL, OpenShift'srestricted-v2, or systemd units with an emptyCapabilityBoundingSet=. It also follows the kernel'sip_unprivileged_port_startinstead of assuming 1024. (#8102, #8253)log_leveldirective to set the access log level for matching requests, e.g.log_level @healthchecks DEBUG(#8201){time.now.rfc3339}placeholder. Thanks @steadytao! (#8140)notmatcher for TLS connection policies. Thanks @simonether! (#8138)tlsmatcher can be used in CELexpressionmatchers:tls(),tls('complete'),tls('early_data'). Thanks @stackedbyaradhya! (#8088)Strict-Transport-Securityviaheader) are no longer lost when the upstream sends a 1xx response first, like 103 Early Hints (#8169)expressions inlb_retry_matchno longer retry successful responses (a regression since 2.11.3) (#8168)weighted_round_robinno longer panics with fewer weights than upstreams, and no longer picks an unavailable upstream when there's only one weight;random_choosepicks the least loaded host when all are busy (#8159, #8320, #8160)request_buffers/response_buffers unlimited, a body that fails partway is no longer treated as complete (#8207)handle_responsestatus isn't a number. Thanks @Version2beta and @BenMacha! (#8269, #8318)encode:If-None-Matchlists and weak tags get 304s properly (#8128), HEAD responses no longer get a bogusContent-Length(#8150), andAccept-Encoding/Cache-Controlsplit across several header lines are all taken into account, with faster header handling in the proxy too. Thanks @Indra55, @jayhemnani9910 and @dunglas! (#8025)Locationresponse without aStatusis now a 302 redirect, as CGI specifies (#8209), and an app that writes more than its declaredContent-Length(like a PHP warning after the page) no longer corrupts HTTP/1.1 responses or kills HTTP/2 connections. Thanks @Sulaiman-Dauda! (#8212)client_authmodesrequestandverify_if_givenno longer reject clients without a certificate when verifiers are configured (#8251)matchblock are all applied, not just the first. Thanks @simonether! (#8137)network_proxysurvives re-provisioning (#8288)caddy runprints the error again when startup fails, instead of silently exiting with code 1. Thanks @IndraGunawan! (#8180)try_files {path} {path}.html?{query} =404returning 404 for everything (#8189)handle_errorsblocks andvarsnow follow Caddyfile order (#8195, #8197)?Fielddefault in aheaderblock is checked on its own, and respectsmatch(#8217)importshows the real OS error for files it can't read (#8163), negative{args[...]}indices no longer panic (#8316), and very long heredoc markers no longer make parsing crawl (#8203, #8249)file_server: a path below a regular file (/index.php/foo) is a 404 again and works withpass_thru(#8131);browsehandles symlinks in directories with escaped names (#8152) and offsets past the end (#8213)templates: template errors no longer keep staleContent-Length/Etagheaders (#8149), bodyless responses no longer getContent-Length: 0(which broke iOS PWAs) (#8153), plus fixes forhumanizetime layouts with colons and front matter closed with...(#8215, #8259)includeof a parent namespace includes its child modules (#8221),dir_mode from_fileno longer creates unusable directories (#8225), and log routing to a site's logger ignores Host case (#8176)access_control, a request is allowed if any permission entry permits it, not just the first (#8317), andCache-Control: must-revalidateis recognized alongside other directives (#8330)caddy hash-passwordhandles Windows line endings and input without a final newline (#8227), a data race in thebasic_authcache is gone (#8278), the Windows service no longer gets stuck inSTART_PENDING(#8274), anduristrip_prefix/strip_suffixhandle percent-escapes and literal%correctly (#8005, #8345)..) are rejected with400on every protocol, before any route runs. Before, HTTP/2 and HTTP/3 also accepted hosts containing/or\. (#8328)request_bodymax_sizenow rejects a request with413as soon as itsContent-Lengthis over the limit, even if nothing would have read the body. (#8337)php_fastcgisites without anindex.php: requests for paths that don't exist are now sent to PHP asindex.php, as the documentedfirst_exist_fallbacktry policy always promised, instead of falling through tofile_serverand returning404. Also,PATH_INFOandDOCUMENT_URIare now derived from the normalized path (repeated slashes merged,.segments removed);REQUEST_URIis unchanged.try_files/filecandidate ending in/only matches a directory, so/foo.txt/no longer matches the file/foo.txt. (#8326)encodenow compresses responses even when the request hasCache-Control: no-transform(a response'sno-transformis still honored), and responses that could have been encoded always getVary: Accept-Encoding. To keep the old behavior:@transformable not header Cache-Control *no-transform*andencode @transformable. Malformed forms likeno-cache; no-transformno longer disable compression. (#8301, #8025)expressionline in the same matcher set (combine them with&&) (#8183)curvesorprotocol_min/protocol_maxnames, likeTLS1.3instead oftls1.3, which used to be silently ignored (#8266)sni_regexpin a TLS policymatchblock (#8137)ip_masklog filter sizes out of range, like33for IPv4 (#8241)basic_authusernames that end up identical after placeholder expansion (#8315)handle_errorsblocks with status codes and forvarswith non-path matchers. If you had overlapping codes or set the same variable twice, a different block or value may now win. (#8195, #8197)Security fixes
Thank you to everyone who reported responsibly and helped with patches:
Host/:authorityvalue with dot segments or slashes could escape the intended directory when used in file paths, likeroot /srv/sites/{host}, and withphp_fastcgieven execute files outside it. Such hosts are now rejected (see above). Thanks @dunglas. (GHSA-r766-rf9f-588h, #8328)SCRIPT_FILENAMEis now derived from the same normalized path that path matchers see, so a route protected by a path matcher can't be made to run a different script, e.g. with/admin.php/../../other.php. Thephp_fastcgirewrite also always runs now (see above). Thanks @pamnario. (GHSA-f278-mgc7-46j3)filematcher no longer resolves paths like/.env/./to the regular file, which bypassed path rules such aspath *.env. Thanks @dunglas. (GHSA-25cw-38mq-q7m6, #8326){http.matchers.file.remainder}is now escaped before rewriting, so double-encoded path info (like..%252f) can't turn into../after path rules have run. Thanks @dunglas. (GHSA-69hv-5jfc-mvmv, #8325)HOMEnorXDG_DATA_HOMEis set, Caddy's data directory falls back to./caddy, and afile_serverserving the working directory could expose certificates and private keys. That directory is now always hidden. Thanks @dunglas. (GHSA-jf74-f69g-hcj9, #8327)php_fastcgitrailing-slash redirect for directories with anindex.phpcan no longer be turned into an open redirect to another site. Thanks @sam-kota. (#8285)hideno longer show up inbrowselistings, and hiddenprecompressedsidecars are no longer served. Thanks @agammann. (#8155)copy_response_headersinhandle_response, completing the fix for CVE-2026-55458. Thanks @SssiiiSssii1 and @tomholford. (GHSA-8qx7-j2v2-x6q5, #8256, #8270)querylog filter now parses request URIs like the server does, so parameters after a#are redacted too. Thanks @jayhemnani9910. (#8255)🚨 Notice for Caddy plugin maintainers: Dependabot will probably alert you to the security fixes in Caddy and urge you to upgrade it in your
go.modfile. Please ONLY upgrade the Caddy dependency if there's a change to an exported API your plugin uses.Thank you to everyone who was involved in this release, especially our 28 new contributors! 🎉
What's Changed
ip_maskCIDRs by @jayhemnani9910 in #8241queryfilter like the server does by @jayhemnani9910 in #8255New Contributors
Configuration
📅 Schedule: (UTC)
* 0-3 * * 1)🚦 Automerge: Enabled.
♻ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.