imageФото: Paul Harrison/Flickr

Специалист компании Apple Джо Венникс рассказал об уязвимости (CVE-2019-14287) в команде sudo в Linux. Она позволяет непривилегированным пользователям запускать команды с правами суперпользователя.

Однако данная проблема возникает лишь при нестандартных настройках конфигурации и не затрагивает большинство Linux-серверов.

Команда sudo дает возможность непривилегированным пользователям с соответствующим разрешением или паролем суперпользователя выполнять на Linux-машинах команды с его правами. При добавлении инструкций в конфигурационный файл /etc/sudoers систему можно настроить для запуска команд от имени другого пользователя, однако это невозможно в отношении суперпользователя. Именно при этих настройках конфигурации пользователи могут обойти ограничения и запускать команды с привилегиями суперпользователя, добавив в командную строку -u#-1, выяснил Венникс.

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

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

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

Исправление также доступно в форме патча. В дистрибутивах уязвимость уже устранена в Debian, Arch Linux, SUSE/openSUSE, Ubuntu, Gentoo и FreeBSD.

Комментарии (9)


  1. byme
    15.10.2019 14:44

    Какое отношение эта статья имеет к

    Как настроить Linux для входа в домен с использованием алгоритмов ГОСТ



    1. byme
      15.10.2019 15:26

      Уже убрали.


  1. CaptainFlint
    15.10.2019 15:13
    +8

    …будучи подписанной 32-разрядной целочисленной переменной
    Ню-ню.


  1. staticmain
    15.10.2019 16:30

    $ sudo -u#-1 whoami
    [sudo] пароль для alex: 
    
    U16.04, ЧЯДНТ?


    1. namikiri
      15.10.2019 16:40

      Введите пароль. В теории, даже не-sudoer станет рутом.


      1. Meklon
        15.10.2019 16:59
        +4

        Не совсем. Нужно быть упомянутым в sudoers. И иметь переменную ALL, от имени которых можно выполнять команду.

        Уязвимость очень ограниченная.

        1. Обход запрета использования Всех кроме Root
          myhost bob = (ALL, !root) /usr/bin/vi
        2. В логах будет запуск от пользователя -1, а не root, что потенциально ломает аналитику и расследование инцидентов
        3. Так как пользователь -1 отсутствует, к нему не будут применены никакие модули PAM.


        Большинство записей в sudoers с переменной ALL и так подразумевают, что у пользователя полные права, включая root. Здесь минус только в маскировке логов.
        Единственная потенциальная серьезная опасность – записи с исключением (ALL, !root). Тогда пользователь может получить несанкционированный root в системе.


    1. androidovshchik
      15.10.2019 18:02

      На Fedora 30 интереснее

      $ sudo -u#-1 whoami
      vlad is not in the sudoers file.  This incident will be reported.
      


      1. maxzhurkin
        15.10.2019 20:42

        А кто будет добавлять в /etc/sudoers строку
        vlad myhost = (ALL, !root) /usr/bin/whoami
        ?


    1. maxzhurkin
      15.10.2019 20:45

      Вы забыли добавить в /etc/sudoers строку
      alex myhost = (ALL, !root) /usr/bin/whoami