В компонента systemd-coredump, който осигурява обработка на core файлове, генерирани след аварийно завершаване на процеси, е открита уязвимост (CVE-2022-4415), позволяваща на непривилегирован локален потребител да определи съдържанието на паметта на привилегировани процеси, стартирани с флага suid root. Наличието на проблема в конфигурацията по подразбиране е потвърдено в дистрибуциите openSUSE, Arch, Debian, Fedora и SLES.
Уязвимостта е причинена от липсата на правилна обработка на sysctl параметъра fs.suid_dumpable в systemd-coredump, който при зададена стойност по подразбиране 2 разрешава генериране на core дъмпове за процеси с флага suid. Предполага се, че на записаните от ядрото core файлове на suid процесите трябва да се зададат права за достъп, разрешаващи четене само на потребителя root. Утилитата systemd-coredump, която се извиква от ядрото за запазване на core файловете, запазва core файла под идентификатора root, но в допълнение предоставя достъп до core файловете на базата на ACL, допускащ четене на базата на идентификатора на собственика, който първоначално е стартирал процеса.
Посочената особеност позволява зареждане на core файлове без оглед на това, че програмата може да смени идентификатора на потребителя и да работи с повишени привилегии. Атаката се състои в това, че потребителят може да стартира suid приложение и да му изпрати сигнал SIGSEGV, след което да зареди съдържанието на core файла, включващо изрезка от паметта на процеса по време на аварийното завършване.
Например, потребителят може да стартира «/usr/bin/su» и в друг терминал да прекрати изпълнението му с командата «kill -s SIGSEGV `pidof su`», след което systemd-coredump ще запази core-файл в директорията /var/lib/systemd/coredump, като зададе ACL, позволяваща четене на текущия потребител. Понеже suid-утилитата 'su' чете съдържанието на /etc/shadow в паметта, атакуващият може да получи достъп до информация за хешовете на паролите на всички потребители в системата. Утилитата sudo не е уязвима на атаки, тъй като забранява генерирането на core-файлове чрез ulimit.
Според заявленията на разработчиците на systemd, уязвимостта се проявява от версия 247 (ноември 2020 г.), но според изследователя, който я е открил, е уязвима и версия 246. Уязвимостта се появява, ако systemd е компилиран с библиотеката libacl (която по подразбиране е налична във всички популярни дистрибуции). Понастоящем корекцията е налична под формата на пач. Можете да проследите корекциите в дистрибуциите на следните страници: Debian, Ubuntu, Gentoo, RHEL, SUSE, Fedora, Gentoo, Arch. Като обходен метод за защита може да се зададе sysctl fs.suid_dumpable на стойност 0, което деактивира предаването на дъмпове на обработчика systemd-coredump.
Източник: opennet.ru
