Уязвимость в утилите eject, позволяющая повысить свои привилегии

28.03.2017 18:52

В утилите eject, предназначенной для инициирования операции извлечения съёмного накопителя (например, CD), обнаружена уязвимость (CVE-2017-6964), позволяющая локальному пользователю повысить свои привилегии в системе.

Утилита dmcrypt-get-device (/usr/lib/eject/dmcrypt-get-device), которая вызывается при запуске eject, выполняется с флагом suid root. Расширенные права требуются только для открытия файла /dev/mapper/control, после чего привилегии сбрасываются и разбор данных от device mapper производится под обычным непривилегированным пользователем. Суть проблемы в том, что разработчики полагали, что выполнение setuid(getuid()) всегда выполнятся успешно и не выполняли проверку возвращаемого значения. Атакующий может создать условия, при которых setuid не сможет быть выполнен (например, из-за превышения лимитов RLimitMEM или RLimitNPROC) и тогда выполнение продолжится без сброса привилегий.

Так как dmcrypt-get-device поставляется только в Debian и Ubuntu, лишь данные дистрибутивы подвержены проблеме (обновления с исправлениями уже выпущены).