Numbers
the 255th and 256th releases
5 changes
56 days (total: 9,504)
162 bug-fixes (total: 10,050)
246 commits (total: 31,931)
0 new public libcurl function (total: 93)
0 new curl_easy_setopt() option (total: 304)
0 new curl command line option (total: 258)
92 contributors, 56 new (total: 3,133)
37 authors, 15 new (total: 1,252)
4 security fixes (total: 155)
Versions
I first released 8.7.0, but immediately someone pointed out that one of
the files in the tarballs was broken, so I fixed the issue, created a
new set of tarballs, bumped the version and uploaded the new set. The
new release is 8.7.1 but of course it has the same set of changes. We
just pretend we did not upload 8.7.0.
Release presentation
At 10:00 CET (09:00 UTC) on March 27 I will do a [1]live-streamed
release presentation as usual.
Security
* [2]CVE-2024-2004: Usage of disabled protocol. (low)
When a protocol selection parameter option disables all protocols
without adding any then the default set of protocols would remain
in the allowed set due to an error in the logic for removing
protocols.
* [3]CVE-2024-2398: HTTP/2 push headers memory-leak. (medium)
When an application tells libcurl it wants to allow HTTP/2 server
push, and the amount of received headers for the push surpasses the
maximum allowed limit (1000), libcurl aborts the server push. When
aborting, libcurl inadvertently does not free all the previously
allocated headers and instead leaks the memory.
* [4]CVE-2024-2379: QUIC certificate check bypass with wolfSSL. (low)
libcurl skips the certificate verification for a QUIC connection
under certain conditions, when built to use wolfSSL. If told to use
an unknown/bad cipher or curve, the error path accidentally skips
the verification and returns OK, thus ignoring any certificate
problems.
* [5]CVE-2024-2466: TLS certificate check bypass with mbedTLS.
(medium)
libcurl did not check the server certificate of TLS connections
done to a host specified as an IP address, when built to use
mbedTLS.
Changes
* configure: add –disable-docs flag. This skips the step generating
the manpages, which for many people is unnecessary.
* CURLINFO_USED_PROXY: return bool whether the proxy was used. Useful
when having a filter that only lets some transfers use the proxy.
* write-out: add ‘%{proxy_used}’. The same as above but for the tool.
* digest: support SHA-512/256. Support more modern digest
authentication.
* DoH: add trace configuration. Now you get more DoH tracing/logging
using the general trace mechanism.
Bugfixes
Some of the bugfixes from this cycle that might be worth noticing:
* configure: find libpsl with pkg-config. Makes configure better at
finding libpsl and making use of the correct flags and
sub-dependencies when linking with it.
* configure: find rustls with pkg-config. Similar adjustment but for
rustls.
* cookie: if psl fails, reject the cookie. A run-time failure should
not allow the cookie through.
* curl: exit on config file parser errors. We can insist on the
config file to be correct as otherwise something unintended might
go through.
* curl: make –libcurl output better CURLOPT_*SSLVERSION. This option
takes a bitmask made out of two separate enum ranges.
* file: use xfer buf for file:// transfers. The main effect being
that it can use a larger buffer which can make faster transfers.
* http: better error message for HTTP/1.x response without status
line
* https-proxy: use IP address and cert with ip in alt names.
Connecting to a HTTPS proxy using an IP address with a URL also
using an IP address and those addresses were different versions,
curl would get it wrong.
* mprintf: fix format prefix I32/I64 for windows compilers
* OpenSSL QUIC: adapt to v3.3.x. Pending improvements in OpenSSL is
going to enhance curl’s ability to do HTTP/3 using it.
* paramhlp: fix CRLF-stripping files with “-d @file”. curl would do
wrong for line ending consisting of CR only
* rustls: make curl compile with 0.12.0. Adjusted to use the modified
APIs.
* schannel: fix hang on unexpected server close
* sendf: ignore response body to HEAD. A regression made curl
complain if a HEAD request would get body data.
* smtp: fix STARTTLS. Another regression fixed.
* strtoofft: fix the overflow check. The previous overflow check was
relying on undefined behavior. This is in code only for platforms
without a proper native parser for 64 bit sized numbers.
* TLS: start shutdown only when peer did not already close.
* curl: only parse etag + content-disposition for 2xx.
* curl: accept a blank -w “”
* curl: handle non-existing (out of range) short-options
* curl: change precedence of server Retry-After time
* curl: shorter –help texts. With some polish to make the output look
nicer, in particular “curl –help all”.
* transfer.c: break receive loop in speed limited transfers, To make
libcurl adapt more precisely to the network speed limit set by the
application.
tech, open source and networking
References
1.
https://www.twitch.tv/curlhacker
2.
https://curl.se/docs/CVE-2024-2004.html
3.
https://curl.se/docs/CVE-2024-2398.html
4.
https://curl.se/docs/CVE-2024-2379.html
5.
https://curl.se/docs/CVE-2024-2466.html