[Daniel's week] June 26, 2026
Daniel Stenberg
daniel at haxx.se
Fri Jun 26 16:09:09 CEST 2026
Hello,
It's been a week.
# release
The release we made this week, curl 8.21.0 [1], broke at least three new
project records!
First, we published the largest number of vulnerabilities for a single release
ever: 18. This huge amount created a new challenge for me in just keeping
track of them all and explaining them in the release video etc. Let’s hope we
don’t have a reason to beat this record again. I fear we might though.
The second project record was in the number of people thanked and credited as
contributors to this release. We included 102 names in the release notes this
time, which was around ten more names than the previous highscore. This of
course is a record that I feel better about and I hope we can beat again soon.
I think it is a good health-sign for the project when we have a lot of people
involved with a strong interest in improving curl.
The third record is the oldest curl vulnerability reported so far.
CVE-2026-8932 [2] was included in the curl 7.7 release we shipped in March
2001, making it more than twenty-five years old. When we list the top-20
longest lasting vulnerabilities in curl, even the one on the 20th position was
older than twenty years when found...
Aisle, the company behind six of these latest vulnerability reports, wrote a
blog post about their work [14].
# security
We saw something of a slow-down in vulnerability reporting last week, but I
suspect it was just a random fluke or something as we have again received a
number of new reports after the release shipped. The deluge is not over.
I have been thinking about how to measure and tell when the vulnapocalypse
eventually slows down or even reaches its end - because yes I am convinced
that it will happen at some point. We just don’t know if it is within six
months or four years or something like that. I believe one such tell-sign of
an approaching end could be when the median age for newly reported
vulnerabilities starts to seriously drop. This has not happened yet [3]. While
the median age for curl vulnerabilities dropped when these latest eighteen
advisories were published, it remains over six years. The average age remains
at over eight years.
One of the vulnerabilities we reported this time around involved the use of a
trailing dot for the host name in the URL provided to curl. It was actually
the third trailing dot related problem fixed in this release alone, and I felt
the urge to express my frustration in a blog post [4].
After an idea from Stefan Eissing, I created a data visualization video this
Friday instead of a new graph for the dashboard, illustrating the curl
vulnerability mounting [5] and how it changes shape over time. It turned out
pretty cool I think! perl, data, gnuplot and ffmpeg in a glorious combination.
This week we got our first and so far only CVE dispute resolved [6] as the
powers that be decreed that they stand behind us when we back in November 2025
decided to not assign a CVE to an issue we decided was not a vulnerability.
The process was however super weird and totally opaque for everyone involved.
Not ideal.
# PSL
We have had talks in the curl core team on the PSL situation for curl on
different platforms and distributions. We involved the Debian curl maintainers
in this and that resulted in Samuel spotting that the Homebrew curl package
did not enable libpsl by default [7], making it vulnerable to super-cookies.
The larger discussion also involves work on making sure and helping more
distros to update their PSL databases faster.
I also submitted an issue to libpsl [8] about one of the API calls not
handling trailing dots, which was involved in one of the recently announced
curl vulnerabilities. Tim Rühsen, the libpsl maintainer, fixed this in no time
[9].
# inet_ntop
As I wrote up some new test code for the libcurl URL parser API, I get to
experience that MUSL's inet_ntop() function does not output "::[ipv4]" when
asked to output an IPv6 address RFC 4291 style. Something both glibc and
curl's internal replacements do. This output format is deprecated in later
specifications, it is not mentioned as necessary in POSIX and the MUSL code
makes no effort to try to support it. I think they are totally entitled to
this and it seems okay (so I did not submit any bugreport to them), but I
still want the libcurl URL API to work identically independently of the libc
used so we had to tweak the curl build this week to make it so. The outcome is
probably that we always use our own internal inet_ntop() code so that we can
have it consistent across all platforms.
The reason it matters is because libcurl has an IP address “normalizer” for
URLs that contain IP addresses instead of hostnames, and that normalizer
should of course output addresses consistently.
# OpenSSL fuzz
We upgraded to OpenSSL 4.0.1 in our curl-fuzzer [10] repository this week.
This is the build that is being built and fuzzed as part of the OSS-Fuzz
effort. We immediately got a heap-buffer-overflow trigger on this version
which proved to happen deep in a stack trace in OpenSSL code. I reported it
privately to OpenSSL as it could be security related, but it turns out it
isn’t and they pointed out someone else already reported this [11]. As a fun
coincidence it turns out that the “someone else” was from Aisle, the team
behind six of the last batch of curl CVEs. Friends.
# wolfSSL return code
Like most other Open Source projects, wolfSSL has also been struggling with
this vulnerability avalanche lately, and they just released a new version with
many fixes that included many security fixes. As we were trying to upgrade to
their latest version as part of our CI builds, we ran into an interop issue as
the new version returns an unexpected return value that now makes one of our
test cases fail. I submitted an issue to the team about it [12].
# QUERY
I wrote a short blog blurb about the new HTTP method QUERY [13] and what it
means for curl and how to use it with curl.
## Coming up
- Last week before the summer of bliss starts. Can’t wait
## Links
[1] = https://daniel.haxx.se/blog/2026/06/24/curl-8-21-0/
[2] = https://curl.se/docs/CVE-2026-8932.html
[3] = https://curl.se/dashboard1.html#vulnerability-average-age
[4] = https://daniel.haxx.se/blog/2026/06/25/trailing-dots-are-the-worst/
[5] = https://daniel.haxx.se/blog/2026/06/26/a-curl-mountain-movie/
[6] = https://daniel.haxx.se/blog/2026/06/24/a-cve-dispute/
[7] = https://github.com/Homebrew/homebrew-core/pull/289395
[8] = https://github.com/rockdaboot/libpsl/issues/279
[9] = https://github.com/rockdaboot/libpsl/pull/281
[10] = https://github.com/curl/curl-fuzzer
[11] = https://github.com/openssl/openssl/issues/31315
[12] = https://github.com/wolfSSL/wolfssl/issues/10790
[13] = https://daniel.haxx.se/blog/2026/06/21/query-with-curl/
[14] = https://aisle.com/blog/aisle-discovers-6-new-cves-in-curl-including-the-oldest-issue-ever-reported
--
/ daniel.haxx.se
More information about the daniel
mailing list