#17656 closed enhancement (fixed)
curl-7.88.1
| Reported by: | Douglas R. Reno | Owned by: | Bruce Dubbs |
|---|---|---|---|
| Priority: | elevated | Milestone: | 11.3 |
| Component: | BOOK | Version: | git |
| Severity: | normal | Keywords: | |
| Cc: |
Description
New minor version
Sending an email to the lists for a freeze break request due to security issues
Change History (8)
comment:1 by , 3 years ago
| Summary: | curl-7.88.0 → curl-7.88.1 |
|---|
comment:3 by , 3 years ago
I think Bruce plans on bringing this back to 11.3 along with a couple other packages
comment:4 by , 3 years ago
| Milestone: | 11.4 → 11.3 |
|---|---|
| Owner: | changed from to |
| Status: | new → assigned |
comment:5 by , 3 years ago
curl and libcurl 7.88.1
This release includes the following changes:- build-openssl.bat: keep OpenSSL 3 engine binaries [20]
- cmake: fix Windows check for CryptAcquireContext
- connnect: fix timeout handling to use full duration
- curl: make --silent work stand-alone
- curl_setup: Suppress OpenSSL 3 deprecation warnings
- CURLOPT_WS_OPTIONS.3: fix the availability version
- GHA: update rustls dependency to 0.9.2
- http2: buffer/pausedata and output flush fix.
- http2: set drain on stream end
- http: include stdint.h more readily
- krb5: silence cast-align warning
- lib1560: add IPv6 canonicalization tests
- os400: correct Curl_os400_sendto()
- remote-header-name.d: mention that filename* is not supported
- runtests: fix "uninitialized value $port"
- setopt: allow HTTP3 when HTTP2 is not defined
- socketpair: allow EWOULDBLOCK when reading the pair check bytes
- socks: allow using DoH to resolve host names
- tests-httpd: add proxy tests
- tests: make sure gnuserv-tls has SRP support before using it
- tests: make the telnet server shut down a socket gracefully
- tool_getparam: make --get a true boolean
- tool_operate: allow debug builds to set buffersize
- urlapi: do the port number extraction without using sscanf()
- urldata: remove
nowfrom struct SingleRequest - not needed
comment:6 by , 3 years ago
| Resolution: | → fixed |
|---|---|
| Status: | assigned → closed |
Fixed at commit 9c85c9a55d33e3b1ed448eb921bc1b39ae33fc6e
comment:7 by , 3 years ago
Release notes for 7.88.0:
Changes:
curl.h: add CURL_HTTP_VERSION_3ONLY
share: add sharing of HSTS cache among handles
src: add --http3-only
tool_operate: share HSTS between handles
urlapi: add CURLU_PUNYCODE
writeout: add %{certs} and %{num_certs}
Bugfixes:
cf-socket: fix build when not HAVE_GETPEERNAME
cf-socket: keep sockaddr local in the socket filters
cfilters:Curl_conn_get_select_socks: use the first non-connected filter
CI: add a workflow to automatically label pull requests
CI: add pytest GHA to CI test/tests-httpd on a HTTP/3 setup
CI: Retry failed downloads to reduce spurious failures
CI: update wolfssl / wolfssh to 5.5.4 / 1.4.12
cmake: bump requirement to 3.7
cmake: check for sendmsg
cmake: delete redundant macro definition `SECURITY_WIN32`
cmake: fix dev warning due to mismatched arg
cmake: fix the snprintf detection
cmake: remove deprecated symbols check
cmake: set SOVERSION also for macOS
cmake: use list APPEND syntax for CMAKE_REQUIRED_DEFINITIONS
cmdline-opts/Makefile: on error, do not leave a partial
CODEOWNERS: remove the peeps mentioned as CI owners
connect: fix access of pointer before NULL check
connect: fix build when not ENABLE_IPV6
connect: fix strategy testing for attempts, timeouts and happy-eyeball
connections: introduce http/3 happy eyeballs
content_encoding: do not reset stage counter for each header
CONTRIBUTE: More formally specify the commit description
cookies: fp is always not NULL
copyright.pl: cease doing year verifications
copyright: update all copyright lines and remove year ranges
curl.1: make help, version and manual sections "custom"
curl.h: allow up to 10M buffer size
curl.h: mark CURLSSLBACKEND_MESALINK as deprecated
curl/websockets.h: extend the websocket frame struct
curl: output warning at --verbose output for debug-enabled version
curl_free.3: fix return type of `curl_free`
curl_global_sslset.3: clarify the openssl situation
curl_log: for failf/infof and debug logging implementations
curl_setup: Disable by default recv-before-send in Windows
curl_version_info.3: fix typo
curl_ws_send.3: clarify how to send multi-frame messages
CURLOPT_HEADERDATA.3: warn DLL users must set write function
CURLOPT_READFUNCTION.3: the callback 'size' arg is always 1
CURLOPT_WRITEFUNCTION.3: fix memory leak in example
dict: URL decode the entire path always
docs/DEPRECATE.md: deprecate gskit
docs: add link to GitHub Discussions
docs: mention indirect effects of --insecure
docs: POSTFIELDSIZE must be set to -1 with read function
doh: ifdef IPv6 code
easyoptions: fix header printing in generation script
escape: hex decode with a lookup-table
escape: use table lookup when adding %-codes to output
examples: remove the curlgtk.c example
fopen: remove unnecessary assignment
ftpserver: lower the DATA connect timeout to speed up torture tests
GHA/macos.yml: bump to gcc-12
GHA/macos: use Xcode_14.0.1 for cmake builds
GHA: add job on Slackware 15.0
GHA: bump ngtcp2 workflow dependencies
GHA: enable websockets in the torture job
GHA: move the quiche job here from zuul
GHA: use designated ngtcp2 and its dependencies versions
haxproxy: send before TLS handhshake
header.d: add a header file example
hsts.d: explain hsts more
hsts: handle adding the same host name again
HTTP/[23]: continue upload when state.drain is set
http2: aggregate small SETTINGS/PRIO/WIN_UPDATE frames
http2: fix compiler warning due to uninitialized variable
http2: minor buffer and error path fixes
http2: when using printf %.*s, the length arg must be 'int'
HTTP3: mention what needs to be in place to remove EXPERIMENTAL label
http: add additional condition for including stdint.h
http: decode transfer encoding first
http: fix "part of conditional expression is always false"
http: remove the trace message "Mark bundle... multiuse"
http_aws_sigv4: remove typecasts from HMAC_SHA256 macro
http_proxy: do not assign data->req.p.http use local copy
INSTALL: document how to use multiple TLS backends
lib670: make test.h the first include
lib: connect/h2/h3 refactor
lib: fix typos
lib: fix typos in comments which repeat a word
libssh2: try sha2 algos for hostkey methods
libtest: add a sleep macro for Windows
Linux CI: update some dependecies to latest tag
Makefile.mk: fix wolfssl and mbedtls default paths
man pages: call the custom user pointer 'clientp' consistently
md4: fix build with GnuTLS + OpenSSL v1
misc: fix grammar and spelling
misc: fix spelling
misc: reduce struct and struct field sizes
msh3: add support for request payload
msh3: update to v0.5 Release
msh3: update to v0.6
multi: stop sending empty HTTP/3 UDP datagrams on Windows
multihandle: turn bool struct fields into bits
ngtcp2: add CURLOPT_SSL_CTX_FUNCTION support for openssl+wolfssl
ngtcp2: fix the build without 'sendmsg'
ngtcp2: replace removed define and stop using removed function
no-clobber.d: only use long form options in man page text
noproxy: support for space-separated names is deprecated
nss: implement data_pending method
openldap: fix missing sasl symbols at build in specific configs
openssl: adapt to boringssl's error code type
openssl: don't ignore CA paths when using Windows CA store (redux)
openssl: don't log raw record headers
openssl: make the BIO_METHOD a local variable in the connection filter
openssl: only use CA_BLOB if verifying peer
openssl: remove attached easy handles from SSL instances
openssl: store the CA after first send (ClientHello)
os400: fixes to make-lib.sh and initscript.sh
packages: remove Android, update README
release-notes.pl: check fixes/closes lines better
Revert "x509asn1: avoid freeing unallocated pointers"
runtest.pl: add expected fourth return value
runtests: tear down http2/http3 servers when https server is stopped
runtests: consider warnings fatal and error on them
runtests: fix detection of TLS backends
runtests: make 'mbedtls' a testable feature
rustls: improve error messages
scripts/delta: show percent of number of files changed since last tag
scripts: fix Appveyor job detection in cijobs.pl
scripts: set file mode +x on all perl and shell scripts
sectransp: fix for incomplete read/writes
SECURITY-PROCESS.md: document severity levels
setopt: Address undefined behaviour by checking for null
setopt: move the SHA256 opt within #ifdef libssh2
setopt: use >, not >=, when checking if uarg is larger than uint-max
smb: return error on upload without size
socketpair: allow localhost MITM sniffers
strdup: name it Curl_strdup
system.h: assume OS400 is always built with ILEC compiler
test1560: use a UTF8-using locale when run
test2304: remove stdout verification
tests-httpd: basic infra to run curl against an apache httpd
tests: add 3 new HTTP/2 test cases, plus https: support for nghttpx
tests: add tests for HTTP/2 and HTTP/3 to verify the header API
tests: avoid use of sha1 in certificates
tls: fixes for wolfssl + openssl combo builds
tool_getparam: fix hiding of command line secrets
tool_operate: fix `CURLOPT_SOCKS5_GSSAPI_NEC` type
tool_operate: fix error codes during DOS filename sanitize
tool_operate: fix error codes on bad URL & OOM
tool_operate: fix headerfile writing
tool_operate: repair --rate
transfer: break the read loop when RECV is cleared
typecheck: accept expressions for option/info parameters
url: fix part of conditional expression is always true
urlapi: avoid Curl_dyn_addf() for hex outputs
urlapi: fix part of conditional expression is always true: qlen
urlapi: skip path checks if path is just "/"
urlapi: skip the extra dedotdot alloc if no dot in path
urldata: cease storing TLS auth type
urldata: make 'ftp_create_missing_dirs' depend on FTP || SFTP
urldata: make set.http200aliases conditional on HTTP being present
urldata: move the cookefilelist to the 'set' struct
urldata: remove unused struct fields, made more conditional
vquic: stabilization and improvements
vtls: fix hostname handling in filters
vtls: manage current easy handle in nested cfilter calls
vtls: use ALPN HTTP/1.0 when HTTP/1.0 is used
winbuild: document that arm64 is supported
windows: always use curl's basename() implementation
wolfssl: remove deprecated post-quantum algorithms
workflows/linux.yml: merge 3 common packages
write-out.d: add 'since version' to %{header_json} documentation
write-out.d: clarify Windows % symbol escaping
ws: fix autoping handling
ws: fix multiframe send handling
ws: fix recv of larger frames
ws: remove bad assert
ws: unstick connect-only shutdown
ws: use %Ou for outputting curl_off_t with info()
x509asn1: fix compile errors and warnings
zuul: stop using this CI service
CVE-2023-23916
CVE-2023-23916: HTTP multi-header compression denial of service
Project curl Security Advisory, February 15th 2023
VULNERABILITY
curl supports "chained" HTTP compression algorithms, meaning that a server response can be compressed multiple times and potentially with different algorithms. The number of acceptable "links" in this "decompression chain" was capped, but the cap was implemented on a per-header basis allowing a malicious server to insert a virtually unlimited number of compression steps simply by using many headers.
The use of such a decompression chain could result in a "malloc bomb", making curl end up spending enormous amounts of allocated heap memory, or trying to and returning out of memory errors.
We are not aware of any exploit of this flaw.
INFO
CVE-2023-23916 was introduced in commit dbcced8e32b50c06, shipped in curl 7.57.0.
Automatic decompression of content needs to be enabled per transfer. It is disabled by default and then nothing bad happens.
This flaw exists with one or more of the compression algorithms built-in (gzip, brotli or zstd), but the individual algorithms have different "exploding" powers.
Both Content-Encoding: and Transfer-Encoding: are affected over all HTTP versions.
This flaw is almost identical to the previous CVE-2022-32206: HTTP compression denial of service, as the fix for that earlier flaw was incomplete.
CWE-770: Allocation of Resources Without Limits or Throttling
Severity: Medium
AFFECTED VERSIONS
Affected versions: curl 7.57.0 to and including 7.87.0
Not affected versions: curl < 7.57.0 and curl > 7.87.0
libcurl is used by many applications, but not always advertised as such!
THE SOLUTION
The amount of accepted "chained" algorithms is now capped to 5 in total, independently of the number of headers.
A fix for CVE-2023-23916
RECOMMENDATIONS
A - Upgrade curl to version 7.88.0
B - Apply the patch to your local version
C - Do not enable automatic decompression
TIMELINE
This issue was reported to the curl project on January 8, 2023. We contacted distros@openwall on February 7, 2023.
libcurl 7.88.0 was released on February 15 2023, coordinated with the publication of this advisory.
CVE-2023-23915
CVE-2023-23915: HSTS amnesia with --parallel
Project curl Security Advisory, February 15 2023
VULNERABILITY
curl's HSTS cache saving behaves wrongly when multiple URLs are requested in parallel.
Using its HSTS support, curl can be instructed to use HTTPS instead of using an insecure clear-text HTTP step even when HTTP is provided in the URL. This HSTS mechanism would however surprisingly fail when multiple transfers are done in parallel as the HSTS cache file gets overwritten by the most recently completed transfer.
A later HTTP-only transfer to the earlier host name would then not get upgraded properly to HSTS.
Reproducible like this:
curl --hsts hsts.txt --parallel https://curl.se https://example.com
curl --hsts hsts.txt http://curl.se
We are not aware of any exploit of this flaw.
INFO
This is a curl command line issue and does not affect libcurl.
This flaw was introduced in commit 7385610d0c7, which was shipped enabled by default from commit d71ff2b9db566b3f in curl 7.77.0.
The Common Vulnerabilities and Exposures (CVE) project has assigned the name CVE-2023-23915 to this issue.
CWE-319: Cleartext Transmission of Sensitive Information
Severity: Low
AFFECTED VERSIONS
Affected versions: curl 7.77.0 to and including 7.87.0 Not affected versions: curl < 7.77.0 and curl >= 7.88.0
curl is used by many applications, but not always advertised as such!
THE SOLUTION
7.88.0 will share the HSTS state properly between transfers, making each subsequent save store a complete state.
RECOMMENDATIONS
A - Upgrade curl to version 7.88.0
B - Apply the patch to your local version
C - Specify all URLs with HTTPS:// and not HTTP://
TIMELINE
This issue was reported to the curl project on December 21, 2022. We contacted distros@openwall on February 7, 2022.
curl 7.88.0 was released on February 15 2023, coordinated with the publication of this advisory.
CVE-2023-23914
CVE-2023-23914: HSTS ignored on multiple requests
Project curl Security Advisory, February 15 2023
VULNERABILITY
curl's HSTS functionality fail when multiple URLs are requested serially.
Using its HSTS support, curl can be instructed to use HTTPS instead of using an insecure clear-text HTTP step even when HTTP is provided in the URL. This HSTS mechanism would however suprisingly be ignored by subsequent transfers when done on the same command line because the state would not be properly carried on.
Reproducible like this:
curl --hsts "" https://curl.se http://curl.se
The first URL returns HSTS information that the second URL fails to take advantage of.
We are not aware of any exploit of this flaw.
INFO
This is a curl command line issue and does not affect libcurl.
This flaw was introduced in commit 7385610d0c7, which was shipped enabled by default from commit d71ff2b9db566b3f in curl 7.77.0.
The Common Vulnerabilities and Exposures (CVE) project has assigned the name CVE-2023-23914 to this issue.
CWE-319: Cleartext Transmission of Sensitive Information
Severity: Low
AFFECTED VERSIONS
Affected versions: curl 7.77.0 to and including 7.87.0
Not affected versions: curl < 7.77.0 and curl >= 7.88.0
curl is used by many applications, but not always advertised as such!
THE SOLUTION
7.88.0 will share the HSTS state properly between transfers.
RECOMMENDATIONS
A - Upgrade curl to version 7.88.0
B - Apply the patch to your local version
C - Specify all URLs with HTTPS:// and not HTTP://
TIMELINE
This issue was reported to the curl project on December 21, 2022. We contacted distros@openwall on February 7, 2022.
curl 7.88.0 was released on February 15 2023, coordinated with the publication of this advisory.

Now 7.88.1! I can confirm that this release works well since I did a lot of testing for the cURL team on Windows yesterday, and a couple last minute bug fixes.