Несколько уязвимостей в Linux, позволяющих повысить свои привилегии
В приложении userhelper и библиотеке libuser, поставляемым по умолчанию в дистрибутивах, основанных на пакетной базе Red Hat, выявлена серия уязвимостей (CVE-2015-3245, CVE-2015-3246), позволяющих выполнить код с привилегиями пользователя root. Для демонстрации проблемы приводится рабочий эксплоит, применяемый к приложениям, использующим libuser для манипуляций с учётными записями пользователей.
Первая уязвимость присутствует в программе userhelper. Программа предназначена для смены информации о пользователе и примечательна тем, что поставляется с установленным флагом setuid-root. Уязвимость вызвана тем, что при разборе передаваемых опций не осуществляется проверка на наличие символа перевода строки ('n'), что позволяет атакующим передать данные, добавление которых в файл /etc/passwd приведёт к появлению новой строки. Так как указание символа ":" запрещено, имеется возможность добавить только неотформатированные строковые данные, что может быть использовано для осуществления DoS-атаки.
Вторая уязвимость присутствует в библиотеке libuser и вызвана особенностью работы с файлом /etc/passwd. В отличие от классических утилит passwd, chfn и chsh которые вначале создают временный файл с копией /etc/passwd, модифицируют его и заменяют основной файл, в libuser применяется прямая модификация /etc/passwd. Если в ходе манипуляций с /etc/passwd произойдёт ошибка, файл может остаться в некорректном виде. Путём определённых манипуляций, в сочетании с первой уязвимостью, можно добиться очистки записи для пользователя root ("na::0:0::/:n") или осуществить подмену поля с shell и домашней директорией, что даёт возможность организовать выполнение кода с правами root.
Дополнительно можно упомянуть выявление уязвимости (CVE-2015-3290) в коде работы с NMI в ядре Linux, позволяющей инициировать крах ядра или выполнить код с правами root. Сообщается, что для уязвимости уже имеется готовый эксплоит, который будет опубликован только через одну-две недели, чтобы дать пользователям время обновить свои системы. Проблема проявляется на системах с архитектурой x86_64 при использовании ядра Linux 3.13 и более новых версий.