Опубликован выпуск пакета XZ Utils 5.8.1, включающего библиотеку liblzma и утилиты для работы со сжатыми данными в формате ".xz". XZ Utils 5.8.1 стал первым значительным выпуском после инцидента с выявлением бэкдора, организующего вход через sshd. На прошлой неделе в Git был создан тег 5.8.0, но релиз не был объявлен официально из-за выявленных после публикации тега проблем с производительностью и совместимостью со старыми версиями GNU make.
В обновлении XZ Utils 5.8.1 устранена уязвимость (CVE-2025-31115), приводящая к аварийному завершению при попытке распаковки специально оформленных архивов. Уязвимость вызвана обращением к уже освобождённой области памяти (use after free). Атакующий может добиться записи своего значения по адресу, вычисляемому как "нулевой указатель + смещение". Проблема рассматривается как непреднамеренная ошибка, так как вызвавшее её изменение было внесено в код задолго до прихода в проект разработчика Jia Tan, деятельность которого привела к внедрению бэкдора.
Проблема проявляется начиная с выпуска XZ Utils 5.3.3alpha при декодировании в многопоточном режиме (однопоточных декодировщик проблема не затрагивает). Помимо штатных утилит из пакета xz, уязвимость проявляется и в сторонних программах, использующих функцию lzma_stream_decoder_mt из библиотеки liblzma. Уязвимость устранена в выпуске XZ Utils 5.8.1, а также перенесена в стабильные ветки 5.4 и 5.6. Проследить за появлением обновлений в дистрибутивах можно на следующих страницах: Debian, Ubuntu, RHEL, SUSE/openSUSE, Fedora, Arch, FreeBSD. В качестве обходного пути защиты можно отключить декодирование файлов в многопоточном режиме, используя при запуске xz опции "--decompress --threads=1" или применяя утилиту xzdec.
Из функциональных изменений в ветке XZ Utils 5.8 можно отметить:
- В декодировщик LZMA/LZMA2 добавлена возможность использования инструкций SSE2 вместо функции memcpy() на 32- и 64-разрядных системах x86. Изменение позволило сократить время декодирования до 5% при сборке с Glibc, и до 15% при сборке с musl при распаковке файлов с очень высоким уровнем сжатия.
- В liblzma повышена скорость кодирования на 64-разрядных системах PowerPC и RISC-V.
- В lzma/bcj.h добавлен низкоуровневый API BCJ-фильтров (Branch/Call/Jump) для систем RISC-V, ARM64 и x86.
- Переписан код вычисления CLMUL CRC для систем x86, x86-64 и E2K.
- На платформах с процессорами LoongArch задействованы инструкции для ускорения вычисления контрольных сумм CRC32.
- В утилите "xz" обеспечен вызов функции fsync() для сброса файловых кэшей для результирующего файла перед удалением исходного файла. Для отключения синхронизации перед удалением реализована опция "--no-sync".
- В утилитах xz, xzdec и lzmainfo при выводе информации на экран обеспечена замена непечатных символов на знак вопроса.
- В xz и xzdec на платформе Linux для изоляции процесса реализована поддержка 5 и 6 версий механизма Landlock.
- Добавлен скрипт для проверки лицензий build-aux/license-check.sh.
- Объявлены устаревшими скрипты lzcmp, lzdiff, lzless, lzmore, lzgrep, lzegrep и lzfgrep, реализованные в виде надстроек над утилитой xz.
Источник: https://www.opennet.ru/opennews/art.shtml?num=63017