[gnutls-help] Switching to gzip for tarballs (was gnutls 3.8.12)
Antonio Diaz Diaz
antonio at gnu.org
Tue May 5 20:19:53 CEST 2026
Simon Josefsson wrote:
> I find the arguments to chose anything beyond gzip are rather weak
> today. I changed GNU InetUtils to gzip recently (from xz+gz).
Fair enough. I'm fine with gzip.
> Changing compression algorithm has a cost too. I'm not convinced the
> arguments for any particular compression method are strong enough to
> warrant switching.
Maybe they aren't, but I'm not arguing for a particular compression method.
I'm warning about the safety risks of using xz. Some recently fixed bugs in
gnutls and linux may help illustrate the problem.
A week ago, a couple bug fixes about unchecked lengths listed in the
announcement of gnutls-3.8.13 reminded me that the xz format has many length
fields whose correctness can't be checked [1].
A couple days later I received a warning about a serious vulnerability in
linux named 'Copy Fail', which seems to have been caused by a useless
optimization [2]. The fix consisted in getting rid of all the complexity
added for in-place operation and just copy the AD (Associated Data)
directly. This reminded me that the xz format is full of troublesome useless
features [3] whose inconvenients could have been avoided just by not
including useless features in the format.
It is a well-known fact that the xz format is unsafe. The catch is that xz
is unsafe by design, and therefore undetected corruption is considered the
user's problem, not a bug. Even the documentation of xz-utils warns about
it. For example, from xz-5.8.3:
INSTALL (line 307):
liblzma and the command line tools can decompress files
which use unsupported integrity check type, but naturally
the file integrity cannot be verified in that case.
doc/man/txt/xz.txt (line 1478):
Outside embedded systems, all .xz format decompressors support all the
check types, or at least are able to decompress the file without verifying
the integrity check if the particular check is not supported.
src/liblzma/common/block_decoder.c (line 262):
// Initialize the check. It's caller's problem if the Check ID is not
// supported, and the Block decoder cannot verify the Check field.
Like AF_ALG [4], xz is a massive, largely pointless attack surface which has
been causing problems, including several CVEs, ever since it was released in
2009. There's no need to use such a complex and poorly designed container
format as xz just to compress a tarball.
Linux and crypto libraries are the basis of our security. If they make
unsafe decisions like implementing useless features/optimizations, or using
the xz format, then IMHO there is something wrong in their decision-making
process that needs to be revised.
As the risks associated to the use of xz can be easily avoided by switching
to any of the 3 safe and time-proven formats previously used by gnutls to
compress its tarballs (gzip, bzip2, and lzip), I respectfully suggest the
gnutls maintainrs to use one of them to compress the tarballs instead of xz.
(For example bzip2, which seems to be the format used by most of the
libraries in gnupg.org).
[1] http://www.nongnu.org/lzip/xz_inadequate.html#unprot_len
[2] https://www.openwall.com/lists/oss-security/2026/04/29/23
[3] http://www.nongnu.org/lzip/xz_inadequate.html#misguided
[4] https://www.openwall.com/lists/oss-security/2026/04/30/15
Best regards,
Antonio.
More information about the Gnutls-help
mailing list