В компонента на 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
