← На главную

OpenSSH и SystemD ставят уязвимый xz-utils

08.05.2026 00:03 · hackernews

Вся вина за уязвимость CVE-2024-3094 не должна лежать на пакетах xz-utils, хотя они и стали инструментом атаки. Реальная проблема кроется в двух устаревших решениях дизайна в критическом открытом коде: связывании OpenSSH с SystemD и использовании механизма GNU IFUNC. Когда дистрибутивы вроде Debian и Fedora модифицируют OpenSSH, добавляя в него поддержку SystemD для устранения гонок условий при перезапуссе daemons, эти изменения остаются в форках и не попадают в основной проект. Поскольку SystemD использует xz-utils, а xz-utils применяет GNU IFUNC, вредоносный код из библиотеки xz-utils оказывается в адресном пространстве сервера SSH. GNU IFUNC предназначен для динамического выбора версий функций под конкретные возможности процессора, но механизм допускает запуск произвольного кода во время линковки символов. Это нарушает принцип наименьшего удивления и обходит защиту через RELRO, так как делает глобальную таблицу пересылок (GOT) записываемой. Даже если бы GNU IFUNC и давал производительность, реальная разница незначительна по сравнению с простыми указателями на функции, которые работают медленнее, но безопаснее. Эксперименты показывают, что вызов функции с использованием GNU IFUNC в два раза медленнее простого указателя, что разрушает миф о его эффективности. Более того, существуют альтернативы вроде явной проверки функций и использования LD_PRELOAD для выбора оптимизированных библиотек. Проблема усугубляется разрозненностью команд: разработчики SystemD, OpenSSH и xz-utils не общались достаточно, чтобы понять взаимозависимости. Я считаю, что использование GNU IFUNC вне стандартной библиотеки glibc недопустимо, а разработчикам gcc стоит отключать эту опцию по умолчанию и требовать специальных флагов для ее включения.

Читать оригинал →