В процеса на изследване на критичната уязвимост в OpenSSH, открита миналата седмица, беше открита и друга подобна уязвимост (CVE-2024-6409), която позволява отдалечено изпълнение на код без преминаване на удостоверяване. Новата уязвимост не е толкова опасна, колкото предишната, тъй като се проявява след свалянето на привилегиите в дочерния процес на стартирания SSH сървър. Уязвимостта присъства в пакетите openssh от дистрибуцията Red Hat Enterprise Linux 9, основана на публикувания през 2021 година релиз на OpenSSH 8.7. Проблемът засяга и пакетите за Fedora Linux 36 и 37, основани на версиите OpenSSH 8.7 и 8.8.
По същество уязвимостта е аналогична на предишния проблем и също е резултат от състезателно състояние в обработчика на преустановяването SIGALRM, което възниква поради изпълнението на функции, нерасчитани за извикване в асинхронен режим от обработчици на сигнали. Обработчикът се задейства при изтичането на времето, определено чрез параметъра LoginGraceTime, и прекратява текущото изпълнение на кода. Използването на функции в обработчици на преустановявания, неразчитани за асинхронно изпълнение, при които се прилага динамично разпределение на паметта, като syslog(), може да доведе до повреждане на вътрешните структури на malloc при задействане на SIGALRM по време на изпълнението на определен код.
Новата уязвимост се различава по това, че състезателното състояние възниква поради извикване на функцията cleanup_exit() в обработчика на сигнала grace_alarm_handler(). В основната кодова база на OpenSSH тази функция може да се използва в асинхронно изпълняван код, но в пакетите за RHEL 9 и Fedora е приложен допълнителен патч, който добавя в cleanup_exit() извикване на функция за генериране на събития за одит, предназначена за използване в обработчици на сигнали.
Този патч е използван в RHEL 9 и произходните дистрибуции в пакетите, основани на OpenSSH 8.7p1. В актуалните версии на Fedora проблемът не се проявява, тъй като от Fedora 38 дистрибуцията е преминала на по-нова версия на OpenSSH без промяна на cleanup_exit(). В отличие от предишната уязвимост, обходният метод за защита, основан на използването в sshd на опцията "-e", която деактивира изхода на логовете чрез syslog, не е подходящ за блокиране на новия проблем. Но при това, за блокиране на уязвимостта в sshd_config може да се зададе параметъра "LoginGraceTime=0."
Източник: opennet.ru
