Компания Qualys откри критична уязвимост (CVE-2024-6387) в OpenSSH, позволяваща отдалено изпълнение на код с права root без автентикация. Уязвимостта, получила кодовото име regreSSHion, се проявява в конфигурацията по подразбиране от версия OpenSSH 8.5 на системи с стандартната библиотека Glibc.
Възможността за извършване на атака е демонстрирана на 32-битова система с Glibc с включена защита ASLR (развлекателна адресна пространствена защита). За успешна атака в лабораторни условия са били необходими 6-8 часа, по време на които непрекъснато са се установявали връзки с максималната допустима интензивност в конфигурацията sshd. сървър Извършването на атака е улеснено и изисква по-малко време на системи без ASLR или в дистрибуции, използващи модифициран OpenSSH, в който е деактивирана повторната рандомизация ASLR за всяка връзка. Решено е да не се публикува работен прототип на експлойта до пълното отстраняване на уязвимостта, но едновременно с това е достъпно достатъчно подробно описание на същността на уязвимостта, което прави появата на външни експлойти въпрос на време.
Не се изключва възможността за извършване на атака и на 64-битови системи, но работен експлойт за такива системи все още не е готов. Предполага се, че провеждането на атака на 64-битови системи ще отнеме значително повече време, но не повече от седмица. OpenSSH в OpenBSD не е уязвим, тъй като в тази система от 2001 година се използва механизъм за защита, блокиращ подобни класове атаки. В други системи на базата на стандартни библиотеки, различни от Glibc, теоретично е възможна адаптация на метода за извършване на атака (в Qualys този въпрос все още не е изучаван).
Уязвимостта е отстранена в публикуваната днес версия на OpenSSH 9.8 (патч). Може да се проследи публикуването на актуализации на пакетите в дистрибуциите на страниците: Debian, Ubuntu, RHEL, SUSE/openSUSE, Fedora, ROSA, Gentoo, ALT Linux, Arch и FreeBSD. Като работен вариант за блокиране на уязвимостта в sshd_config, параметърът „LoginGraceTime=0“ може да бъде настроен, като деактивирането на тайм аута ще улесни инициирането на отказ на обслужване при създаване на голям брой връзки, превишаващи лимитите, зададени чрез параметъра MaxStartups.
Един от признаците на опити за атака е появата на голям брой записи "Timeout before authentication" в логовете.
Уязвимостта се е появила в резултат на регресивна промяна, включена в изданието на OpenSSH 8.5, която води до състояние на състезание в кода за обработка на сигнали в sshd. Регресията е довела до спиране на защитата от старата уязвимост CVE-2006-5051, която се е проявявала до версия OpenSSH 4.4 (2006 година) и е била теоретична.
По време на разработката на OpenSSH 8.5 по погрешка е било премахнато блокът "#ifdef DO_LOG_SAFE_IN_SIGHAND" от функцията sigdie(), която се извиква директно от обработчика SIGALRM.
Обработчикът SIGALRM се извиква в sshd в асинхронен режим, ако клиентът не е направил аутентификация в рамките на времето, ограничено от таймаута за свързване (LoginGraceTime, по подразбиране 120 сек). Атаката е основана на това, че обработчикът на сигнала извиква функции, които не са безопасни при асинхронна обработка на сигнали, като syslog(). Функцията syslog() в Glibc не е проектирана за използване в асинхронно изпълнявани обработчици на сигнали, тъй като извиква функции malloc() и free(). Сработването на сигнала SIGALRM, прекъсващ изпълнението на определен код в sshd, може да доведе до нарушаване на състоянието на изпълнение, а задачата на експлойта е да създаде условия за прекъсване на нужния код в необходимия момент на неговото изпълнение. Уязвимостта не засяга OpenBSD, тъй като в него вместо syslog() от обработчика на сигнала SIGALRM се извиква функцията syslog_r(), специално създадена за асинхронно изпълнение.
Източник: opennet.ru
