Уязвимост в GSSAPI пача за OpenSSH, който може да бъде експлоатиран дистанционно на етапа преди аутентификацията

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

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

В настоящее время уязвимость подтверждена в Debian и Ubuntu. В других дистрибутивах ещё уточняется использование проблемного патча и его подверженность уязвимости (SUSE/openSUSE, RHEL, Gentoo, Arch, Fedora). Уязвимость проявляется только при включении опции «GSSAPIKeyExchange yes» в настройках. Возможность эксплуатации также зависит от опций компилятора, которые использовались при сборке пакета в дистрибутивах.

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

Източник: opennet.ru

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster