В systemd 228 обнаружена локальная root-уязвимость
Уязвимость вызвана тем, что при использовании таймеров systemd выполнение функции touch() приводит к созданию файлов в директории /run, /var/run и /var/lib/systemd/timers/ с правами 07777 (по ошибке передаётся значение "-1"). Проблема присутствует в кодовой базе systemd только в выпуске 228 и была около года назад без лишней огласки устранена в выпуске 229. В примечании к исправлению указано, что исправленная ошибка может привести к DoS-атаке через исчерпание дискового пространства в разделе через заполнение файла /run/systemd/show-status, созданного с правами 07777. При этом явно данная проблема уязвимостью помечена не была и не выделялась в общем потоке изменений.
Спустя год на исправление обратили внимание разработчики дистрибутива SUSE, которые пришли к выводу, что указанная ошибка не ограничивается отказом в обслуживании и может легко быть использована для получения root-доступа в системе. Выставляемые для файла права 07777 подразумевают не только общий доступ на запись, но и установку на файл флага исполнения и suid-бита.
Так как файлы создаются под пользователем root для успешной атаки необходимо добиться, чтобы systemd сформировал файл с правами 07777, после чего записать в него исполняемый файл. В дальнейшем остаётся просто запустить этот файл. Адаптировав к данной особенности программу для создания setgid-файлов, созданную для демонстрации похожей уязвимости, исследователям удалось успешно провести тестовую атаку, запустив произвольный исполняемый файл под пользователем root.
$ ls -la /var/lib/systemd/timers/ -rwsrwsrwt 1 root root 155 18. Jan 11:37 stamp-fstrim.timer $ /var/lib/systemd/timers/stamp-fstrim.timer /bin/sh -p # grep bin /etc/shadow bin:*:15288::::::
Источник: http://www.opennet.ru/opennews/art.shtml?num=45908
|
0 | Tweet | Нравится |
|