← Все новости

Уязвимость CVE-2026-3497 в GSSAPI-патче OpenSSH эксплуатируется удалённо

• Категория: Безопасность • Автор: Алексей Воронов • Проверил: Екатерина Морозова • 13.03.2026 11:45

В патче gssapi.patch, который добавляет поддержку обмена ключей на базе GSSAPI в OpenSSH и широко применяется во многих дистрибутивах Linux, выявлена уязвимость (CVE-2026-3497). Уязвимость приводит к разыменованию указателя, повреждению памяти и обходу механизма разделения привилегий (Privsep).

Уязвимость может быть эксплуатирована удалённо на стадии до аутентификации. Исследователь, выявивший проблему, продемонстрировал, что отправка одного модифицированного сетевого пакета на SSH-сервер инициирует аварийное завершение процесса. Не исключается, что помимо отказа в обслуживании существуют более опасные варианты эксплуатации.

Примечательно, что разработчики OpenSSH изначально отказались принимать изменение для поддержки GSSAPI в основной кодовой базе из-за сомнений в его безопасности. Тем не менее, многие дистрибутивы Linux включили этот патч в свои пакеты. В обиходе существуют различные версии GSSAPI-патча, большинство из которых подвержены выявленной уязвимости.

Исправление пока доступно только в форме патча, в котором замена вызова функции sshpkt_disconnect() на ssh_packet_disconnect() в файле kexgsss.c решает проблему. Наличие уязвимости подтверждено в Debian и Ubuntu. В остальных дистрибутивах (SUSE/openSUSE, RHEL, Gentoo, Arch, Fedora) проверка на наличие проблемного патча продолжается.

Уязвимость проявляется только при включении опции "GSSAPIKeyExchange yes" в настройках. Возможность эксплуатации также зависит от опций компилятора, с которыми был собран пакет в дистрибутиве.

Причиной уязвимости является ошибка в функции sshpkt_disconnect(). При поступлении disconnect-сообщения процесс не завершается, что позволяет атакующему отправить на стадии согласования ключей не предусмотренный логикой работы сервера тип GSSAPI-сообщения. Сервер помещает это сообщение в очередь и продолжает выполнение программы, но при этом не инициализирует переменные, определяющие параметры соединения.

В дальнейшем в цикле обработки событий выполняется код, который читает неинициализированную структуру recv_tok из стека (на практике это значит, что читаются данные, оставшиеся в стеке от предыдущего вызова функции), отправляет её привилегированному процессу через IPC и затем передаёт в функцию gss_release_buffer(), которая может вызвать free() и освободить память для некорректного указателя, ссылающегося на случайную область памяти.

Теги: #кибербезопасность, #Linux, #OpenSSH, #GSSAPI, #CVE-2026-3497, #удалённая уязвимость, #Privsep