Компанията Qualys откри опасна уязвимост (CVE-2023-6246) в стандартната Си-библиотека Glibc, която позволява чрез манипулации с изпълнението на SUID-приложения да се постигне изпълнение на собствен код с повишени привилегии. Изследователите успяха да разработят работещ експлойт, позволяващ получаването на права root чрез манипулация с аргументите на командния ред при стартиране на утилитата su.
Уязвимостта е причинена от преливане на буфер в функцията __vsyslog_internal(), използвана при извикването на функциите syslog() и vsyslog(). Проблемът възниква поради грешка при опита за извеждане чрез макроса SYSLOG_HEADER на твърде дълго име на приложението. При опит за разширяване на буфера с оглед на дългото име възниква срив, след което данните се записват в стария буфер с първоначално по-малък размер.
При организиране на атака чрез утилитата su атакуващият може да промени името на процеса при стартиране на приложението, като замени стойността на argv[0], която се използва за получаване на информация за името на програмата при извеждане в лог, и да постигне контролирано презаписване на данни извън заделения буфер. След това преливането може да се използва за презаписване на структурата nss_module в библиотеката nss, за да създаде споделена библиотека и нейното зареждане с права root.
Проблемът се проявява от изданието glibc 2.37, публикувано през август 2022 г. и включващо промяна, която обработва ситуацията с опити за запис на твърде големи съобщения. Вносящото уязвимост поправяне беше пренесено в клона glibc 2.36 и пакети на дистрибуции с по-стари версии на glibc, тъй като отбелязаното поправяне отстраняваше уязвимостта CVE-2022-39046, водеща до изтичане на данни от купчината. Получи се така, че поправянето на безопасната уязвимост доведе до появата на критичен проблем. Затова е забележително, че за подобна уязвимост във функцията vsyslog() от библиотеката libc 5.4.3 е съобщавано още през 1997 г.
Потвърдена е уязвимост в Debian 12/13, Ubuntu 23.04/23.10 и Fedora 37-39. Работата на експлойта за получаване на права root от непривилегирован потребител е демонстрирана в напълно обновено Fedora 38 с активирани всички механизми за защита по подразбиране. Уязвимостта може да се експлоатира само локално, тъй като изисква предаване на повече от 1024 байта през параметъра argv[0] или аргумента ident във функцията openlog().
Поправката на уязвимостта беше включена преди няколко часа в кодовата база Glibc и ще влезе в утрешното обновление на Glibc 2.39, заедно с поправките на още две уязвимости (CVE-2023-6779, CVE-2023-6780), които също засягат кода на __vsyslog_internal() и водят до препълване на буфера. Освен това, компанията Qualys предупреди за откритие на препълване на буфера в реализацията на функцията qsort(), която не беше класифицирана от разработчиците на Glibc като уязвимост, тъй като експлоатацията предполага използване на нестандартна функция за сравнение, която връща разликата между сравняваните параметри.
Статус устранения уязвимостей в дистрибутивах можно оценить на данных страницах: Debian, Ubuntu, SUSE, RHEL, Fedora, Arch Linux, Gentoo, Slackware. Протестировать подверженность системы уязвимости можно следующей командой: $ (exec -a «`printf ‘%0128000x’ 1`» /usr/bin/su < /dev/null)
Източник: opennet.ru
