Уязвимость в sudo позволяет запускать на Linux-машинах команды с правами суперпользователя

0

Специалист компании Apple Джо Венникс (Joe Vennix) обнаружил уязвимость (CVE-2019-14287) в команде sudo в Linux, позволяющую непривилегированным пользователям запускать команды с правами суперпользователя. К счастью, проблема возникает только при нестандартных настройках конфигурации и не затрагивает большинство Linux-серверов.

Команда sudo (super user do) позволяет непривилегированным пользователям, которым было дано соответствующее разрешение или известен пароль суперпользователя, выполнять на Linux-машинах команды с правами суперпользователя. Sudo можно также сконфигурировать для запуска команд от имени другого пользователя (за исключением суперпользователя) путем добавления особых инструкций в конфигурационный файл /etc/sudoers.

Уязвимость возникает как раз при настройках конфигурации sudo, позволяющих пользователям запускать команды от имени других пользователей. Добавив в командную строку -u#-1, они могут обойти ограничения и запускать команды с привилегиями суперпользователя.

Допустим, администратор создал на сервере mybox пользователя sudo с именем bob, добавив в конфигурационный файл строку mybox bob = (ALL, !root) /usr/bin/vi. По идее, это даст пользователю bob возможность запускать текстовый редактор Vi с привилегиями любого пользователя за исключением суперпользователя. Однако, если bob запустит команду sudo -u#-1 vi, то сможет запускать Vi с привилегиями суперпользователя.

Почему так происходит? Скажем, -u#1234 может использоваться в командной строке с sudo для запуска команд, в данном случае Vi, в качестве идентификатора (ID) пользователя 1234. Sudo передает это значение идентификатора через системные вызовы setresuid и setreuid для изменения эффективного ID пользователя команды.

В результате, -u#-1 передает через вызовы -1 для изменения эффективного идентификатора на -1. Системный вызов принимает данный ID в качестве особенного и не меняет идентификатор пользователя. Поскольку sudo изначально обладает правами суперпользователя, -1 продолжает работать как суперпользователь. Интересно, что идентификатор пользователя 4294967295 также способен обходить ограничения, поскольку, будучи подписанной 32-разрядной целочисленной переменной, он равен -1.

Во избежание возможных атак с использованием данной уязвимости пользователям настоятельно рекомендуется обновить sudo до версии 1.8.28 или более поздней. В обновленной версии sudo -1 больше не принимается в качестве идентификатора пользователя, поэтому эксплуатация уязвимости невозможна.

You might also like More from author